工程背景
当我们在做一个项目的时候,需要对数据库的每一张表都写一个对应的javaBean,还要对每张表都写上基本的增删改查操作,不管是写javaBean还是写增删改查操作,对于任何项目都来说都是固定的写法。当表数量不多的时候,我们可以自己来写,但是当表数量达到上百上千张的时候,这些无疑就是一个繁重的体力活,而Mybatis为我们提供的逆向工程刚好可以解决这个问题
操作步骤
新建一个web动态工程,导入相关jar包
引入逆向工程核心配置文件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="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/shop?characterEncoding=utf8" userId="root"
password="abc123">
</jdbcConnection>
<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
connectionURL="jdbc:oracle:thin:@localhost:1521:mybatis"
userId=""
password="">
</jdbcConnection> -->
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="pojo"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<!--
tableName:要生成的表名
domainObjectName:生成后的实例名
enableCountByExample:Count语句中加入where条件查询,默认true开启
enableUpdateByExample:Update语句中加入where条件查询,默认true开启
enableDeleteByExample:Delete语句中加入where条件查询,默认true开启
enableSelectByExample:Select多条语句中加入where条件查询,默认true开启
selectByExampleQueryId:Select单个对象语句中加入where条件查询,默认true开启
-->
<table tableName="items">
<!--
常用:
property:将所有字段逆向生成为类属性,默认全部
ignoreColumn:生成时忽略列字段
-->
</table>
<table tableName="product"></table>
<table tableName="category"></table>
</context>
</generatorConfiguration>
接着到主程序引用该配置文件
import java.io.File;
import java.util.ArrayList;
import java.util.List;
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;
public class GeneratorFromXML {
public void generator() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
// 指定配置文件
File configFile = new File("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);
}
// 执行main方法以生成代码
public static void main(String[] args) {
try {
GeneratorFromXML generatorSqlmap = new GeneratorFromXML();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行程序就可以看到Mybatis自动为我们生成的pojo跟mapper
基本使用
通常我们新建一个web动态工程在里面使用Mybatis逆向工程后是不在本工程进行使用的,而是把它生成的pojo跟mapper拷贝到我们项目工程下
首先Mybatis逆向工程为我们生成的example,我们可以调用createCriteria(),调用很多的增删改查方法
生成的example,我们可以交给动态代理对象处理
当然动态代理对象的方法也不仅仅只可以接收example类型的参数,可以接收其他类型的