"L'offre arrive, cherchez des amis à récupérer ! Je participe à l'événement de vérification du recrutement du printemps 2022, cliquez pour voir les détails de l'événement ."
1. Spring Boot intègre MyBatis Plus
MyBatis Plus est un framework d'amélioration de MyBatis, il ne fait qu'enrichir et ne change pas sur la base de MyBatis, il est né pour simplifier le développement et gagner en efficacité. MyBatis Plus fournit un mappeur et un service à usage général, qui peuvent rapidement implémenter CRUD, des opérations par lots, des suppressions logiques et des opérations de pagination sur une seule table sans écrire d'instructions SQL.
Utiliser l'idée pour créer spring-boot-mybatisplus et importer les dépendances de base
MyBatis Plus fournit un démarreur Spring Boot, qui peut directement importer le démarreur de MyBatis Plus, puis importer les dépendances du générateur de code MyBatis Plus et les dépendances du modèle
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
复制代码
Principe de configuration automatique de MyBatis Plus La classe de configuration automatique de MyBatis Plus est MybatisPlusAutoConfiguration sous le package com.baomidou.mybatisplus.autoconfigure
Classe de configuration automatique MybatisPlusAutoConfiguration activée Classe de configuration MyBatisPlusProperties
Le préfixe de la classe de configuration MyBatisPlusProperties est mybatis-plus
La configuration concernée de mybatis-plus se trouve dans la classe de configuration MyBatisPlusProperties
2. MyBatis Plus implémente le CRUD
Configurez les informations de connexion à la base de données dans application.yml et utilisez la source de données par défaut de Spring Boot
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: Abc*123456
url: jdbc:mysql://rm-uf67r962043910k193o.mysql.rds.aliyuncs.com:3306/test
复制代码
Ajouter la configuration associée de MyBatis Plus
mybatis-plus:
mapper-locations: classpath:mappers/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
auto-mapping-behavior: full
复制代码
Ajouter un package d'entité, ajouter une classe d'entité Tesla
@Data
@TableName("t_tesla")
public class Tesla {
private Integer id;
private String name;
private Double price;
private String vehicleType;
private String factory;
}
复制代码
Ajout du package mapper, ajout de l'interface TeslaMapper, ajout de la méthode selectTeslaById
@Mapper
public interface TeslaMapper {
Tesla selectTeslaById(Integer id);
}
复制代码
在resources目录下增加mpper文件夹,增加TeslaMapper对应的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lilith.mapper.TeslaMapper">
<sql id="teslaAllColums">
id,name,price,vehicle_type,factory
</sql>
<select id="selectTeslaById" resultType="com.lilith.entity.Tesla">
SELECT
<include refid="teslaAllColums"></include>
FROM t_tesla where id = #{id}
</select>
</mapper>
复制代码
增加TeslaMapperTest测试类,对selectTeslaById方法进行测试
@SpringBootTest
public class TeslaMapperTest {
@Resource
private TeslaMapper teslaMapper;
@Test
public void selectTeslaById(){
Tesla tesla = teslaMapper.selectTeslaById(2);
System.out.println("查询到的内容为:" + tesla);
}
}
复制代码
执行该方法
成功查询到数据,application.yml中MyBatis Plus的配置生效。
继承BaseMapper实现CRUD
TeslaMapper继承MyBatis Plus的BaseMapper接口即可拥有基本CRUD条件查询以及分页方法
@Mapper
public interface TeslaMapper extends BaseMapper<Tesla>{
Tesla selectTeslaById(Integer id);
}
复制代码
在TeslaMapperTest中测试BaseMapper提供的查询方法
@Test
public void selectOneById(){
Tesla tesla = teslaMapper.selectById(2);
System.out.println("MyBatis Plus的SELECT方法查询到的数据:" + tesla);
}
复制代码
执行该方法
更多MyBatis Plus的CRUD方法以及注解和条件查询可以参考 Data Acces 之 MyBatis Plus(一)- BaseMapper CRUD(Part A) 和 Data Access 之 MyBatis Plus(二)- Wrapper 条件构造器
三、MyBatis Plus 插件使用
在SSM中配置MyBatis Plus插件需要在Spring 配置文件中配置分页插件,然后将分页插件的Bean注入到MybatisSqlSessionFactoryBean中。而在Spring Boot中可以使用配置类的方式,将分页插件的Bean注册到容器中
新建config包,增加MyBatisPlusConfig配置类,将MyBatis Plus用于分页的插件注入到容器中
@Configuration
public class MyBatisPlusConfig {
public PaginationInnerInterceptor innerInterceptor(){
PaginationInnerInterceptor interceptor = new PaginationInnerInterceptor();
interceptor.setDbType(DbType.MYSQL);
return interceptor;
}
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.setInterceptors(Arrays.asList(innerInterceptor()));
return mybatisPlusInterceptor;
}
}
复制代码
在TeslaMapperTest中测试selectPage方法
@Test
public void selectPage(){
Page<Tesla> teslaPage = new Page<>(2,4);
Page<Tesla> page = teslaMapper.selectPage(teslaPage, null);
System.out.println("--------------------");
System.out.println("查询当前页面的数据:" + page.getRecords());
System.out.println("--------------------");
}
复制代码
执行selectPage方法
根据输出的SQL语句,成功执行了分页查询。
四、MyBatis Plus MPG 代码生成器
使用MyBatis Plus的代码生成器需要导入generator依赖和模板引擎依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
复制代码
在MybatisplusApplicationTests测试类中添加代码生成器方法的代码
private static final String JDBC_URL = "jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true";
private static final String JDBC_USERNAME = "root";
private static final String JDBC_PASSWORD = "root";
// 代码生成器
@Test
public void generator(){
FastAutoGenerator.create(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD)
.globalConfig(builder -> {
builder.author("Jingnan") // 设置作者
//.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("src/main/java"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com") // 设置父包名
.moduleName("lilith") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "src/main/resources/mappers/")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("porsche") // 设置需要生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
复制代码
Exécutez cette méthode pour générer la couche contrôleur, la couche service, la couche mappeur et le fichier de configuration XML du mappeur
Tester le code de couche du contrôleur
Ajouter du code dans PorscheController
@Controller
@RequestMapping("/lilith/porsche")
public class PorscheController {
@Autowired
private IPorscheService porscheService;
@ResponseBody
@GetMapping("/list")
public List<Porsche> list(){
List<Porsche> list = porscheService.list();
return list;
}
}
复制代码
Supprimez l'annotation @Mapper sur la classe TeslaMapper et ajoutez l'annotation @MapperScan sur la classe de démarrage MyBatisplusApplication
@MapperScan(basePackages = "com.lilith.mapper")
复制代码
Lancez l'application et entrez http://localhost:8080/lilith/porsche/list dans le navigateur
Pour le générateur de code de MyBatis Plus et le test de la couche Mapper et de la couche Service, vous pouvez également vous référer à MyBatis Plus de Data Access (3) - MPG Code Generator