• mybatis-plus 使用技巧(一)


     下面是基本的环境 
    1.数据库有一张表 (我先当mybatis设计表)
    2.控制层,持久层,服务层 ,配置类准备好
    如下
    配置类: 插件可以不配置,看需求

    1. /**
    2. * @author Royalreairman
    3. * @create 2022-08-06 20:30
    4. */
    5. @Configuration
    6. @MapperScan("com.example.mybatis.plus.mapper")
    7. public class MpConfig {
    8. //乐观锁插件
    9. @Bean
    10. public OptimisticLockerInterceptor optimisticLockerInterceptor() {
    11. return new OptimisticLockerInterceptor();
    12. }
    13. //分页插件
    14. @Bean
    15. public PaginationInterceptor paginationInterceptor() {
    16. return new PaginationInterceptor();
    17. }
    18. //逻辑删除
    19. @Bean
    20. public ISqlInjector sqlInjector() {
    21. return new LogicSqlInjector();
    22. }
    23. /**
    24. * sql执行性能分析插件
    25. * 三种环境
    26. * *dev:开发环境
    27. * *test:测试环境
    28. * *prod:生产环境
    29. * @return
    30. */
    31. @Bean
    32. @Profile({"dev", "test"})// 设置 dev test 环境开启
    33. public PerformanceInterceptor performanceInterceptor() {
    34. PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
    35. performanceInterceptor.setMaxTime(500);//ms,超过此处设置的ms则sql不执行
    36. performanceInterceptor.setFormat(true);
    37. return performanceInterceptor;
    38. }
    39. }

    控制层不需要,所以没有 ,业务逻辑层也没有,我们不需要 

    mapper层

    1. @Repository
    2. public interface UserMapper extends BaseMapper {
    3. }

     实体类

    1. package com.example.mybatis.plus.entity;
    2. import com.baomidou.mybatisplus.annotation.*;
    3. import lombok.Data;
    4. import java.util.Date;
    5. @Data
    6. public class User {
    7. @TableId(type = IdType.ID_WORKER)//mybatis plus自带的策略
    8. private Long id;
    9. private String name;
    10. private Integer age;
    11. private String email;
    12. }

    表设计

     是不是感觉现在可以开始学习了,弄一个测试看一下

    点运行会发生什么呢?直接报错
     

    简单说就是我不认识你这些东西,这么解决了加mybatis-plus必备的字段

     下面是建表语句,实体类也要改我这里就不展示了

    1. CREATE TABLE `user` (
    2. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
    3. `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '名字',
    4. `age` int(11) DEFAULT NULL COMMENT '年龄',
    5. `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '100' COMMENT '邮箱',
    6. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
    7. `create_by` bigint(20) DEFAULT NULL COMMENT '创建人',
    8. `modify_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',
    9. `modify_by` bigint(20) DEFAULT NULL COMMENT '更新人',
    10. `ip_str` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '修改ip',
    11. `is_del` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除(0:未删除 1:已删除)',
    12. `check_time` timestamp NULL DEFAULT NULL COMMENT '审核时间精确到秒',
    13. PRIMARY KEY (`id`)
    14. ) ENGINE=InnoDB AUTO_INCREMENT=123 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

     我们再测试一下

     

     现在应该是空的,现在开始正是的学习

    1.新增 ,添加类

     1-1 insert

    1. @Test
    2. public void add(){
    3. User user = new User();
    4. user.setName("张三");
    5. user.setAge(13);
    6. user.setEmail("1234@.com");
    7. userMapper.insert(user);
    8. }

    对应的SQL

    1. INSERT
    2. INTO
    3. user
    4. ( name, age, email )
    5. VALUES
    6. ( '张三', 13, '1234@.com' )

    2.查询

    通过id查询

    1. @Test
    2. public void addList(){
    3. userMapper.selectById(123);
    4. }

     对应的SQL

    1. SELECT
    2. id,
    3. name,
    4. age,
    5. email,
    6. create_time,
    7. create_by,
    8. modify_time,
    9. modify_by,
    10. ip_str,
    11. is_del,
    12. check_time
    13. FROM
    14. user
    15. WHERE
    16. id=123

    通过多个id查询

    1. @Test
    2. public void addList(){
    3. userMapper.selectBatchIds(Arrays.asList(123,124));
    4. }

     对应的SQL
     

    1. SELECT
    2. id,
    3. name,
    4. age,
    5. email,
    6. create_time,
    7. create_by,
    8. modify_time,
    9. modify_by,
    10. ip_str,
    11. is_del,
    12. check_time
    13. FROM
    14. user
    15. WHERE
    16. id IN (
    17. 123 , 124
    18. )

     3.利用条件构造器查询年龄等于13的
     

    1. @Test
    2. public void selectList(){
    3. List users = userMapper.selectList(new LambdaQueryWrapper()
    4. .eq(User::getAge, 13));
    5. }

    对应的SQL

    1. SELECT
    2. id,
    3. name,
    4. age,
    5. email,
    6. create_time,
    7. create_by,
    8. modify_time,
    9. modify_by,
    10. ip_str,
    11. is_del,
    12. check_time
    13. FROM
    14. user
    15. WHERE
    16. age = 13

    4.map查询((有了条件构造器很少用,我一般不用)

    1. @Test
    2. public void test() {
    3. Map map = new HashMap();
    4. map.put("age","13");
    5. userMapper.selectByMap(map);
    6. }

    注意这种key是字段名 后面是你查的数据 ,对应的SQL

    1. SELECT
    2. id,
    3. name,
    4. age,
    5. email,
    6. create_time,
    7. create_by,
    8. modify_time,
    9. modify_by,
    10. ip_str,
    11. is_del,
    12. check_time
    13. FROM
    14. user
    15. WHERE
    16. age = '13'

    5.查询数量求和

    1. @Test
    2. public void test() {
    3. userMapper.selectCount(new LambdaQueryWrapper()
    4. .eq(User::getAge,13));
    5. }

    对应的SQL

    1. SELECT
    2. COUNT(1)
    3. FROM
    4. user
    5. WHERE
    6. age = 13

    6.查询单条语句,只能查出一条 

    1. @Test
    2. public void test() {
    3. userMapper.selectOne(new LambdaQueryWrapper()
    4. .eq(User::getId,123));
    5. }

    对应的SQL

    1. SELECT
    2. id,
    3. name,
    4. age,
    5. email,
    6. create_time,
    7. create_by,
    8. modify_time,
    9. modify_by,
    10. ip_str,
    11. is_del,
    12. check_time
    13. FROM
    14. user
    15. WHERE
    16. id = 123

    7.分页查询(真实开发中,直接用他带的很少,都是自己写sql,比如:姓名-电话 

    1. @Test
    2. public void test() {
    3. //0是当前页,10是每页显示的页数 ,
    4. Page page = new Page<>(0, 10);
    5. userMapper.selectPage(page,new LambdaQueryWrapper()
    6. .eq(User::getAge,13));
    7. }

    对应的SQL

    1. SELECT
    2. id,
    3. name,
    4. age,
    5. email,
    6. create_time,
    7. create_by,
    8. modify_time,
    9. modify_by,
    10. ip_str,
    11. is_del,
    12. check_time
    13. FROM
    14. user
    15. WHERE
    16. age = 13 LIMIT 0,10

    3.删除

    在测试删除的时候建议大家,多弄几条数据
    1.条件删除

    1. @Test
    2. public void test() {
    3. int delete = userMapper.delete(new LambdaQueryWrapper()
    4. .eq(User::getId,123));
    5. }

    对应的SQL

    1. DELETE
    2. FROM
    3. user
    4. WHERE
    5. id = 123

    2.通过id删除
     

    1. @Test
    2. public void test() {
    3. //124L
    4. userMapper.deleteById(124l);
    5. }

    对应的SQL

    1. DELETE
    2. FROM
    3. user
    4. WHERE
    5. id=124

    3.通过多个id删除

    1. @Test
    2. public void test() {
    3. int i = userMapper.deleteBatchIds(Arrays.asList(125, 126));
    4. }

    对应的sql

    1. DELETE
    2. FROM
    3. user
    4. WHERE
    5. id IN (
    6. 125 , 126
    7. )

    4.map删除(有了构造器很少用)

    1. @Test
    2. public void test() {
    3. HashMap map = new HashMap<>();
    4. map.put("id",128);
    5. int i = userMapper.deleteByMap(map);
    6. }

    对应的SQL

    1. DELETE
    2. FROM
    3. user
    4. WHERE
    5. id = 128

    4.修改

    1.通过id

    修改

    通过id修改 至少需要两个字段 1是id ,二是需要修改的字段

    1. @Test
    2. public void test() {
    3. User user = new User();
    4. user.setId(127L);
    5. user.setName("李四");
    6. userMapper.updateById(user);
    7. }

    对应的SQL

    1. UPDATE
    2. user
    3. SET
    4. name='李四'
    5. WHERE
    6. id=127

    2.条件修改 

    1. @Test
    2. public void test() {
    3. User user = new User();
    4. user.setName("李四");
    5. userMapper.update(user,new LambdaQueryWrapper()
    6. .eq(User::getAge,13));
    7. }

    对应的SQL

    1. UPDATE
    2. user
    3. SET
    4. name='李四'
    5. WHERE
    6. age = 13

    最基本的功能我这里就说完了,剩下的后面的文章会说明 了
     

  • 相关阅读:
    Java Boolean类,Java Character类,Java Number类
    JavaEE基础知识
    【Prometheus】Prometheus+Grafana部署
    EasyRecovery2023互盾免费数据恢复软件下载功能介绍
    Java处理数据成为树状结构
    商品标题 内容 向量特征提取
    c# iot .net6 树莓派+RS485工业级光照度传感器 代码实例
    Tomcat部署项目出现404
    python-pandapower电力系统潮流计算无法收敛情况解决方法
    二叉树层级遍历(深度优先、广度优先算法)
  • 原文地址:https://blog.csdn.net/qq_42847719/article/details/127270116