Spring Boot 2.6.4 (quatre) - Accès aux données (Part D MyBatis Plus)

"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

image.png

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

image.png

Classe de configuration automatique MybatisPlusAutoConfiguration activée Classe de configuration MyBatisPlusPropertiesimage.png

Le préfixe de la classe de configuration MyBatisPlusProperties est mybatis-plusimage.png

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);
    }
}
复制代码

执行该方法

image.png 成功查询到数据,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);
}
复制代码

执行该方法 image.png

更多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方法 image.png

根据输出的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 mappeurimage.png

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 image.png

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

Je suppose que tu aimes

Origine juejin.im/post/7080150504071757861
conseillé
Classement