• MyBatis-plus使用


    1 基础介绍

    MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

    它已经封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法就行,就类似于JPA(java持久层API,可以理解为一种规范,Hibernate就是其具体一个实现)。

    Mybatis优势:

    • 通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求;
    • 多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题;
    • 内置分页插件:基于Mybatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于写基本List查询;
    • 内置性能分析插件:可输出Sql语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询;
    • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作;
    • 。。。。。。

    SpringBoot引入:

    1. <dependency>
    2. <groupId>mysqlgroupId>
    3. <artifactId>mysql-connector-javaartifactId>
    4. <version>5.1.47version>
    5. dependency>
    6. <dependency>
    7. <groupId>com.alibabagroupId>
    8. <artifactId>druidartifactId>
    9. <version>1.0.11version>
    10. dependency>
    11. <dependency>
    12. <groupId>com.baomidougroupId>
    13. <artifactId>mybatis-plus-boot-starterartifactId>
    14. <version>3.1.0version>
    15. dependency>

    application.yml配置:

    1. # mybatis-plus相关配置
    2. mybatis-plus:
    3.   # xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)
    4.   mapper-locations: classpath:mapper/*.xml
    5.   # 以下配置均有默认值,可以不设置
    6.   global-config:
    7.     db-config:
    8.       #主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
    9.       id-type: auto
    10.       #字段策略 IGNORED:"忽略判断"  NOT_NULL:"非 NULL 判断")  NOT_EMPTY:"非空判断"
    11.       field-strategy: NOT_EMPTY
    12.       #数据库类型
    13.       db-type: MYSQL
    14.   configuration:
    15.     # 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
    16.     map-underscore-to-camel-case: true
    17.     # 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
    18.     call-setters-on-nulls: true
    19.     # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
    20.     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

    2 快速使用

    配置信息如下:

    数据库信息如下:

     设置实体类:

    1. @Data
    2. @TableName("user") // 表名
    3. public class UserEntity {
    4. @TableId(type = IdType.AUTO)
    5. private Integer id;
    6. private String name;
    7. private String password;
    8. private Integer rank;
    9. private Integer status;
    10. }

    注解详细解释可以参考:注解 | MyBatis-Plus

    创建Mapper接口:

    1. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    2. import com.lmlsj.springbootdemo.entity.UserEntity;
    3. import org.springframework.stereotype.Repository;
    4. @Repository
    5. public interface UserMapper extends BaseMapper {
    6. }

    创建service:

     

    创建control层:

    1. package com.lmlsj.springbootdemo.control;
    2. import com.lmlsj.springbootdemo.Util.ResultVo.NotControllerResponseAdvice;
    3. import com.lmlsj.springbootdemo.entity.UserEntity;
    4. import com.lmlsj.springbootdemo.service.impl.UserServiceImpl;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.web.bind.annotation.GetMapping;
    7. import org.springframework.web.bind.annotation.RequestMapping;
    8. import org.springframework.web.bind.annotation.RequestParam;
    9. import org.springframework.web.bind.annotation.RestController;
    10. import java.util.List;
    11. @RestController
    12. @RequestMapping("/user")
    13. public class UserControl {
    14. @Autowired
    15. private UserServiceImpl userService;
    16. @GetMapping("/findbyid")
    17. @NotControllerResponseAdvice
    18. public UserEntity FindUserByID(@RequestParam("id") int id){
    19. return userService.GetUserInfoById(id);
    20. }
    21. @GetMapping("/list")
    22. public List ListUser(){
    23. List userList = userService.list();
    24. return userList;
    25. }
    26. }

    实现效果:

     list接口实现效果:

     

     可以看到一些基本的增删改查操作都已经进行了封装,无需再单独写SQL语句。

    3 查询详解

    前面案例介绍了两个接口,分别是Service CRUD 接口和Mapper CRUD 接口。

    Service CRUD 接口支持的查询方式有:

    save、saveOrUpdate、remove、update、get、list、page、count、chain

    Mapper CRUD 接口支持的查询方式有:

    insert、delete、update、select

    具体介绍可以参考:CRUD 接口 | MyBatis-Plus

    其次可以使用条件构造器进行查询:

    AbstractWrapper是QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件。

    1. @GetMapping("/query1")
    2. public ResultVo Query1(){
    3. QueryWrapper query = new QueryWrapper<>();
    4. query.select("id","name","rank");
    5. List userlist = userService.list(query);
    6. userlist.forEach(user -> {
    7. System.out.println(user.getName() + user.getRank());
    8. });
    9. //Lamda查询方式
    10. QueryWrapper query2 = new QueryWrapper<>();
    11. query2.lambda().eq(UserEntity::getName,"lmslj");
    12. List userlist2 = userService.list(query2);
    13. userlist2.forEach(user -> {
    14. System.out.println(user.getName() + user.getPassword());
    15. });
    16. return new ResultVo("前往console查看");
    17. }

    查看结果:

    可以根据需要构造其他查询条件:

    query2.like("name","l");

    query2.between("rank",0,2);

    条件构造器参考:条件构造器 | MyBatis-Plus 

    四 插件

    目前已经支持较丰富的插件,使用可以参考:插件主体 | MyBatis-Plus

  • 相关阅读:
    软件测试基础——概念篇
    在stable diffusion中如何分辨lora、大模型、controlnet
    FOC直流无刷电机控制算法 理论到实践 —— 理论(一)
    Linux的FTP服务
    解决electron设置透明背景后,引入element-plus样式问题
    英语一和英语二难度差多少?英语二翻译更长为什么说其实更容易?
    C++入门(2)—函数重载、引用
    c# 异步进阶————channel [一]
    泛型内容总结
    短视频矩阵系统,短视频矩阵源码技术开发
  • 原文地址:https://blog.csdn.net/xlsj228/article/details/133614840