《Mybatis逆向工程》
目录
一、项目初始化
- 新建maven项目;
- pom.xml
<!-- 继承springboot,使当前项目称为springboot项目 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
</parent>
<dependencies>
<!-- web开发 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--swagger-->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
- application.yml
server:
port: 8080
swagger:
title: 《Mybatis逆向工程》 #文档标题
description: 代码生成器测试 #文档描述
global-operation-parameters:
- name: Authorization #全局参数
description: 认证信息 #参数描述
modelRef: string #数据类型
parameterType: header #请求类型(请求头/请求体)
required: false #是否必须
spring:
#数据源配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8
username: root
password: 123456
mybatis:
#xml扫描路径
mapper-locations: classpath:mappers/*Mapper.xml
configuration:
#日志打印
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- 启动类(com.hpr.MainApplication)
package com.hpr;
import com.spring4all.swagger.EnableSwagger2Doc;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@EnableSwagger2Doc
@SpringBootApplication
@MapperScan("com.hpr.mapper")
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class);
}
}
- 启动测试,访问http://localhost:8080/doc.html
执行结果
二、代码生成器
- pom.xml
<!--代码生成器-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>RELEASE</version>
</dependency>
- resources/config/mbg.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="MybatisReverse" targetRuntime="MyBatis3">
<!-- 配置生成的实体类的注释问题,设置为true不生成 ,如果不设置的话会默认生成很多的注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 配置数据源,注意下面的driverClass,不同版本的数据库驱动不同的 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8"
userId="root"
password="123456">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 指定entity的生成位置 -->
<javaModelGenerator targetPackage="com.hpr.entity"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 指定mapper.xml的生成位置 -->
<sqlMapGenerator targetPackage="mappers"
targetProject=".\src\main\resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 指定mapper生成位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.hpr.mapper" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- table指定每个表的生成策略 ,tableName表名,domainObjectName要生成的Java类名 -->
<table tableName="teacher" domainObjectName="Teacher"/>
<table tableName="student" domainObjectName="Student"/>
</context>
</generatorConfiguration>
- com.hpr.generate.MBGTest
package com.hpr.generate;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
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;
public class MBGTest {
public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<>();
File configFile = new File("src/main/resources/config/mbg.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(true);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
System.out.println("生成结束!");
}
}
- 运行MBGTest类
执行结果
代码生成器将为我们自动生成entity、mapper及mapper.xml。
三、核心方法
方法汇总
//查询满足条件的总记录数,类似select * from xxx where xxx
long countByExample(TeacherExample example);
//条件删除
int deleteByExample(TeacherExample example);
//主键删除
int deleteByPrimaryKey(Integer teacherId);
//新增数据(100%字段全部插入)
int insert(Teacher row);
//新增数据(null值字段忽略不插入)
int insertSelective(Teacher row);
//条件查询
List<Teacher> selectByExample(TeacherExample example);
//主键查询
Teacher selectByPrimaryKey(Integer teacherId);
//条件修改(null值字段忽略不修改)
int updateByExampleSelective(@Param("row") Teacher row, @Param("example") TeacherExample example);
//条件修改(100%字段全部修改)
int updateByExample(@Param("row") Teacher row, @Param("example") TeacherExample example);
//主键修改(null值字段忽略不修改)
int updateByPrimaryKeySelective(Teacher row);
//主键修改(100%字段全部修改)
int updateByPrimaryKey(Teacher row);
案例一
- com.hpr.test.Test1
package com.hpr.test;
import com.hpr.entity.Student;
import com.hpr.entity.StudentExample;
import com.hpr.mapper.StudentMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class Test1 {
@Autowired
private StudentMapper studentMapper;
@Test
public void testGenerateCode() {
//查询语文成绩60以上,英语成绩100以下的学生信息
List<Student> students = studentMapper.selectByExample(new StudentExample() {{
createCriteria().andChineseGreaterThan(60)
.andEnglishLessThan(100);
}});
students.forEach(System.out::println);
}
}
- 运行测试
执行结果
四、分页插件
- pom.xml
<!--分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>RELEASE</version>
</dependency>
- com.hpr.test.Test1
...
public class Test1 {
...
@Test
public void testPageHelper() {
//pageNum:页码,pageSize:每页记录数
PageHelper.startPage(2, 2);
List<Student> students = studentMapper.selectByExample(null);
PageInfo<Student> page = new PageInfo<>(students);
System.out.println("总页数:" + page.getPages());
System.out.println("总记录数:" + page.getTotal());
page.getList().forEach(System.out::println);
}
}
- 运行测试
执行结果
总结
重点
- 代码生成器的使用;
- 生成代码的核心方法;
- 分页插件的配置及使用。
难点
- 生成代码的核心方法;
- 分页插件的配置及使用。