一、背景
在实际开发中我们会自己去写mapper映射文件,接口,数据库表对应的实体类,如果需求任务比较少,咱们还可以慢慢的一个一个去写,但是这是不现实的,因为在工作中我们的任务是很多的,这时mybatis逆向工程就能帮助我们节省这部分的时间了,因为mybatis逆向工程能根据数据库的表结构生成对应的mapper映射文件,接口,实体类
二、实践
1. 新建一个mybatis逆向工程测试的项目MybatisReverseProject和生成文件存放的项目MybatisTest,使用的mybatis-generator-core是借鉴githup上的一个兄弟改写源码的,他的已经能满足我的需求了,有需要的同学可以自己去改写,改写内容如下:
生成的*mapper.xml文件中使用4个空格来缩进
生成的*mapper.xml文件中每个元素间增加一空行,如insert,update,delete等之间增加一空行
去掉*mapper.xml文件中生成的注释
根据数据库表名及字段的注释为Java类、属性增加注释,可以在源码org.mybatis.generator.internal.db.DatabaseIntrospector.java类中根据个人情况进行修改
实现每次生成都覆盖生成文件
2.在数据库里面建立需要使用的表
- CREATE TABLE `t_user` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `username` varchar(30) NOT NULL COMMENT '用户名称',
- `birthday` date DEFAULT NULL COMMENT '生日',
- `sex` char(2) DEFAULT NULL COMMENT '性别',
- `address` varchar(256) DEFAULT NULL COMMENT '地址',
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='用户信息表';
3. 在generatorConfig.xml文件中配置数据库连接的信息,配置生成实体类的位置、生成mapper映射文件生成的位置、生成mapper接口生成的位置,以上配置的3个路径为你项目的路径;指定要逆向生成代码的数据库的表
- <?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="testTables" targetRuntime="MyBatis3">
- <commentGenerator>
- <!-- 是否去除自动生成的注释 true:是 : false:否 -->
- <property name="suppressAllComments" value="false" />
- </commentGenerator>
- <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
- <jdbcConnection driverClass="com.mysql.jdbc.Driver"
- connectionURL="jdbc:mysql://localhost:3306/study" userId="root"
- password="123456">
- </jdbcConnection>
- <!-- <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
- userId="scott" password="wcy675600920"> </jdbcConnection> -->
- <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL
- 和 NUMERIC 类型解析为java.math.BigDecimal -->
- <javaTypeResolver>
- <property name="forceBigDecimals" value="false" />
- </javaTypeResolver>
- <!-- targetProject:生成实体类的位置 -->
- <javaModelGenerator targetPackage="com.study.mybatis.entiy"
- targetProject="D:\workspace\MybatisTest\src\main\java">
- <!-- enableSubPackages:是否让schema作为包的后缀 -->
- <property name="enableSubPackages" value="false" />
- <!-- 从数据库返回的值被清理前后的空格 -->
- <property name="trimStrings" value="true" />
- </javaModelGenerator>
- <!-- targetProject:mapper映射文件生成的位置 -->
- <sqlMapGenerator targetPackage="com.study.mybatis.mapper"
- targetProject="D:\workspace\MybatisTest\src\main\java">
- <!-- enableSubPackages:是否让schema作为包的后缀 -->
- <property name="enableSubPackages" value="false" />
- </sqlMapGenerator>
- <!-- targetPackage:mapper接口生成的位置 -->
- <javaClientGenerator type="XMLMAPPER"
- targetPackage="com.study.mybatis.dao" targetProject="D:\workspace\MybatisTest\src\main\java">
- <!-- enableSubPackages:是否让schema作为包的后缀 -->
- <property name="enableSubPackages" value="false" />
- </javaClientGenerator>
- <!-- 指定数据库表 -->
- <table tableName="t_user" schema="" enableCountByExample="false"
- enableDeleteByExample="false" enableUpdateByExample="false"
- enableSelectByExample="false" selectByExampleQueryId="false"></table>
- <!-- 有些表的字段需要指定java类型 <table schema="" tableName=""> <columnOverride column=""
- javaType="" /> </table> -->
- </context>
- </generatorConfiguration>
4. 启动主程序GeneratorSqlmap.java生成需要的文件
- package com.lgs.reverse.start;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.List;
- import org.mybatis.generator.api.MyBatisGenerator;
- import org.mybatis.generator.config.Configuration;
- import org.mybatis.generator.config.xml.ConfigurationParser;
- import org.mybatis.generator.internal.DefaultShellCallback;
- /**
- * 根据数据库定义的表结构生成实体类、接口、mapper映射文件的主类
- * 使用的mybatis-generator-core是借鉴githup上的一个兄弟改写源码的, 他的已经能满足我的需求了有需要的同学可以自己去改写
- *
- * @author lgs
- *
- */
- public class GeneratorSqlmap {
- public void generator() throws Exception {
- List < String > warnings = new ArrayList < String > ();
- boolean overwrite = true;
- // 指定 逆向工程配置文件
- File configFile = new File("config/generatorConfig.xml");
- ConfigurationParser cp = new ConfigurationParser(warnings);
- Configuration config = cp.parseConfiguration(configFile);
- DefaultShellCallback callback = new DefaultShellCallback(overwrite);
- MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
- myBatisGenerator.generate(null);
- }
- public static void main(String[] args) throws Exception {
- try {
- GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
- generatorSqlmap.generator();
- } catch(Exception e) {
- e.printStackTrace();
- }
- }
- }
5. 需要完整项目的同学可以去我的githup上下载,下载地址https://github.com/leeSmall/MybatisReverseProject