在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代码  
  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样例来自 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代码  
  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. <generatorConfiguration>
  6. <classPathEntry location="mysql-connector-java-5.1.6-bin.jar" />
  7. <context id="DB2Tables" targetRuntime="MyBatis3">
  8. <commentGenerator>
  9. <property name="suppressDate" value="true" />
  10. </commentGenerator>
  11. <jdbcConnection driverClass="com.mysql.jdbc.Driver"
  12. connectionURL="jdbc:mysql://localhost/test" userId="qgd" password="123456">
  13. </jdbcConnection>
  14. <javaTypeResolver>
  15. <property name="forceBigDecimals" value="false" />
  16. </javaTypeResolver>
  17. <javaModelGenerator targetPackage="test.model"
  18. targetProject="../src/main/java">
  19. <property name="enableSubPackages" value="true" />
  20. <property name="trimStrings" value="true" />
  21. </javaModelGenerator>
  22. <sqlMapGenerator targetPackage="test.dao"
  23. targetProject="../src/main/java">
  24. <property name="enableSubPackages" value="true" />
  25. </sqlMapGenerator>
  26. <javaClientGenerator type="XMLMAPPER"
  27. targetPackage="test.dao" targetProject="../src/main/java">
  28. <property name="enableSubPackages" value="true" />
  29. </javaClientGenerator>
  30. <table tableName="pet" domainObjectName="Pet">
  31. </table>
  32. </context>
  33. </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代码  
  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. <configuration>
  6. <environments default="development">
  7. <environment id="development">
  8. <transactionManager type="JDBC" />
  9. <dataSource type="POOLED">
  10. <property name="driver" value="com.mysql.jdbc.Driver" />
  11. <property name="url" value="jdbc:mysql://localhost/test" />
  12. <property name="username" value="qgd" />
  13. <property name="password" value="123456" />
  14. </dataSource>
  15. </environment>
  16. </environments>
  17. <mappers>
  18. <mapper resource="test/dao/PetMapper.xml" />
  19. </mappers>
  20. </configuration>

2. 另外还要使用然后我们还须要一个Main演示样例方法来调用这些已生成的代码:

Java代码  
  1. package test;
  2. import java.io.Reader;
  3. import java.util.List;
  4. import org.apache.ibatis.io.Resources;
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  8. import test.dao.PetMapper;
  9. import test.model.Pet;
  10. import test.model.PetExample;
  11. public class Test {
  12. public static void main(String[] args) throws Exception {
  13. String resource = "MapperConfig.xml";
  14. Reader reader = Resources.getResourceAsReader(resource);
  15. SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
  16. SqlSession sqlSession = sqlMapper.openSession();
  17. PetExample pet = new PetExample();
  18. pet.or().andDeathIsNotNull();
  19. try {
  20. PetMapper mapper = sqlSession.getMapper(PetMapper.class);
  21. List<Pet> allRecords = mapper.selectByExample(pet);
  22. for (Pet s : allRecords)
  23. System.out.println(s);
  24. finally {
  25. sqlSession.close();
  26. }
  27. }
  28. }

这样就能够打印出对应的查询结果信息了。



四、小结 



该演示样例的完整的Eclipseproject见附件mybatis-generator-usage.zip,当中已经包括了演示样例须要使用的jar包。

本文中仅仅是用到了mybatis-generator 的一部分功能,mybatis-generator 生成代码的方式还包含ant或Maven脚本,或者直接使用java API生成。另外通过改动配置文件,generator还能够指定表的生成细节,并能够加入插件。其功能文档在generator的分发包的doc目录下有更具体的介绍。

这里使用的表示没有主键的表。针对有一个主键或多个主键的表,mybatis-generator的生成的内容也有所不同,感兴趣的读者能够自行试验一下。

Mybatis自己主动生成代码的更多相关文章

  1. mybatis使用generator自己主动生成代码时的类型转换

    使用mybatis的generator自己主动生成代码,可是oracle数据库中number(6,2)总是自己主动转成BigDecimal.我想要转成的是float类型 这样就写了一个类型转换器,须要 ...

  2. SpringBoot 添加mybatis generator 自动生成代码插件

    自动生成数据层代码,提高开发效率 1.pom添加插件,并指定配置文件路径 <!-- mybatis generator 自动生成代码插件 --> <plugin> <gr ...

  3. idea中mybatis generator自动生成代码配置 数据库是sqlserver

    好长时间没有写博客了,最近公司要用java语言,开始学习java,属于初学者,今天主要记录一下mybatis generator自动生成代码,首先在如下图的目录中新建两个文件,如下图 generato ...

  4. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...

  5. IDEA Maven Mybatis generator 自动生成代码

    IDEA Maven Mybatis generator 自动生成代码 一.安装配置maven以及在Idea中配置maven 安装过程步骤可以看上面的博文,里面介绍得很详细. 二.建数据表 DROP ...

  6. Mybatis generator 逆向生成代码

    Mybatis generator 逆向生成代码 简单介绍 本文介绍用mybatis逆向生成javaben dao接口 1.创建maven项目 创建相应的包 附上项目创建完成的图片 然后在pom.xm ...

  7. IDEA Maven Mybatis generator 自动生成代码(实例讲解)(转)

    IDEA Maven Mybatis generator 自动生成代码(实例讲解) MyBatis Generator • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的 ...

  8. (转)MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码

    http://blog.csdn.net/yerenyuan_pku/article/details/71909325 什么是逆向工程 MyBatis的一个主要的特点就是需要程序员自己编写sql,那么 ...

  9. 使用mybatis插件自动生成代码以及问题处理

    1.pom.xml中加入依赖插件 <!-- mybatis generator 自动生成代码插件 --> <plugin> <groupId>org.mybatis ...

随机推荐

  1. Jquery学习笔记:通过层次关系获取jquery对象

    前面一篇文章,我们介绍了如何通过web标签的id , css样式值来获取jquery对象. 但这只是基本方法,不能满足所有场景的需求. 本文介绍通过dom元素之间的层次关系获取元素.具体是将各种标识符 ...

  2. 在WINDOWS下 三步快速配置 eclipse c++ 环境

    所需软件 1.Eclipse IDE for C/C++ Developers http://www.eclipse.org/downloads/packages/eclipse-ide-cc-dev ...

  3. POJ 3090 Visible Lattice Points 欧拉函数

    链接:http://poj.org/problem?id=3090 题意:在坐标系中,从横纵坐标 0 ≤ x, y ≤ N中的点中选择点,而且这些点与(0,0)的连点不经过其它的点. 思路:显而易见, ...

  4. 异常:未能载入文件或程序集”DAL”或它的某一个依赖项——解决的方法

    以下是我再使用抽象工厂+反射重构机房时,在Factoy中出现了以下一个问题: 去网上查了一下资料,发现这是一个非常普遍的问题,它出现的原因主要有两种: 第一种: 载入DLL路径错误.解决的方法是调整D ...

  5. Swift - 使用NSURLSession同步获取数据(通过添加信号量)

    过去通过 NSURLConnection.sendSynchronousRequest() 方法能同步请求数据.从iOS9起,苹果建议废除 NSURLConnection,使用 NSURLSessio ...

  6. IT忍者神龟之Oracle DBA经常使用查询吐血列举

    –1. 查询系统全部对象 select owner, object_name, object_type, created, last_ddl_time, timestamp, status from ...

  7. Windows 7 taskbar and startmenu pin

    原文 Windows 7 taskbar and startmenu pin 在Windows 7上,用户可以将自己喜欢的软件“钉”在开始菜单或任务栏,使用起来更加方便.但有时候我们也需要用程序来将这 ...

  8. Swift - 邮件发送功能的实现

    使用MessageUI.framework框架除了可以发送短信,还能发送Email,步骤如下: (1)首先判断设备是否有发送邮件功能 (2)如果设备允许发送邮件,创建一个MFMailComposeVi ...

  9. Ruby on Rails 實戰聖經阅读(三)

    由于是1.8.x:圣经的1.9.3差太多,所以另外按1.8.X来创建hello world 第一個Hello World!! 1. 创建项目rails -d mysql first 2.创建控制器  ...

  10. 静态代码检查工具 cppcheck 的使用(可分别集成到VS和QT Creator里)

    CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们写的 ...