MyBatisGenerator代码生成.docx
《MyBatisGenerator代码生成.docx》由会员分享,可在线阅读,更多相关《MyBatisGenerator代码生成.docx(52页珍藏版)》请在冰豆网上搜索。
![MyBatisGenerator代码生成.docx](https://file1.bdocx.com/fileroot1/2022-11/24/1aeec8c0-957b-4d43-92d1-a55301c95e51/1aeec8c0-957b-4d43-92d1-a55301c95e511.gif)
MyBatisGenerator代码生成
使用MybatisGenerator自动生成Mybatis相关代码
本文将简要介绍怎样利用MybatisGenerator自动生成Mybatis的相关代码:
一、构建一个环境:
1.首先创建一个表:
Sql代码
1.CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR
(1), birth DATE, death DATE);
2.然后注入数据
Sql代码
1.insert into pet values('Fluffy', 'Harold', 'cat', 'f', '1993-02-04', null);
2.insert into pet values('Claws', 'Gwen', 'cat', 'm', '1994-03-17', null);
3.insert into pet values('Buffy', 'Harold', 'dog', 'f', '1989-05-13', null);
4.insert into pet values('Fang', 'Benny', 'dog', 'm', '1990-08-27', null);
5.insert into pet values('Bowser', 'Diane', 'dog', 'm', '1979-08-31', '1995-07-29');
6.insert into pet values('Chirpy', 'Gwen', 'bird', 'f', '1998-09-11', null);
7.insert into pet values('Whistler', 'Gwen', 'bird', null, '1997-12-09', null);
8.insert into pet values('Slim', 'Benny', 'snake', 'm', '1996-04-29', null);
注:
这里的sql例子来自
3.在Mybatis主页上下载Mybatismybatis-generator-core[本文使用的是1.3.0版本]。
当然运行mybatis-generator生成的代码还需要下载mybatis的jar包[本例使用的是3.0.2版本],和相关数据库的jdbc[本文中使用的是MySql的jdbc]。
二、运行mybatis-generator
1.要运行generator,需要给generator提供一个配置文件,指定其生成的数据库的相关信息。
以下是一个示例:
Xml代码
1.
xml version="1.0" encoding="UTF-8"?
>
2.
DOCTYPE generatorConfiguration
3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
4. "http:
//mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15. 16. connectionURL="jdbc:
mysql:
//localhost/test" userId="qgd" password="123456">
17.
18.
19.
20.
21.
22.
23. 24. targetProject="../src/main/java">
25.
26.
27.
28.
29. 30. targetProject="../src/main/java">
31.
32.
33.
34. 35. targetPackage="test.dao" targetProject="../src/main/java">
36.
37.
38.
39.
41.
42.
43.
这个配置文件提供了mybatis-generator所需要的参数信息:
*其中classPathEntry是引用的jdbc的类路径,这里将jdbcjar和generator的jar包放在一起了;
*commentGenerator是用来除去时间信息的,这在配合类似subversion的代码管理工具时使用很有效,因为可以减少没有必要的注释迁入;
*jdbcConnection是指定的jdbc的连接信息;
*javaTypeResolver式类型转换的信息,这里并没有用到;
*javaModelGenerator是模型的生成信息,这里将指定这些Javamodel类的生成路径;
*sqlMapGenerator是mybatis的sqlMapperXML文件的生成信息,包括生成路径等;
*javaClientGenerator是应用接口的生成信息;
*table是用户指定的被生成相关信息的表,它必须在指定的jdbc连接中已经被建立。
2.mybatis-generator有多种运行方式,最简单的就是命令行的方式,只需要指定相应的配置文件的路径即可:
Java代码
1.java -jar mybatis-generator-core-1.3.0.jar -configfile ../src/main/resource/config.xml -overwrite
运行后生成的代码包括模型类test.model.Pet和test.model.PetExample,test.dao.PetMapper接口以及其相对应的xml映射文件,在这里就不在赘述了。
三、使用mybatis-generator生成的代码
1.现在我们要利用这些生成的代码,首先我们需要一个关于所有映射的配置文件。
需要我们手写如下:
【不知道为什么generator没有选择自动生成这个文件,毕竟这些信息generator都可以得到】
Xml代码
1.
xml version="1.0" encoding="UTF-8" ?
>
2.
DOCTYPE configuration
3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4. "http:
//mybatis.org/dtd/mybatis-3-config.dtd">
5.
6.
7.
8.
9.
10.
11. mysql:
//localhost/test" />
12.
13.
14.
15.
16.
17.
18.
19.
20.
2.另外还要使用然后我们还需要一个Main示例方法来调用这些已生成的代码:
Java代码
1.package test;
2.
3.import java.io.Reader;
4.import java.util.List;
5.
6.import org.apache.ibatis.io.Resources;
7.import org.apache.ibatis.session.SqlSession;
8.import org.apache.ibatis.session.SqlSessionFactory;
9.import org.apache.ibatis.session.SqlSessionFactoryBuilder;
10.
11.import test.dao.PetMapper;
12.import test.model.Pet;
13.import test.model.PetExample;
14.
15.public class Test {
16.
17. public static void main(String[] args) throws Exception {
18. String resource = "MapperConfig.xml";
19. Reader reader = Resources.getResourceAsReader(resource);
20. SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
21. SqlSession sqlSession = sqlMapper.openSession();
22.
23. PetExample pet = new PetExample();
24. pet.or().andDeathIsNotNull();
25. try {
26. PetMapper mapper = sqlSession.getMapper(PetMapper.class);
27. List allRecords = mapper.selectByExample(pet);
28. for (Pet s :
allRecords)
29. System.out.println(s);
30. } finally {
31. sqlSession.close();
32. }
33. }
34.}
这样就可以打印出相应的查询结果信息了。
四、小结
该示例的完整的Eclipse工程见附件mybatis-generator-usage.zip,其中已经包含了示例需要使用的jar包。
本文中只是用到了mybatis-generator的一部分功能,mybatis-generator生成代码的方式还包括ant或Maven脚本,或者直接使用javaAPI生成;另外通过修改配置文件,generator还可以指定表的生成细节,并可以添加插件。
其功能文档在generator的分发包的doc文件夹下有更详细的介绍。
这里使用的表示没有主键的表,针对有一个主键或多个主键的表,mybatis-generator的生成的内容也有所不同,感兴趣的读者可以自行试验一下。
∙mybatis-generator-usage.zip(1.6MB)
一、MyBatis简介与配置MyBatis+Spring+MySql
1.1MyBatis简介
MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。
MyBatis摒除了大部分的JDBC代码、手工设置参数和结果集重获。
MyBatis只使用简单的XML和注解来配置和映射基本数据类型、Map接口和POJO到数据库记录。
相对Hibernate和ApacheOJB等“一站式”ORM解决方案而言,Mybatis是一种“半自动化”的ORM实现。
需要使用的Jar包:
mybatis-3.0.2.jar(mybatis核心包)。
mybatis-spring-1.0.0.jar(与Spring结合包)。
下载地址:
http:
//ibatis.apache.org/tools/ibator
1.2MyBatis+Spring+MySql简单配置
1.2.1搭建Spring环境
1,建立maven的web项目;
2,加入Spring框架、配置文件;
3,在pom.xml中加入所需要的jar包(spring框架的、mybatis、mybatis-spring、junit等);
4,更改web.xml和spring的配置文件;
5,添加一个jsp页面和对应的Controller;
6,测试。
可参照:
1.2.2建立MySql数据库
建立一个学生选课管理数据库。
表:
学生表、班级表、教师表、课程表、学生选课表。
逻辑关系:
每个学生有一个班级;每个班级对应一个班主任教师;每个教师只能当一个班的班主任;
使用下面的sql进行建数据库,先建立学生表,插入数据(2条以上)。
更多sql请下载项目源文件,在resource/sql中。
Sql代码
1./* 建立数据库 */
2.CREATE DATABASE STUDENT_MANAGER;
3.USE STUDENT_MANAGER;
4.
5./***** 建立student表 *****/
6.CREATE TABLE STUDENT_TBL
7.(
8. STUDENT_ID VARCHAR(255) PRIMARY KEY,
9. STUDENT_NAME VARCHAR(10) NOT NULL,
10. STUDENT_SEX VARCHAR(10),
11. STUDENT_BIRTHDAY DATE,
12. CLASS_ID VARCHAR(255)
13.);
14.
15./*插入学生数据*/
16.INSERT INTO STUDENT_TBL (STUDENT_ID,
17. STUDENT_NAME,
18. STUDENT_SEX,
19. STUDENT_BIRTHDAY,
20. CLASS_ID)
21. VALUES (123456,
22. '某某某',
23. '女',
24. '1980-08-01',
25. 121546
26. )
创建连接MySql使用的配置文件mysql.properties。
Mysql.properties代码
1.jdbc.driverClassName=com.mysql.jdbc.Driver
2.jdbc.url=jdbc:
mysql:
//localhost:
3306/student_manager?
user=root&password=limingnihao&useUnicode=true&characterEncoding=UTF-8
1.2.3搭建MyBatis环境
顺序随便,现在的顺序是因为可以尽量的少的修改写好的文件。
1.2.3.1创建实体类:
StudentEntity
Java代码
1.public class StudentEntity implements Serializable {
2.
3. private static final long serialVersionUID = 3096154202413606831L;
4. private ClassEntity classEntity;
5. private Date studentBirthday;
6. private String studentID;
7. private String studentName;
8. private String studentSex;
9.
10. public ClassEntity getClassEntity() {
11. return classEntity;
12. }
13.
14. public Date getStudentBirthday() {
15. return studentBirthday;
16. }
17.
18. public String getStudentID() {
19. return studentID;
20. }
21.
22. public String getStudentName() {
23. return studentName;
24. }
25.
26. public String getStudentSex() {
27. return studentSex;
28. }
29.
30. public void setClassEntity(ClassEntity classEntity) {
31. this.classEntity = classEntity;
32. }
33.
34. public void setStudentBirthday(Date studentBirthday) {
35. this.studentBirthday = studentBirthday;
36. }
37.
38. public void setStudentID(String studentID) {
39. this.studentID = studentID;
40. }
41.
42. public void setStudentName(String studentName) {
43.