MyBatis的逆向工程,快速搭建

Mybatis的逆向工程

什么是逆向工程

简单点说就是通过数据库中的单表,自动生成java代码。

Mybatis官方提供了逆向工程,可以针对单表自动生成mybatis代码

(mapper.java \ mapper.xml \ po类)

企业开发中,逆向工程是个很常用的工具。

可根据文档进行练习:http://mybatis.org/generator/

使用方法

首先来看下我我创建的表(mysql)

CREATE TABLE t_user(
  tid INT PRIMARY KEY AUTO_INCREMENT,
  uName VARCHAR(32),
  birthday DATE ,/*生日*/
  sex CHAR(1),/*性别*/
  address VARCHAR(200)/*地址*/
);

image-20210115232649817

1、搭建Maven项目所需要的jar包,基于ssm整合+逆向工程

2、 创建generator配置文件;

3、 使用java类来执行逆向工程;

4、 把生成的代码拷贝到项目中。

5、 再正式项目中使用逆向工程生成的代码

6、 需要

pom.xml

image-20210116011947975

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.7</maven.compiler.source>
  <maven.compiler.target>1.7</maven.compiler.target>
  <!--集中配置版本号,以后修改这里就可以了,下面不需要修改-->
  <!-- Spring版本号5.2.6.RELEASE -->
  <spring.version>5.2.6.RELEASE</spring.version>
  <!-- oracle 版本号5.2.6.11.2.0.2.0 -->
  <oracle.verson>11.2.0.2.0</oracle.verson>
</properties>

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>

  <!--测试所需要的-->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <!-- Spring相关包 -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring.version}</version>
  </dependency>

  <!-- AOP相关包 -->
  <dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.8.7</version>
  </dependency>
  <dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.7</version>
  </dependency>

  <!-- 支持文件上传 -->
  <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
  </dependency>
  <dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
  </dependency>
  <!--对json格式支持 -->
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.0</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.0</version>
  </dependency>

  <!-- MyBatis相关包 -->
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
  </dependency>

  <!--逆向工程-->
  <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
  <dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.4.0</version>
  </dependency>
  <!-- MySQL相关包 -->
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.26</version>
  </dependency>

  <!-- oracle 包 -->
  <dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>${oracle.verson}</version>
  </dependency>
  <!-- 数据库连接池 -->
  <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.20</version>
  </dependency>
  <dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.1</version>
  </dependency>

  <!-- Spring集成MyBatis -->
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.0</version>
  </dependency>

  <!-- JSP相关 -->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
  </dependency>

  <!--LOG4日志 start -->
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.6</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.6</version>
  </dependency>
  <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
  </dependency>
  <!--LOG4日志 end -->



  <!-- Apache工具组件 -->
  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.3.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
  </dependency>
  <dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.3</version>
  </dependency>


  <!-- 分页插件 -->
  <dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.1.6</version>
  </dependency>
  <dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>0.9.6</version>
  </dependency>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>compile</scope>
  </dependency>
</dependencies>

创建generator配置文件

image-20210115231124327

在classpath下,创建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="testTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--***数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mybatis"
                        userId="root"
                        password="123456">
        </jdbcConnection>

        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
            NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- 1.***targetProject:生成PO类的位置 -->
        <javaModelGenerator targetPackage="com.javacto.pojo"
                            targetProject=".\src\main\java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!--2. ***targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="com.javacto.mapper"
                         targetProject=".\src\main\resources">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.javacto.mapper"
                             targetProject=".\src\main\java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 3.***指定数据库表 -->
        <!-- <table tableName="items"></table>
        <table tableName="orders"></table>
        <table tableName="orderdetail"></table> -->
        <table tableName="t_user"></table>


    </context>
</generatorConfiguration>

使用java类 执行逆向工程

其实就是一个工具包

package com.javacto.util;

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;

/**
 * describe   逆向工程生成的测试类
 * 作者: 英杰
 */
public class Generator {

    /**
     * @param args
     */
    public static void main(String[] args)  throws Exception{
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        //指向逆向工程的配置文件
        File configFile = new File("src/main/resources/generator.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);
    }

}

完美,此时来看看逆向工程为我们生成的文件有哪些

image-20210116011706806

注:每一个pojo都会对应一个 Example

image-20210116011426494

把生成的代码拷到项目当中

如果正式项目中已经有po类所在的包了,那么就只需要拷贝po类到指定包下就可以。

如果正式项目中没有po包,那么就把逆向工程中整个po类的包拷贝过去。

Mapper.xml和mapper.java的拷贝与po类一样。

使用生成的代码

我这里直接用单元测试进行测试一下

首先需要导入的jar包

image-20210116011857196

package com.javacto.mapper;

import com.javacto.pojo.TUser;
import com.javacto.pojo.TUserExample;
import com.javacto.pojo.TUserExample.Criteria;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.Date;
import java.util.List;

/**
 * describe  单元测试  Dao
 * 作者: 英杰
 */
@RunWith(SpringJUnit4ClassRunner.class) //表示继承了SpringJUnit4ClassRunner类
//告诉junit spring配置文件
@ContextConfiguration( { "classpath:beans.xml" })
public class UserDaoTest {
    @Autowired
    private TUserMapper tUserMapper;


    /**
     * 测试查询所有数据
     * public List<TUser> selectByExample(TUserExample example);
     */
    @Test
    public void test01(){
        TUserExample example=new TUserExample();
        List <TUser> list =tUserMapper.selectByExample(example);
        for (TUser u : list) {
            System.out.println(u);
        }
    }

    /**
     * 查询 添加条件
     * 需要传 Criteria
     * protected List<Criteria> oredCriteria;
     */
    @Test
    public void test02(){
        //1.创建 TUserExample
        TUserExample example=new TUserExample();
        //创建Criteria
        Criteria criteria=example.createCriteria();
        //传入参数
        //criteria.andUnameEqualTo("李四");  //查询姓名为李四的 所有数据
        criteria.andSexEqualTo("1");  //查询性别为1的 所有数据
        List <TUser> list =tUserMapper.selectByExample(example);
        for (TUser u : list) {
            System.out.println(u);
        }
    }

    /**
     * 测试03  删除
     * int deleteByPrimaryKey(Integer tid);
     * int deleteByExample(TUserExample example);
     */
    @Test
    public void test03(){
        //1.创建 TUserExample
        TUserExample example=new TUserExample();
        //创建Criteria
        Criteria criteria=example.createCriteria();

        /*int num=tUserMapper.deleteByPrimaryKey(1003);
        if (num>0){
            System.out.println("删除成功");
        }*/
        //或者使用 第二种
        criteria.andTidEqualTo(1004);
        tUserMapper.deleteByExample(example);
    }

    /**
     * 测试04 添加
     */
    @Test
    public void test04(){
        TUser tUser=new TUser();

        tUser.setTid(1003);
        tUser.setAddress("北京");
        tUser.setBirthday(new Date());
        tUser.setSex("2");
        tUser.setUname("小黑");
        int num=tUserMapper.insert(tUser);
        if (num>0){
            System.out.println("添加成功");
        }
    }


    /**
     * 测试05 修改
     * int updateByPrimaryKeySelective(TUser record);
     * 此方法 可选择修改
     */
    @Test
    public void test05(){

        TUser tUser=new TUser();

        tUser.setTid(1003);
       /* tUser.setAddress("北京1");
        tUser.setBirthday(new Date());
        tUser.setSex("1");*/
        tUser.setUname("小黑122");
        int num = tUserMapper.updateByPrimaryKeySelective(tUser);
        if (num>0){
            System.out.println("添加成功");
        }
    }

    /**
     * 测试06  查看总共有几条数据
     */
    @Test
    public void test06(){
        TUserExample example=new TUserExample();

        long l = tUserMapper.countByExample(example);
        System.out.println(l);
    }
}

MyBatis逆向工程注意事项

MyBatis逆向工程的注意事项:mapper文件内容不是覆盖而是追加

XXXMapper.xml文件已经存在时,如果进行重新生成则mapper.xml文件内容不被覆盖而是进行内容追加,
结果导致mybatis解析失败。

解决方法:删除原来已经生成的mapper xml文件再进行生成。
Mybatis自动生成的po及mapper.java文件不是内容而是直接覆盖没有此问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值