关于MyBatis的逆向生成文件

版权声明:@Shaw https://blog.csdn.net/qq_41356363/article/details/80871111

使用过MyBatis的小伙伴都知道,做一个SSM项目,需要在配置Spring、SpringMVC、MyBatis的文件上花费巨额精力,对于小项目来说,是得不偿失的 ,这里给大家介绍一个关于逆向生成MyBatis的方法:

逆向生成的作用:
可以自动生成关于数据库中的表的实体类
可以自动生成实体类的持久层Dao
可以自动生成持久层的映射文件Mapper

  • 首先、进入官网http://www.mybatis.org/generator/
    这里写图片描述
    这里有关于MyBatis逆向生成的说明使用

  • 接着再下载逆向生成的关键jar包mybatis-generator-core,如果是Maven用户,则按下配置

        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
  • 现在我们就可以搭建逆向生成的项目了

回到说明文档中进入XML configuration Reference模块
这里写图片描述
右边是关于逆向生成的配置文件,我们只需要在我们项目文件下新建一个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>

<!--将无用的属性注释掉,我们只保留所需要的-->
<!--  <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />-->

  <!-- 这里配置数据库连接池的四要素 -->
    <jdbcConnection driverClass="COM.ibm.db2.jdbc.app.DB2Driver"
        connectionURL="jdbc:db2:TEST"
        userId="db2admin"
        password="db2admin">
    </jdbcConnection>

    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>

    <context id="DB2Tables" targetRuntime="MyBatis3">

    <!-- 这里指定javaBean实体类的生成位置属性等,是按照数据库中表来生成 -->
    <javaModelGenerator targetPackage="test.model" targetProject="\MBGTestProject\src">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

    <!-- 指定sql映射文件生成的位置 -->
    <sqlMapGenerator targetPackage="test.xml"  targetProject="\MBGTestProject\src">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

    <!-- 指定dao接口生成位置,mapper接口 -->
    <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao"  targetProject="\MBGTestProject\src">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

    <!-- table指定每一个表生成策略 -->
    <table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >
      <property name="useActualColumnNames" value="true"/>
      <generatedKey column="ID" sqlStatement="DB2" identity="true" />
      <columnOverride column="DATE_FIELD" property="startDate" />
      <ignoreColumn column="FRED" />
      <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
    </table>

  </context>
</generatorConfiguration>

我项目结构为
这里写图片描述

按我的需求将配置文件进行更改

<?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="true"/>
        </commentGenerator>
        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/ssm"
                        userId="root"
                        password="1111">
        </jdbcConnection>
        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true
   时把JDBC DECIMAL 和
     NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 生成模型(PO)的包名和位置 -->
        <javaModelGenerator targetPackage="com.shaw.bean"
                            targetProject="src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="src/main/resources">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.shaw.dao"
                             targetProject="src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是
实体类名-->
        <table tableName="student" domainObjectName="Student"/>
        <table tableName="teacher" domainObjectName="Teacher"/>
    </context>
</generatorConfiguration>

看不懂的小伙伴可以结合我的结构图
我要生成的为student和teacher两张表

接着我们创建一个简单的入口函数类

public class demo {
    public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        //指定 逆向工程配置文件,这里指定你的逆向生成配置文件路径
        //我的结合上图放在src下,所以路径为src/generatorConfig.xml
        File configFile = new File("src/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);
    }
}

然后运行这个程序,可以看到程序已经按我们所要求的生成了相应的实体类,mapper映射文件和数据持久层Dao

这里写图片描述

然后,我们打开看看,可以看到Student表中的id字段和name字段都被自动生成,并实现了getset方法,这里只列举了Student,大家可以自己去尝试,关于下面的StudentExample类是对student类进行动态包装的类,我们查询只需要将条件交给它,就可以得到想要的数据

这里写图片描述

我们再看看数据持久层Dao层是否正确生成,我们可以看到,通过条件查询均使用StudentExample类,这个持久层接口已经帮我们写好了所需要的基本功能

这里写图片描述

然后再看看我们的持久层实现映射文件,通过对比也可以看到,每一个接口都帮我们重写了里面的功能,我们只需要负责调用,这很符合Java面向对象的特征

这里写图片描述

具体的功能小伙伴可以自己的尝试,逆向生成可以帮我们减少很多没必要的代码量

猜你喜欢

转载自blog.csdn.net/qq_41356363/article/details/80871111