问题背景
除了上篇文章的增删改查的基本操作以外,通过安装generator插件可以增加一些常用的sql语句
- 默认已安装mysql
- 默认已安装JDK
- 根据上篇文章的代码做一些改动,也可以直接下载源码进行参考
DAO层使用Mybatis-generator生成映射文件连接Mysql入门测试用例(无限速源码下载),单条增删改查CRUD(一)
DAO层使用Mybatis-generator生成映射文件连接Mysql入门测试用例(无限速源码下载),selectByExample,insertSelective,countByExample,selectOneByExample的使用(二)
DAO层使用Mybatis-generator生成映射文件连接Mysql入门测试用例(无限速源码下载),deleteByExample,batchInsert,updateByExampleSelective,updateByExample的使用(三)
DAO层使用Mybatis-generator生成映射文件连接Mysql入门测试用例(无限速源码下载),page分页和limit的使用(四)
DAO层使用Mybatis-generator生成映射文件连接Mysql入门测试用例(无限速源码下载),insert和update插入返回带自增主键的两种方式(五)
代码更改
1 新增的sql语句需要添加额外的依赖,更改pom文件,如果不能下载依赖,可以尝试把插件里面的依赖放入到外层的依赖里面进行下载之后,再放回原处
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.yg</groupId>
<artifactId>mybatisGenerator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mybatisGenerator</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<!-- <scope>test</scope>-->
</dependency>
<!--generator批量插件-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.0</version>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<!--generator插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<dependencies>
<dependency>
<groupId>com.itfsw</groupId>
<artifactId>mybatis-generator-plugin</artifactId>
<version>1.3.8</version>
</dependency>
</dependencies>
<configuration>
<!--允许移动生成的文件 -->
<verbose>true</verbose>
<!-- 是否覆盖 -->
<overwrite>true</overwrite>
<!-- 自动生成的配置 -->
<configurationFile>
src/main/resources/generatorConfig.xml
</configurationFile>
</configuration>
</plugin>
</plugins>
</build>
</project>
2 更改generatorConfig配置文件,添加插件
<?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>
<!--执行generator插件生成文件的命令: call mvn mybatis-generator:generate -->
<!-- 引入配置文件 -->
<!--<properties resource="mybatis-generator/mybatisGeneratorinit.properties"/>-->
<!--classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置 可选 -->
<!--指定特定数据库的jdbc驱动jar包的位置千万千万要指定正确,不然就创建不了文件-->
<classPathEntry
location="D:\software\javaFamily\repository\mysql\mysql-connector-java\8.0.27\mysql-connector-java-8.0.27.jar"/>
<!-- 一个数据库一个context -->
<!--defaultModelType="flat" 大数据字段,不分表 -->
<context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="javaFileEncoding" value="UTF-8"/>
<property name="autoDelimitKeywords" value="true"/>
<!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="mergeable" value="false"/>
<!-- 格式化java代码 -->
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
<!-- 格式化XML代码 -->
<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
<!-- MySQL分页插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.LimitPlugin">
<property name="startPage" value="0"/>
</plugin>
<plugin type="com.itfsw.mybatis.generator.plugins.LombokPlugin">
<property name="@Data" value="true"/>
<property name="@Builder" value="true"/>
<property name="@NoArgsConstructor" value="true"/>
<property name="@AllArgsConstructor" value="true"/>
</plugin>
<!-- 数据Model属性对应Column获取插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.ModelColumnPlugin"/>
<!-- 批量插入插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.BatchInsertPlugin">
<property name="allowMultiQueries" value="false"/>
</plugin>
<!-- 查询单条数据插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.SelectOneByExamplePlugin"/>
<!-- 数据Model链式构建插件 -->
<!-- <plugin type="com.itfsw.mybatis.generator.plugins.ModelBuilderPlugin"/>-->
<!-- Example Criteria 增强插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.ExampleEnhancedPlugin"/>
<!-- Example 目标包修改插件 -->
<!-- <plugin type="com.itfsw.mybatis.generator.plugins.ExampleTargetPlugin">-->
<!-- <!– 修改Example类生成到目标包下 –>-->
<!-- <property name="targetPackage" value="com.itfsw.mybatis.generator.dao.example"/>-->
<!-- </plugin>-->
<!-- 存在即更新插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.UpsertPlugin"/>
<!-- 逻辑删除插件 -->
<!-- <plugin type="com.itfsw.mybatis.generator.plugins.LogicalDeletePlugin">-->
<!-- <!– 这里配置的是全局逻辑删除列和逻辑删除值,当然在table中配置的值会覆盖该全局配置 –>-->
<!-- <!– 逻辑删除列类型只能为数字、字符串或者布尔类型 –>-->
<!-- <property name="logicalDeleteColumn" value="del_flag"/>-->
<!-- <!– 未设置该属性或者该属性的值为null或者NULL,逻辑删除时会把该字段置为NULL。 –>-->
<!-- <property name="logicalDeleteValue" value="9"/>-->
<!-- </plugin>-->
<!-- 注释 -->
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
<property name="addRemarkComments" value="true"/>
<property name="suppressDate" value="true"/>
</commentGenerator>
<!--设置数据库连接驱动-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mysqlTest?serverTimezone=UTC"
userId="root"
password="123456">
<!--
<property name="useInformationSchema" value="true"/>
-->
<!--设置可以获取remarks信息-->
<property name="remarks" value="true"/>
</jdbcConnection>
<!--当字段类型是 DECIMAL或者 NUMERIC时,是否强制转换为BigDecimal,否的话会自动根据规模的大小选择合适的类型 -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
<property name="useJSR310Types" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="com.yg.mybatisgenerator.entity.mysql" targetProject="./src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
<property name="" value=""/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="mapper/mysql" targetProject="./src/main/resources/">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.yg.mybatisgenerator.dao.mysql"
targetProject="./src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- table可以有多个,每个数据库中的表都可以写一个table,tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 -->
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名,需要根据自己的需求修改-->
<!-- 示例勿删-->
<!--table tableName="generator_record" domainObjectName="Student"-->
<table tableName="generator_record"
enableCountByExample="true"
enableDeleteByExample="true"
enableSelectByExample="true"
enableUpdateByExample="true"
selectByExampleQueryId="true"
enableDeleteByPrimaryKey="true"
enableSelectByPrimaryKey="true"
enableUpdateByPrimaryKey="true"
enableInsert="true">
<generatedKey column="id" sqlStatement="MySql" identity="true"/>
</table>
</context>
</generatorConfiguration>
3 点击maven插件中的generate进行生成代码
4 生成更多的sql方法,基本上这些方法不是在特殊的要求下都是够用的
5 添加新的测试方法
package com.yg.mybatisgenerator.springbootTest;
import com.yg.mybatisgenerator.dao.mysql.GeneratorRecordMapper;
import com.yg.mybatisgenerator.entity.mysql.GeneratorRecord;
import com.yg.mybatisgenerator.entity.mysql.GeneratorRecordExample;
import lombok.extern.slf4j.Slf4j;
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
@Slf4j
public class GeneratorTest {
@Autowired
GeneratorRecordMapper generatorRecordMapper;
// 单条插入测试
@Test
public void insertTest() {
GeneratorRecord generatorRecord = GeneratorRecord.builder()
.createTime("444444")
.updateTime("222222")
.build();
int insert = generatorRecordMapper.insert(generatorRecord); // 成功返回1,插入一条数据成功
log.info("insert: {}", insert);
GeneratorRecord record = generatorRecordMapper.selectByPrimaryKey(1L);
log.info("generatorRecord: {}", record);
}
// 单条查询测试,通过主键查询
@Test
public void selectTest() {
GeneratorRecord record = generatorRecordMapper.selectByPrimaryKey(1L);
log.info("generatorRecord: {}", record);
}
// 单条更新测试,通过主键更新
@Test
public void updateTest() {
GeneratorRecord generatorRecord = GeneratorRecord.builder()
.id(2L)
.createTime("111111")
.updateTime("222222")
.build();
int i = generatorRecordMapper.updateByPrimaryKey(generatorRecord);
log.info("i: {}", i);
}
// 单条删除测试,通过主键进行删除
@Test
public void deleteTest() {
int i = generatorRecordMapper.deleteByPrimaryKey(1L);
log.info("i: {}", i);
}
// 根据字段条件选择测试
@Test
public void selectCriteriaTest() {
GeneratorRecordExample example = new GeneratorRecordExample();
GeneratorRecordExample.Criteria criteria = example.createCriteria();
criteria.andCreateTimeEqualTo("111111").andUpdateTimeEqualTo("222222");
List<GeneratorRecord> generatorRecords = generatorRecordMapper.selectByExample(example);
for (GeneratorRecord i : generatorRecords) {
log.info("generatorRecord: {}", i);
}
}
// 根据条件查询,选出第一个符合条件的,limit 1
@Test
public void selectoneTest(){
GeneratorRecordExample example = new GeneratorRecordExample();
GeneratorRecordExample.Criteria criteria = example.createCriteria();
criteria.andCreateTimeEqualTo("111111").andUpdateTimeEqualTo("222222");
GeneratorRecord record = generatorRecordMapper.selectOneByExample(example);
log.info("record: {}",record);
}
// 选择性插入测试
@Test
public void insertSelectTest(){
GeneratorRecord generatorRecord = GeneratorRecord.builder() // 设置id会被自动覆盖
.createTime("789")
.build();
int insert = generatorRecordMapper.insertSelective(generatorRecord); // 成功返回1,插入一条数据成功
log.info("insert: {}", insert);
}
// 通过条件进行计数
@Test
public void countByExampleTest(){
GeneratorRecordExample example = new GeneratorRecordExample();
GeneratorRecordExample.Criteria criteria = example.createCriteria();
criteria.andCreateTimeEqualTo("444444");
long count = generatorRecordMapper.countByExample(example);
log.info("count: {}", count);
}
}
测试
1 countByExample计数测试,通过条件筛选计数
心得
- 增加了selectByExample,insertSelective,countByExample,selectOneByExample的方法,并测试通过
作为程序员第 47 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha ...