目录
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);
}
}