简单的说,就是通过数据库中的单表,自动生成java代码。
Mybatis官方提供了逆向工程 可以针对单表自动生成mybatis代码(mapper.java\mapper.xml\po类)
企业开发中,逆向工程是个很常用的工具。
逆向工程只提供了一些简单的增删改查操作,一些复杂的模型中有模型,模型中有集合等操作需要自行配置。
导入逆向工程包
导入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> 表的配置与数据库表名一致如果出现运行报错找不到包,可以关闭一下项目,重写打开即可
这里使用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); } }