Mybatis逆向工程(针对数据库中的单表自动生成mybatis代码mapper.java、mapper.xml、po类)-day05

Mybatis逆向工程

1. 简介

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

  • Mybatis官方提供了逆向工程
    可以针对单表自动生成mybatis代码(mapper.java\mapper.xml\po类)

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

  • 逆向工程只提供了一些简单的增删改查操作,一些复杂的模型中有模型,模型中有集合等操作需要自行配置。

2. 下载逆向工程

3. 使用方法

  1. 创建一个简单的java项目;
  2. 导入相关jar包,创建generator的配置文件;
  3. 使用java类来执行逆向工程;
  4. 把生成的代码拷贝到项目中;
  5. 在正式项目中使用逆向工程生成的代码。

第一步:创建一个简单的java项目

在这里插入图片描述
在这里插入图片描述

第二步:导入jar包,创建generator配置文件

  • 导入逆向工程包
    在这里插入图片描述

  • 导入mysql数据库驱动包(根据使用jdk的版本,jdk1.7就使用5版本的)
    在这里插入图片描述

  • 创建一个lib文件夹,直接复制进去,Add as Library
    在这里插入图片描述

  • OK即可
    在这里插入图片描述

  1. 先在src下创建一个generatorConfig.xml(generator配置文件)在这里插入图片描述
  2. 再打开所下载的文件中的docs下的index.html(查看逆向工程的简介、功能、使用)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 打开左侧的快速入门(它提供了使用步骤与xml配置文件)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 点击中间的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>
  1. 修改配置文件
<?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&amp;characterEncoding=utf8
        -->
        
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql:///mybatis_day01?useUnicode=true&amp;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);
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_43414199/article/details/108927568