Mybatis的逆向工程
- 前言:在一开始学习Mybatis的时候,先是建立数据库表,然后根据数据库表建立相应的JavaBean文件,还要建立相应的mapper映射和接口,在建立mapper文件的时候,还要注意namespace要对应相应的接口全类名;而mapper.xml中还要手动添加增删改查的SQL语句,而接口中方法的命名、返回值、输入参数等还要有和映射文件保持一致,假如遇到要建立多个数据库表相应的JavaBean、映射和接口、想一下头都大了。而这个时候,就可以运用Mybatis的逆向工程,通过现有的已经建立好的数据库表,可以一次自动生成一个或多个相应的映射、接口、JavaBean等内容。大致流程如下:
建立数据表
user表
rootuser表
下载工具
运用到的jar包一共有3个:
- mybatis.jar
- jdbc.jar
- mybatis-generator-core-1.3.5.jar
第三个jar包可以直接点击以下进行下载:下载链接
如果是直接下载jar包可以直接用,而如果下载的是zip压缩包,解压之后在目录的lib中可以找到相应的jar包。
创建配置文件
- 创建新的文件并将三个jar包加入项目的构建目录(Build Path)中去。
- 配置映射文件(generator.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="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<!--
suppressAllComments属性值:
true:自动生成实体类、SQL映射文件时没有注释
false:自动生成实体类、SQL映射文件,并附有注释
-->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 数据库连接信息 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mbts"
userId="root" password="root">
</jdbcConnection>
<!--
forceBigDecimals属性值:
true:把数据表中的DECIMAL和NUMERIC类型,
解析为JAVA代码中的java.math.BigDecimal类型
false(默认):把数据表中的DECIMAL和NUMERIC类型,
解析为解析为JAVA代码中的Integer类型
-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--
targetProject属性值:实体类的生成位置
targetPackage属性值:实体类所在包的路径
-->
<javaModelGenerator targetPackage="org.lanqiao.entity"
targetProject=".\src">
<!-- trimStrings属性值:
true:对数据库的查询结果进行trim操作(去空格)
false(默认):不进行trim操作
-->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--
targetProject属性值:SQL映射文件的生成位置
targetPackage属性值:SQL映射文件所在包的路径
-->
<sqlMapGenerator targetPackage="org.lanqiao.mapper"
targetProject=".\src">
</sqlMapGenerator>
<!-- 生成动态代理的接口 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="org.lanqiao.mapper" targetProject=".\src">
</javaClientGenerator>
<!-- 指定数据库表 -->
<table tableName="user"> </table>
<table tableName="rootuser"> </table>
</context>
</generatorConfiguration>
- 以上targetProject、targetPackage是生成文件的位置和路径,位置一般是src中,而路径是你选择打包文件的路径,一般JavaBean放在一个package中,而选择将映射mapper.xml和接口这两个关系密切的文件放在同一个package当中,方便操作。
- < table tableName=“xxx”> < /table>可以有多个,但相应的数据库表要事先已经存在,而有多少个 table,就会生成等同数量的接口和等同数量的映射文件。
- 注:以上用的是mysql,如果不是mysql,数据库连接信息要做相应修改。
- 编写执行文件(test.java)
package org.lanqiao.test;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
File file = new File("src/org/lanqiao/test/generator.xml");//配置文件
List<String> warings = new ArrayList<>();
ConfigurationParser cp = new ConfigurationParser(warings);
Configuration config = cp.parseConfiguration(file);
DefaultShellCallback callback = new DefaultShellCallback(true);
//逆向工程创建核心类
MyBatisGenerator generator = new MyBatisGenerator(config,callback,warings);
generator.generate(null);
}
}
以上的编写当中,一开始可以先编写核心执行语句:
MyBatisGenerator generator = new MyBatisGenerator();
//一般填null就行了
generator.generate(null);
通过提示建立需要的参数config、callback、warings等;callback在创建时需要输入boolean参数,如果是IDEA,输入框会显示:
overwrite为重写,一般选择true就够了。
- 而warings是用来存放生成时的错误信息的,建立和输入这些参数也只是核心语句的语法需要,不需要硬记。
- 要注意的是,如果报错,很大可能是你的头文件没有导对,根据错误切换头文件即可。
- 执行
在执行之前,文件中所有的文件就只有一个包以及其中的两个文件:
执行之后即可出现相应的包和文件:
User.java
UserMapper.xml
接口UserMapper.java
- 然后rootuser大致也是如此,就不一一展示了,UserExample.java和UserExample.java是演示如何使用的,创建时就自动生成,如果不想要或不需要都可以直接删除即可。全部过程就如上面过程所示了。
总结
- Mybatis的逆向工程的确能帮我们省略许多生成配置工作,但你会发现JavaBean中它使用的类型会参考数据表中的属性建立的,有时候需要自己稍作修改,而如果是刚接触逆向工程的时候,映射Mapper.xml文件中的sql语句以及接口中的方法都需要你去研究了解的,毕竟这些文件的创建并不是使用你正向编辑时自己的思维,但熟悉它的生成格式和方法之后,就会比较舒服了。而是否选择使用逆向工程,那就要结合你自身的情况进行选择了。
注:本篇文章是在Mybatis学习过程中总结整理出来的,用于以后对于Mybatis知识点的复习回顾,如有错漏之处敬请指出,不胜感激!