Mybatis Generator自动生成Mybatis的有关代码
本文将简要介绍怎样利用Mybatis Generator自动生成Mybatis的相关代码:
一、构建一个环境:
1. 首先创建一个表:
- CREATE TABLE pet (name VARCHAR (20), owner VARCHAR (20), species VARCHAR (20), sex CHAR (1), birth DATE , death DATE );
2. 然后注入数据
- insert into pet values ('Fluffy' , 'Harold' , 'cat' , 'f' , '1993-02-04' , null );
- insert into pet values ('Claws' , 'Gwen' , 'cat' , 'm' , '1994-03-17' , null );
- insert into pet values ('Buffy' , 'Harold' , 'dog' , 'f' , '1989-05-13' , null );
- insert into pet values ('Fang' , 'Benny' , 'dog' , 'm' , '1990-08-27' , null );
- insert into pet values ('Bowser' , 'Diane' , 'dog' , 'm' , '1979-08-31' , '1995-07-29' );
- insert into pet values ('Chirpy' , 'Gwen' , 'bird' , 'f' , '1998-09-11' , null );
- insert into pet values ('Whistler' , 'Gwen' , 'bird' , null , '1997-12-09' , null );
- insert into pet values ('Slim' , 'Benny' , 'snake' , 'm' , '1996-04-29' , null );
注:这里的sql例子来自 http://dev.mysql.com/doc/refman/5.5/en/creating-tables.html
3. 在 Mybatis 主页 http://code.google.com/p/mybatis/ 上下载 Mybatis mybatis-generator-core [本文使用的是 1.3.0 版本]。当然运行 mybatis-generator 生成的代码还需要下载 mybatis 的 jar 包[本例使用的是 3.0.2 版本],和相关数据库的 jdbc [本文中使用的是MySql的jdbc] 。
二、运行 mybatis-generator
1. 要运行 generator ,需要给 generator 提供一个配置文件,指定其生成的数据库的相关信息。
以下是一个示例:
- <? xml version ="1.0" encoding ="UTF-8" ?>
- <!DOCTYPE generatorConfiguration
- PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
- "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
- < generatorConfiguration >
- < classPathEntry location ="mysql-connector-java-5.1.6-bin.jar" />
- < context id ="DB2Tables" targetRuntime ="MyBatis3" >
- < commentGenerator >
- < property name ="suppressDate" value ="true" />
- </ commentGenerator >
- < jdbcConnection driverClass ="com.mysql.jdbc.Driver"
- connectionURL ="jdbc:mysql://localhost/test" userId ="qgd" password ="123456" >
- </ jdbcConnection >
- < javaTypeResolver >
- < property name ="forceBigDecimals" value ="false" />
- </ javaTypeResolver >
- < javaModelGenerator targetPackage ="test.model"
- targetProject ="../src/main/java" >
- < property name ="enableSubPackages" value ="true" />
- < property name ="trimStrings" value ="true" />
- </ javaModelGenerator >
- < sqlMapGenerator targetPackage ="test.dao"
- targetProject ="../src/main/java" >
- < property name ="enableSubPackages" value ="true" />
- </ sqlMapGenerator >
- < javaClientGenerator type ="XMLMAPPER"
- targetPackage ="test.dao" targetProject ="../src/main/java" >
- < property name ="enableSubPackages" value ="true" />
- </ javaClientGenerator >
- < table tableName ="pet" domainObjectName ="Pet" >
- </ table >
- </ context >
- </ generatorConfiguration >
这个配置文件提供了 mybatis-generator所需要的参数信息:
* 其中classPathEntry 是引用的jdbc的类路径,这里将jdbc jar和generator的jar包放在一起了;
* commentGenerator 是用来除去时间信息的,这在配合类似subversion的代码管理工具时使用很有效,因为可以减少没有必要的注释迁入;
* jdbcConnection是指定的jdbc的连接信息;
* javaTypeResolver式类型转换的信息,这里并没有用到;
* javaModelGenerator是模型的生成信息,这里将指定这些Java model类的生成路径;
* sqlMapGenerator是mybatis 的sqlMapper XML文件的生成信息,包括生成路径等;
* javaClientGenerator是应用接口的生成信息;
* table是用户指定的被生成相关信息的表,它必须在指定的jdbc连接中已经被建立。
2. mybatis-generator 有多种运行方式,最简单的就是命令行的方式,只需要指定相应的配置文件的路径即可:
- 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 version ="1.0" encoding ="UTF-8" ?>
- <!DOCTYPE configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- < configuration >
- < environments default ="development" >
- < environment id ="development" >
- < transactionManager type ="JDBC" />
- < dataSource type ="POOLED" >
- < property name ="driver" value ="com.mysql.jdbc.Driver" />
- < property name ="url" value ="jdbc:mysql://localhost/test" />
- < property name ="username" value ="qgd" />
- < property name ="password" value ="123456" />
- </ dataSource >
- </ environment >
- </ environments >
- < mappers >
- < mapper resource ="test/dao/PetMapper.xml" />
- </ mappers >
- </ configuration >
2. 另外还要使用然后我们还需要一个Main示例方法来调用这些已生成的代码:
- package test;
- import java.io.Reader;
- import java.util.List;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
- import test.dao.PetMapper;
- import test.model.Pet;
- import test.model.PetExample;
- public class Test {
- public static void main(String[] args) throws Exception {
- String resource = "MapperConfig.xml" ;
- Reader reader = Resources.getResourceAsReader(resource);
- SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
- SqlSession sqlSession = sqlMapper.openSession();
- PetExample pet = new PetExample();
- pet.or().andDeathIsNotNull();
- try {
- PetMapper mapper = sqlSession.getMapper(PetMapper.class );
- List<Pet> allRecords = mapper.selectByExample(pet);
- for (Pet s : allRecords)
- System.out.println(s);
- } finally {
- sqlSession.close();
- }
- }
- }
这样就可以打印出相应的查询结果信息了。
四、小结
该示例的完整的Eclipse工程见附件mybatis-generator-usage.zip,其中已经包含了示例需要使用的jar包。
本文中只是用到了mybatis-generator 的一部分功能,mybatis-generator 生成代码的方式还包括ant或Maven脚本,或者直接使用java API生成;另外通过修改配置文件,generator还可以指定表的生成细节,并可以添加插件。其功能文档在generator的分发包的doc文件夹下有更详细的介绍。
这里使用的表示没有主键的表,针对有一个主键或多个主键的表,mybatis-generator的生成的内容也有所不同,感兴趣的读者可以自行试验一下。