Mybatis Generator(定制化)代码生成器
1、使用Mapper专用的MyBatis Generator插件
通用Mapper在1.0.0版本的时候增加了MyBatis Generator(以下简称MBG)插件,使用该插件可以很方便的生成实体类、Mapper接口以及对应的XML文件。
本篇文档就是讲述如何在MBG中使用该插件。
首先对MBG不太了解的可以先阅读下面的文档:MybatisGeneator详解
2、使用通用Mapper插件
插件代码在com.github.abel533.generator包下面,一共有如下两个类:
- MapperCommentGenerator:该类用于生成数据库备注字段的注释,以及实体类字段的注解。
- MapperPlugin:插件的实现类,该类默认使用上面这个注释生成器,插件屏蔽了一般的CRUD方法(保留了Example),插件可以生成实体的@Table注解。
- Maven中添加依赖:
<dependency>
<groupId>com.github.abel533</groupId>
<artifactId>mapper</artifactId>
<!-- 建议使用最新版本 -->
<version>x.x.x</version>
</dependency>
运行MBG有多种方法,这里只介绍两种比较常见的方法。并且有关的内容会针对这样的运行方式进行配置。
2.1. 使用Java编码方式运行MBG
使用这种方式,首先下载MBG的Jar包(本项目[taotao]测试代码中使用maven引入jar包,使用Java代码运行)。
Java代码很容易,和文档中的一样:
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(
Generator.class.getResourceAsStream("/generator/generatorConfig.xml"));
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
你只需要在你当前的项目中创建一个类,添加一个main方法,在main中写上上面的代码即可。
这段代码容易,最主要的一个内容是"generatorConfig.xml",我们应该如何配置该类。
下面是一个generatorConfig.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="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat"> <!-- 通用Mapper的插件com.github.abel533.generator.MapperPlugin,该插件有一个必选的<property>属性mappers,这里的mappers和通用Mapper中的mappers配置含义一样,就是我们使用的通用Mapper接口,多个通用Mapper接口可以用逗号隔开 -->
<!-- 关于本插件,最重要的内容就是上面这个配置。下面要说的其他配置和普通的一致。 -->
<plugin type="com.github.abel533.generator.MapperPlugin">
<property name="mappers" value="com.github.abel533.mapper.Mapper"/>
</plugin> <!-- 数据库配置信息,由于需要连接数据库,需要保证项目的classpath下面有数据库的JDBC驱动 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test"
userId="root"
password="">
</jdbcConnection> <!-- 生成实体类的配置,是一个必须配置的内容 -->
<javaModelGenerator targetPackage="test.model" targetProject="G:\MyProject\src\main\java"/> <!-- sqlMapGenerator是一个可选的配置,配置后可以生成Mapper接口对应的XML文件 -->
<sqlMapGenerator targetPackage="mapper" targetProject="G:\MyProject\src\main\resources"/> <!-- 通用Mapper接口的配置,配置javaClientGenerator后会生成对应的接口文件,该接口会自动继承前面配置的通用Mapper接口 -->
<javaClientGenerator targetPackage="test.mapper" targetProject="G:\MyProject\src\main\java" type="XMLMAPPER" /> <!-- 最后一个配置table,这里使用SQL通配符%来匹配所有表。generatedKey意味着所有的表都有一个id自增的主键,在生成实体类的时候会根据该配置生成相应的注解 -->
<table tableName="%" >
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
</table>
</context>
</generatorConfiguration>
这段配置介绍完了,之后运行前面的JAVA方法,就会生成对应的文件。该文件的样式最后贴个例子。
2.2. 使用Maven执行MBG
这里有一个完整的例子,Mybatis-Spring,下面讲解的内容出自这个例子。
使用Maven插件的一个好处是可以将Maven中的属性使用${property}形式在generatorConfig.xml中引用。
先看Maven的pom.xml文件(只显示有关的部分内容):
<properties>
<!-- MyBatis Generator -->
<!-- Java接口和实体类 -->
<targetJavaProject>${basedir}/src/main/java</targetJavaProject>
<targetMapperPackage>com.isea533.mybatis.mapper</targetMapperPackage>
<targetModelPackage>com.isea533.mybatis.model</targetModelPackage>
<!-- XML生成路径 -->
<targetResourcesProject>${basedir}/src/main/resources</targetResourcesProject>
<targetXMLPackage>mapper</targetXMLPackage>
<!-- 依赖版本 -->
<mapper.version>1.0.0</mapper.version>
<mysql.version>5.1.29</mysql.version>
</properties>
上面是pom.xml中properties配置的部分内容。这里配置了MBG配置文件中常用到的几个路径以及包名。还包含了通用Mapper的版本和数据库JDBC驱动的版本。
下面是MBG的Maven插件配置:
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.github.abel533</groupId>
<artifactId>mapper</artifactId>
<version>${mapper.version}</version>
</dependency>
</dependencies>
</plugin>
这里配置了MBG插件,并且配置了generatorConfig.xml配置文件的路径。另外还有两个依赖,分别是JDBC驱动以及通用Mapper(提供了MBG插件)。
下面我们在看看这个generatorConfig.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>
<properties resource="config.properties"/> <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/> <plugin type="${mapper.plugin}">
<property name="mappers" value="${mapper.Mapper}"/>
</plugin> <jdbcConnection driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.url}"
userId="${jdbc.user}"
password="${jdbc.password}">
</jdbcConnection> <javaModelGenerator targetPackage="${targetModelPackage}" targetProject="${targetJavaProject}"/> <sqlMapGenerator targetPackage="${targetXMLPackage}" targetProject="${targetResourcesProject}"/> <javaClientGenerator targetPackage="${targetMapperPackage}" targetProject="${targetJavaProject}" type="XMLMAPPER" /> <table tableName="%" >
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
</table>
</context>
</generatorConfiguration>
可以看到这个配置文件中的大多数属性都使用${}形式替代了。使用<properties resource="config.properties"/>引入了config.properties属性配置,该文件内容如下:
# 数据库配置
jdbc.driverClass = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/test
jdbc.user = root
jdbc.password = #c3p0
jdbc.maxPoolSize=50
jdbc.minPoolSize=10
jdbc.maxStatements=100
jdbc.testConnection=true # 通用Mapper配置
mapper.plugin = com.github.abel533.generator.MapperPlugin
mapper.Mapper = com.github.abel533.mapper.Mapper
使用配置文件的目的是因为系统多处地方使用了这种配置,因而使用一个属性文件可以方便的保持一致。
除了引用配置文件中的属性外,部分还使用了pom.xml中的属性。这种方式使用起来更灵活。
运行
配置好之后如何运行呢?
在pom.xml这一级目录的命令行窗口执行mvn mybatis-generator:generate即可(前提是配置了mvn)。
3、生成的代码
下面是自动生成的代码的例子,这些例子可以在Mybatis-Spring这里找到。
3.1、实体类UserInfo
package com.isea533.mybatis.model; import javax.persistence.*; @Table(name = "user_info")
public class UserInfo {
@Id
@Column(name = "Id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id; /**
* 用户名
*/
private String username; /**
* 密码
*/
private String password; /**
* @return Id
*/
public Integer getId() {
return id;
} /**
* @param id
*/
public void setId(Integer id) {
this.id = id;
} /**
* 获取用户名
*
* @return username - 用户名
*/
public String getUsername() {
return username;
} /**
* 设置用户名
*
* @param username 用户名
*/
public void setUsername(String username) {
this.username = username;
}
}
代码过长,省略了一部分,完整查看:UserInfo
可以看到这里生成的注释是有意义的内容,注释来源于数据库表字段的注释。
这里还自动生成了几项注解的内容。
3.2、Mapper接口UserInfoMapper
package com.isea533.mybatis.mapper; import com.github.abel533.mapper.Mapper;
import com.isea533.mybatis.model.UserInfo; public interface UserInfoMapper extends Mapper<UserInfo> {
}
接口自动继承配置的通用Mapper接口,自动包含泛型实体。
3.3、Mapper.xml文件UserInfoMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.isea533.mybatis.mapper.UserInfoMapper" >
<resultMap id="BaseResultMap" type="com.isea533.mybatis.model.UserInfo" >
<!--
WARNING - @mbggenerated
-->
<id column="Id" property="id" jdbcType="INTEGER" />
<result column="username" property="username" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
<result column="usertype" property="usertype" jdbcType="VARCHAR" />
<result column="enabled" property="enabled" jdbcType="INTEGER" />
<result column="realname" property="realname" jdbcType="VARCHAR" />
<result column="qq" property="qq" jdbcType="VARCHAR" />
<result column="email" property="email" jdbcType="VARCHAR" />
<result column="tel" property="tel" jdbcType="VARCHAR" />
</resultMap>
</mapper>
xml文件只包含了实体的resultMap映射配置。
Mybatis Generator(定制化)代码生成器的更多相关文章
- spring boot集成mybatis(3) - mybatis generator 配置
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- mybatis入门篇:代码生成器(MyBatis Generator)
这篇文章只是按照自己的需要去配置代码生成器,未对所有配置进行讲解,需要了解具体详情的,请到官网查阅文档.传送门:http://www.mybatis.org/generator/ 1.首先引入相关的依 ...
- mybatis代码生成器——MyBatis Generator
1.maven依赖 a.加入依赖 <!-- mybatis生成工具 --> <dependency> <groupId>org.mybatis.generator& ...
- mybatis generator如何定制JavaTypeResolver,使smallint类型的数据库字段在po中的类型为Integer?
一.问题概述 忙了一段时间的jenkins持续集成,又要开始开发任务了.这两天在用mybatis generator来逆向生成dao层工程. 其中一个问题在于,组长在设计表的时候,不少枚举使用了sma ...
- mybatis generator代码生成器的使用
一.有关mybatis generator的使用可以查看如下网址:http://www.mybatis.org/generator/index.html 二.如下是我自己整理的学习步骤: <1& ...
- MyBatis Generator 详解
MyBatis Generator中文文档 MyBatis Generator中文文档地址:http://mbg.cndocs.tk/ 该中文文档由于尽可能和原文内容一致,所以有些地方如果不熟悉,看中 ...
- MyBatis Generator 详解 【转来纯为备忘】
版权声明:版权归博主所有,转载请带上本文链接!联系方式:abel533@gmail.com 目录(?)[+] MyBatis Generator中文文档 运行MyBatis Generator X ...
- mybatis Generator配置文件详解
这里按照配置的顺序对配置逐个讲解,更细的内容可以配合中文文档参照. 1. 配置文件头 <?xml version="1.0" encoding="UTF-8&quo ...
- SpringBoot入门教程(四)MyBatis generator 注解方式和xml方式
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...
随机推荐
- STM32模拟I2C
之前为了测试, 拿最小板做了一个I2C的主发跟主读, 一开始当然是尝试用硬件I2C, 结果弄了很久, 时间紧迫, 只好用了模拟, 结果发现, 哎, 真特么挺好用的, 现在1片儿顶过去5片儿. 硬件I2 ...
- win10启动文件夹:
win10启动文件夹: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
- Docker第三方项目小结
软件项目的成功常常根据其催生的生态系统来衡量.围绕或基于核心技术构建的项目增添了功能和易用性,它们常常日臻完善.Docker就是一个典例,有众多第三方项目扩展.补充或改进Docker. •Docker ...
- char 型变量中能不能存贮一个中文汉字,为什么?
char类型可以存储一个中文汉字,因为Java中使用的编码是Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个char类型占2个字节(16比特),所以放一个 ...
- sql查询某条记录
select * from (SELECT t.*,ROWNUM AS RN FROM AWARDISSUE_FOOTBALL t ORDER BY ID DESC) WHERE RN=2
- python-haproxy作业讲解视频总结
刚看完瞎驴的haproxy配置文件的作业讲解视频: 总结: 1.用户输入的字符串数据类型转换其他数据类型 1.1 eval('用户输入的数据') 1.2 json.loads('用户输入的数据') 2 ...
- shell脚本判断文件类型
转自:http://www.cnblogs.com/sunyubo/archive/2011/10/17/2282047.html 1. shell判断文件,目录是否存在或者具有权限 2. #!/bi ...
- java写的web服务器
经常用Tomcat,不知道的以为Tomcat很牛,其实Tomcat就是用java写的,Tomcat对jsp的支持做的很好,那么今天我们用java来写一个web服务器 //首先得到一个server, S ...
- enc
enc [问题背景] zhx 和他的妹子聊天. [问题描述] 考虑一种简单的加密算法. 假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则: a-> ...
- Python 2.7.9 Demo - JSON的编码、解码
#coding=utf-8 #!/usr/bin/python import json; dict = {}; dict['name'] = 'nick'; dict['say'] = 'hello ...