MyBatis:Generator

MyBatis

  • Generator
    • 批量操作
    • 分页查询
    • 存储过程

MyBatis:Generator_第1张图片

Generator

介绍网址:Introduction to MyBatis Generator

Generator ,一个用于 MyBatis 的代码生成工具,可以根据数据库表结构自动生成对应的实体类、DAO 接口和 SQL 映射文件,提高开发效率和代码质量。同时,MyBatis Generator 还支持自定义生成规则,可以按照自己的需求进行配置。

简单示例:
首先,在 pom.xml 中添加依赖


<dependency>
    <groupId>org.mybatis.generatorgroupId>
    <artifactId>mybatis-generator-coreartifactId>
    <version>1.4.0version>
dependency>

接着,在 resources 目录下创建一个 Generator 的配置文件 mybatis_generator.xml


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>
            
            <property name="suppressAllComments" value="true" />
        commentGenerator>

        
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mybatisdemo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC"
                        userId="root"
                        password="0123" />

        
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        javaTypeResolver>

        
        <javaModelGenerator targetPackage="cn.edu.MyBatisDemo.model" targetProject=".\src\main\java" />

        
        <sqlMapGenerator targetPackage="cn.edu.MyBatisDemo.mapper" targetProject=".\src\main\java">
            
            <property name="enableSubPackages" value="true" />
        sqlMapGenerator>

        
        <javaClientGenerator type="XMLMAPPER" targetPackage="cn.edu.MyBatisDemo.mapper" targetProject=".\src\main\java">
            
            <property name="enableSubPackages" value="true" />
        javaClientGenerator>

        
        <table tableName="mybatis_generator"
               domainObjectName="MyBatisGenerator"
               enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false" />
    context>

generatorConfiguration>

然后,只需在数据库中创建一个数据表 mybatis_generator 。表名称需要与 mybatis_generator.xml 的 table 标签中的 tableName 属性值对应
表结构信息如图:
MyBatis:Generator_第2张图片

最后,测试结果

package cn.edu.MyBatisDemo.test;

import org.junit.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 MyBatisGeneratorTest {
    @Test
    public void mbgTest() throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;

        // 只需修改 Generator 的配置文件名称即可
        String path = this.getClass().getClassLoader().getResource("mybatis_generator.xml").getPath();
        File configFile = new File(path);

        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);
    }
}

结果如图(实体类、接口与映射文件会自动生成在设定的目录下):

接口中声明一系列方法介绍如图:

在上面案例的基础下,简单实现批量操作与分页查询。

批量操作

首先,在实体类 MyBatisGenerator 中添加无参构造方法、有参构造方法与 toString() 方法

public MyBatisGenerator() {
   super();
}

public MyBatisGenerator(Integer id, String name, Integer age, String hobby, String career) {
    this.id = id;
    this.name = name;
    this.age = age;
    this.hobby = hobby;
    this.career = career;
}

@Override
public String toString() {
    return "MyBatisGenerator{" +
            "id=" + id +
            ", name='" + name + '\'' +
            ", age=" + age +
            ", hobby='" + hobby + '\'' +
            ", career='" + career + '\'' +
            '}';
}

然后,在测试类 MyBatisGenerator 中添加批量操作测试方法

@Test
public void test() throws IOException {
    //1.根据配置文件创建数据库连接会话的工厂类
    InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
    //获取工厂类
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    //2.通过工厂类获取数据库连接的会话
    SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);

    //3.通过 sqlSession 操作数据库
    try {
        MyBatisGeneratorMapper myBatisGeneratorMapper = sqlSession.getMapper(MyBatisGeneratorMapper.class);
        for (int i = 0 ; i < 36 ; i++){
            //实体类的名字 MyBatisGenerator 与导入的 org.mybatis.generator.api.MyBatisGenerator 名字重复。故此写上 cn.edu.MyBatisDemo.model.
            myBatisGeneratorMapper.insert(new cn.edu.MyBatisDemo.model.MyBatisGenerator(20230901+i,"Q"+i,18,"看书","歌手"));
        }
        sqlSession.commit();
    } finally {
        sqlSession.close();
    }
}

注:在创建会话中传入参数 ExecutorType.BATCH(设定采用批量操作的方式执行 SQL 语句)
在这里插入图片描述

最后,测试结果

结果如图:
MyBatis:Generator_第3张图片

分页查询

MyBatis 分页插件 PageHelper 作者 — isea533
Mybatis-PageHelper 网址

首先,在 pom.xml 中添加依赖

<dependency>
  <groupId>com.github.pagehelpergroupId>
  <artifactId>pagehelperartifactId>
  <version>5.3.2version>
dependency>

接着,在全局配置文件 mybatis.xml 中配置插件


<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">plugin>
plugins>

然后,在接口 MyBatisGeneratorMapper 中声明获取所有用户信息的方法。同时,在映射文件 MyBatisGeneratorMapper.xml 中实现方法
在这里插入图片描述

<select id="selectAll" resultType="myBatisGenerator" >
  select
    <include refid="Base_Column_List" />
  from mybatis_generator
select>

最后,测试结果

存储过程

在 MySQL调优 文章中,了解过存储过程。接下来,简单介绍 MyBatis 如何调用存储过程。

首先,创建一个存储过程 mybatis_generator_storedProcedure

DELIMITER $$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    PROCEDURE `mybatisdemo`.`mybatis_generator_storedProcedure`(IN start_id INT,IN end_id INT)
    BEGIN
		SELECT `id`,`name`,`age`,`hobby`,`career` FROM `mybatis_generator` WHERE `id` >= start_id AND `id` <= end_id;
    END$$

DELIMITER ;

然后,在接口 MyBatisGeneratorMapper 中声明通过调用存储过程获取指定用户信息的方法。同时,在映射文件 MyBatisGeneratorMapper.xml 中实现方法

 public List<MyBatisGenerator> selectByStoredProcedure(@Param("start_id") int start_id,@Param("end_id") int end_id); //通过调用存储过程获取指定用户的信息

<select id="selectByStoredProcedure" resultType="myBatisGenerator" statementType="CALLABLE" >
  {call mybatis_generator_storedProcedure(
      #{start_id,mode=IN,jdbcType=INTEGER},
      #{end_id,mode=IN,jdbcType=INTEGER}
  )}
select>

最后,测试结果

你可能感兴趣的:(MyBatis,Generator,批量操作,分页查询,存储过程)