mybatis的逆向工程的使用

mybatis的逆向工程

由于mybates支持定制化sql,存储过程以及高级映射的等的特点,目前已经成为java持久层的主流符的技术。平时的mybatis的配置文件,以及持久层的接口,经常让我们的开发人员感到困扰。为此mybatis

的团队开发了一个强大的代码生成器-Mybatis Generator,以下简称MBG 通常也叫mybatis的逆向工程,从下面几个方面来聊聊mybatis逆向工程的使用。

mybatis逆向工程的好处

  • 可以生成数据库表中对应的实体类pojo

  • 生成Mapper的接口类,Mapper的XML文件。这些文件包含了单表的基本的操作CRUD.

  • 可以生成Example类,不过这个类型的类一般不会用到

可以看到MBG可以极大的程度上方便我们使用mybatis,简化大量的重复工作。当然,要想了解更多的信息,可以访问: http://www.mybatis.org/generator 来获得更多的信息。

自定义实现一个mybatis的逆向工程

1. 数据库建两张测试的表,sql语句如下:

  DROP TABLE IF EXISTS `student`;
  CREATE TABLE `student`  (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `sno` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`student_name` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`grade` double NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `student_id`(`sno`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
 -- Table structure for sys_course
-- ----------------------------
DROP TABLE IF EXISTS `sys_course`;
CREATE TABLE `sys_course`  (
`id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '主键',
`code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '类别',
`name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT    '课程名',
`value` int(11) NOT NULL COMMENT '分数',
 PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

 SET FOREIGN_KEY_CHECKS = 1;

2. 新建一个maven项目,并下载相应的依赖

 <dependencies>
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.7</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.27</version>
    </dependency>
</dependencies>

3. 在recourse下新建文件夹generator并在文件夹下创建逆向工程的配置文件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="DB2Tables" targetRuntime="MyBatis3Simple" defaultModelType="flat">

    <!--注释生成器,并且禁止在注释中生成日期-->
    <commentGenerator>
        <property name="suppressDate" value="true"/>
        <property name="addRemarkComments" value="true"/>
    </commentGenerator>

    <!--连接数据库的详细信息-->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                    connectionURL="jdbc:mysql://localhost:3306/mybaties"
                    userId="root"
                    password="chen2908">
    </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>

    <!--配置生成mapper.xml文件的位置-->
    <sqlMapGenerator targetPackage="test.dao" targetProject="src\main\java">
        <property name="enableSubPackages" value="true"/>
    </sqlMapGenerator>

    <!--设置生成Mapper接口 位置,这里采用XMLMAPPER 接口和XML 完全分离-->
    <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="src\main\java">
        <property name="enableSubPackages" value="true"/>
    </javaClientGenerator>

    <!--匹配数据库中所有的表-->
    <table tableName="%">
        <generatedKey column="id" sqlStatement="Mysql"/>
    </table>
</context>

4. 创建逆向工程的启动类;

  package chen.mybatis;

  /**
  * @Author Chen
   * @Date 2020/3/15 20:26
   * 读取MBG的配置生成代码
 **/
public class Generator {
public static void main(String[] args) throws Exception{

    // 警告信息
    List<String> warnings = new ArrayList<String>();
    // 当生成代码重复时,覆盖原代码
    boolean overwrite = true;

    // 读取配置文件
    InputStream inputStream = Generator.class.getResourceAsStream("/generator/generatorConfig.xml");
    ConfigurationParser configurationParser = new ConfigurationParser(warnings);
    Configuration configuration = configurationParser.parseConfiguration(inputStream);
    inputStream.close();

    DefaultShellCallback callback = new DefaultShellCallback(overwrite);
    // 创建MBG
    MyBatisGenerator myBatisGenerator = new MyBatisGenerator(configuration,callback,warnings);

    // 执行生成代码的逻辑
    myBatisGenerator.generate(null);
    // 输出警告信息
    for (String warning : warnings) {
        System.out.println(warning);
    }
}
}

5.运行生成的代码如下所示:

这样就完成了代码的生成工作

配置文件generatorConfig.xml的具体说明

了解配置文件的具体配置的内容,可以更加方便的适应自己的开发需求。下面就对generatorConfig.xml配置文件的具体信息进行说明:

  • 首要按照MBG 要求添加XML 文件头:

这个文件头中的mybatis-generator-config_1_0.dtd用来定义该配置文件中的标签和属性的。在文件头之后需要写上

 <generatorConfiguration> 
    ......
 <generatorConfiguration>
  • context 属性 targetRuntime 设置为 MyBatis3Simple 防止生成与EXample相关的代码和方法,如果需要Example的代码,可以将其设置为 MyBatis3

  • context 属性 defalutModelType设置为 flat,目的是每个表只生成一个实体类。

  • 注释生成器commentGenerator,并且禁止在注释中生成日期

  • jdbcConnection,配置连接数据库的信息

  • javaModelGenerator 配置生成的包名。可以根据自己的需求进行修改,这里配置的包是test.model。 targetProject配置子啊src\main\java

  • sqlMapGenerator,配置生成mapper.xml文件的位置 这里配置在包test.dao下

  • javaClientGenerator Mapper接口的配置位置 这里配置在了test.dao下。

  • table 匹配数据库中的表,可以单表匹配,只需要将tableName的值改为表名就可以了,这里采用的通配符% 匹配所有的表、,并且指定所有的表都有主键id, 因为连接的是mysql的数据库,所以sqlStatement就设置为mysql.

参考书籍: 《mybatis从入门到精通》 刘增辉

posted @ 2020-03-16 15:22  chenweicool  阅读(895)  评论(0编辑  收藏  举报