Mybatis的逆向工程

Mybatis的逆向工程

  • 前言:在一开始学习Mybatis的时候,先是建立数据库表,然后根据数据库表建立相应的JavaBean文件,还要建立相应的mapper映射和接口,在建立mapper文件的时候,还要注意namespace要对应相应的接口全类名;而mapper.xml中还要手动添加增删改查的SQL语句,而接口中方法的命名、返回值、输入参数等还要有和映射文件保持一致,假如遇到要建立多个数据库表相应的JavaBean、映射和接口、想一下头都大了。而这个时候,就可以运用Mybatis的逆向工程,通过现有的已经建立好的数据库表,可以一次自动生成一个或多个相应的映射、接口、JavaBean等内容。大致流程如下:

生成过程

建立数据表

user表
user表
rootuser表
rootuser

下载工具

运用到的jar包一共有3个:

  1. mybatis.jar
  2. jdbc.jar
  3. mybatis-generator-core-1.3.5.jar
    第三个jar包可以直接点击以下进行下载:下载链接
    如果是直接下载jar包可以直接用,而如果下载的是zip压缩包,解压之后在目录的lib中可以找到相应的jar包。

创建配置文件

  1. 创建新的文件并将三个jar包加入项目的构建目录(Build Path)中去。
  2. 配置映射文件(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>
  • 以上targetProjecttargetPackage是生成文件的位置和路径,位置一般是src中,而路径是你选择打包文件的路径,一般JavaBean放在一个package中,而选择将映射mapper.xml和接口这两个关系密切的文件放在同一个package当中,方便操作。
  • < table tableName=“xxx”> < /table>可以有多个,但相应的数据库表要事先已经存在,而有多少个 table,就会生成等同数量的接口和等同数量的映射文件。
  • 注:以上用的是mysql,如果不是mysql,数据库连接信息要做相应修改。
  1. 编写执行文件(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,输入框会显示:
callback显示
overwrite为重写,一般选择true就够了。

  • 而warings是用来存放生成时的错误信息的,建立和输入这些参数也只是核心语句的语法需要,不需要硬记。
  • 要注意的是,如果报错,很大可能是你的头文件没有导对,根据错误切换头文件即可。
  1. 执行
    在执行之前,文件中所有的文件就只有一个包以及其中的两个文件:
    运行之前
    执行之后即可出现相应的包和文件:
    运行之后
    User.java
    User.java
    UserMapper.xml
    UserMapper.xml
    接口UserMapper.java
    接口
  • 然后rootuser大致也是如此,就不一一展示了,UserExample.java和UserExample.java是演示如何使用的,创建时就自动生成,如果不想要或不需要都可以直接删除即可。全部过程就如上面过程所示了。

总结

  • Mybatis的逆向工程的确能帮我们省略许多生成配置工作,但你会发现JavaBean中它使用的类型会参考数据表中的属性建立的,有时候需要自己稍作修改,而如果是刚接触逆向工程的时候,映射Mapper.xml文件中的sql语句以及接口中的方法都需要你去研究了解的,毕竟这些文件的创建并不是使用你正向编辑时自己的思维,但熟悉它的生成格式和方法之后,就会比较舒服了。而是否选择使用逆向工程,那就要结合你自身的情况进行选择了。

注:本篇文章是在Mybatis学习过程中总结整理出来的,用于以后对于Mybatis知识点的复习回顾,如有错漏之处敬请指出,不胜感激!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值