您的位置:首页 > 编程语言

Mybatis自己主动生成代码

2016-01-12 11:06 399 查看
在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的生成的内容也有所不同,感兴趣的读者能够自行试验一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: