在mybatis自己主动生成代码有两种方式:
方式一:是通过使用eclipse作为开发工具。採用maven来构建项目生成的。以下的演示是通过第一种方式。
今天来记录下mybatis-generator插件自己主动生成xml mapper和model还有dao接口,这样我们就能够把精力放在业务代码上。而不须要关心数据库的详细操作。
这里我使用eclipse作为开发工具,採用maven来构建项目。
1. 编写pom.xml文件
这里仅仅有3个jar文件,数据库使用mysql
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.jacksoft.mybatis</groupId> <artifactId>mybatis-generator</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <mybatis-generator.version>1.3.1</mybatis-generator.version> <mysql.version>5.1.13</mysql.version> <mybatis.version>3.0.3</mybatis.version> </properties> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>${mybatis-generator.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> </dependencies> <build> <finalName>mybatis-generator</finalName> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>${mybatis-generator.version}</version> <dependencies> <!-- 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> </dependencies> <!-- 自己主动生成 --> <executions> <execution> <id>Generate MyBatis Artifacts</id> <goals> <goal>generate</goal> </goals> <configuration> <configurationFile>src/main/resources/config/mysqlGeneratorConfig.xml</configurationFile> <overwrite>true</overwrite> <jdbcDriver>com.mysql.jdbc.Driver</jdbcDriver> <jdbcURL>jdbc:mysql://localhost:3306/demo</jdbcURL> <jdbcUserId>root</jdbcUserId> <jdbcPassword>hwroot</jdbcPassword> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> </project>
我这里通过配置插件,让maven在运行install的时候。自己主动又一次生成代码。由于生成的代码中包括mybatis包中的类,所以也须要引入该包。
2.创建mysqlGeneratorConfig.xml文件
在src/main/resources/config文件夹以下创建mysqlGeneratorConfig.xml 文件,该文件是说明插件须要怎样生成,以及生成相应的包名,路径等信息。
还有重要的就是我们的表或者试图。这里能够通过查看官方文档。了解其详细的配置,比方重写字段类型啊等等。
这里我仅仅有一个表:
<?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> <context id="mysqlTables" targetRuntime="MyBatis3"> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/demo" userId="root" password="hwroot"/> <!-- 指定生成的类型为java类型,避免数据库中number等类型字段 --> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 生成model模型,相应的包。存放位置能够指定详细的路径,如/ProjectName/src,也能够使用MAVEN来自己主动生成 --> <javaModelGenerator targetPackage="com.jacksoft.mybatis.generator.model" targetProject="MAVEN"> <property name="enableSubPackages" value="true"/> </javaModelGenerator> <!--相应的xml mapper文件 --> <sqlMapGenerator targetPackage="com.jacksoft.mybatis.generator.dao" targetProject="MAVEN"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 相应的dao接口 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.jacksoft.mybatis.generator.dao" targetProject="MAVEN"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <table tableName="user" domainObjectName="User"/> </context> </generatorConfiguration>
3. 生成代码
到这里就差点儿相同了。保存为该文件后,实际上就已经開始生成代码了,可是在source code界面,还是看不到代码,我们通过刷新或者 右键项目-->Maven-->Update Project Configuration
这样就把生成的代码找到了。详细例如以下图:
相应的mapper,xml,model,example都生成好了。是不是非常方便啊?
可是该插件默认不带分页功能,分页插件将在下一次记录。
对于自己写的插件无法初始化的问题,能够參照:
http://code.google.com/p/mybatis/issues/detail?id=343
也就是须要将自己的插件在配置plugin的时候增加,如:
<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>${mybatis-generator.version}</version> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <dependency> <groupId>com.jacksoft</groupId> <artifactId>mybatis-plugins-paging</artifactId> <version>${mybatis.paging.version}</version> </dependency> </dependencies>
方式二:是通过mybatis插件的方式来自己主动生成的。以下的演示是通过另外一种方式。
本文将简要介绍如何利用Mybatis Generator自己主动生成Mybatis的相关代码:
一、构建一个环境:
1. 首先创建一个表:
Sql代码
- CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
2. 然后注入数据
Sql代码
- 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代码
- <?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代码
- 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代码
- <?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演示样例方法来调用这些已生成的代码:
Java代码
- 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();
- }
- }
- }
这样就能够打印出对应的查询结果信息了。
四、小结
该演示样例的完整的Eclipseproject见附件mybatis-generator-usage.zip,当中已经包括了演示样例须要使用的jar包。
本文中仅仅是用到了mybatis-generator 的一部分功能,mybatis-generator 生成代码的方式还包含ant或Maven脚本,或者直接使用java API生成。另外通过改动配置文件,generator还能够指定表的生成细节,并能够加入插件。其功能文档在generator的分发包的doc目录下有更具体的介绍。
这里使用的表示没有主键的表。针对有一个主键或多个主键的表,mybatis-generator的生成的内容也有所不同,感兴趣的读者能够自行试验一下。