Mybatis逆向工程(针对数据库中的单表自动生成mybatis代码mapper.java、mapper.xml、po类)-day05

    科技2022-08-08  105

    目录

    Mybatis逆向工程1. 简介2. 下载逆向工程3. 使用方法第一步:创建一个简单的java项目第二步:导入jar包,创建generator配置文件第三步:使用java类来执行逆向工程第四步:把生成的代码拷贝到其它项目中第五步:在正式项目中使用逆向工程生成的代码(测试)

    Mybatis逆向工程

    1. 简介

    简单的说,就是通过数据库中的单表,自动生成java代码。

    Mybatis官方提供了逆向工程 可以针对单表自动生成mybatis代码(mapper.java\mapper.xml\po类)

    企业开发中,逆向工程是个很常用的工具。

    逆向工程只提供了一些简单的增删改查操作,一些复杂的模型中有模型,模型中有集合等操作需要自行配置。

    2. 下载逆向工程

    这里使用的版本是mybatis-generator-1.3.2下载地址:https://github.com/mybatis/generator/releases/tag/mybatis-generator-1.3.2. 在Tags下载的一般都没有提供jar包,提供了pom.xml配置在maven中即可

    3. 使用方法

    创建一个简单的java项目;导入相关jar包,创建generator的配置文件;使用java类来执行逆向工程;把生成的代码拷贝到项目中;在正式项目中使用逆向工程生成的代码。

    第一步:创建一个简单的java项目

    第二步:导入jar包,创建generator配置文件

    导入逆向工程包

    导入mysql数据库驱动包(根据使用jdk的版本,jdk1.7就使用5版本的)

    创建一个lib文件夹,直接复制进去,Add as Library

    OK即可

    先在src下创建一个generatorConfig.xml(generator配置文件)再打开所下载的文件中的docs下的index.html(查看逆向工程的简介、功能、使用) 打开左侧的快速入门(它提供了使用步骤与xml配置文件) 点击中间的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" /> <context id="DB2Tables" targetRuntime="MyBatis3"> <jdbcConnection driverClass="COM.ibm.db2.jdbc.app.DB2Driver" connectionURL="jdbc:db2:TEST" userId="db2admin" password="db2admin"> </jdbcConnection> <javaTypeResolver > <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <javaModelGenerator targetPackage="test.model" targetProject="\MBGTestProject\src"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <sqlMapGenerator targetPackage="test.xml" targetProject="\MBGTestProject\src"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="\MBGTestProject\src"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <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="mysqlTables" targetRuntime="MyBatis3"> <!--1.数据库配置(8版本以上的数据库驱动jar包记得加上cj) 本地默认数据库localhost:3306可省略为 ///,服务器(或linux)上配置记得换成 //ip:端口号/ 这里是5版本的jar连接8版本的数据库,需要加上编码格式?useUnicode=true&characterEncoding=utf8 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql:///mybatis_day01?useUnicode=true&characterEncoding=utf8" userId="root" password="root"> </jdbcConnection> <!--2.java类型解析:默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> <javaTypeResolver > <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!--3.配置模型生成的位置 .\src 表示生成到当前目录的src下 --> <!-- enableSubPackages:是否让schema作为包的后缀 --> <javaModelGenerator targetPackage="com.it.model" targetProject=".\src"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!--4.mybatis的映射文件.xml生成的位置--> <sqlMapGenerator targetPackage="com.it.mapper" targetProject=".\src"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!--5.mybatis的mapper接口生成的位置--> <javaClientGenerator type="XMLMAPPER" targetPackage="com.it.mapper" targetProject=".\src"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!--6.配置要生成的表的模型--><!--这里的一些详细配置就不配置了,直接配置表--> <!--domainObjectName 生成的对应类名--> <table tableName="items"></table> <table tableName="orderdetail" domainObjectName="OrderDetail"></table> <table tableName="orders"></table> <table tableName="user"></table> </context> </generatorConfiguration> 表的配置与数据库表名一致

    第三步:使用java类来执行逆向工程

    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; import java.io.File; import java.util.ArrayList; import java.util.List; /** * @ClassName * @Author shuyy * @Date 2020/10/5 **/ public class Generator { public static void main(String[] args) throws Exception{ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; 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); } } 成功执行生成成功(注意:逆向工程只能生成一些简单的CRUD增删改查的简单操作,复杂的模型里有模型,模型里有集合等需要自己自行配置)

    第四步:把生成的代码拷贝到其它项目中

    就复制到之前的ssm中简单的使用一下(注意复制时先复制model里的,再复制mapper,否则由于包的导入问题会报很多错误,要重新导入很多包)

    第五步:在正式项目中使用逆向工程生成的代码(测试)

    如果出现运行报错找不到包,可以关闭一下项目,重写打开即可

    这里使用items表来演示一下,记得给items提供一下toString

    逆向工程还提供了Example用于封装查询条件

    @Test public void test2(){ //1.加载spring配置文件 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //2.获取dao的bean ItemsMapper itemsMapper = (ItemsMapper) context.getBean("itemsMapper"); //3.调用方法 Items items = itemsMapper.selectByPrimaryKey(1); System.out.println(items); System.out.println("-----------------------"); //4.还可以封装查询条件(逆向工程还提供了Example用于封装查询条件) ItemsExample example = new ItemsExample(); ItemsExample.Criteria criteria = example.createCriteria(); criteria.andNameLike("%笔记本%"); List<Items> list = itemsMapper.selectByExample(example); for (Items items1 : list) { System.out.println(items1); } }
    Processed: 0.011, SQL: 8