100.【MybaisPlus】(三)

简介: 100.【MybaisPlus】
  1. 注册乐观锁组件在config包下创建MybatisPlusConfig类

如果在mapper接口类中添加了注解@Mapper 可以省略这个类中的@MapperScan("com.jsxs.mapper"),@EnableTransactionManagement

package com.jsxs.config;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement   //可省略
@MapperScan("com.jsxs.mapper")  //可省略
@Configuration
public class MyBatisPlusConfig {
    // 注册乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}
  1. 测试一下乐观锁成功案列
//  乐观锁成功
    @Test
    public void testOptimisticLockerInterceptor(){
        //  1.查询用户信息
        user user = userMapper.selectById(1L);
        // 2. 修改用户信息
        user.setName("sdsd");
        user.setEmail("45455@qq.com");
        // 3.执行更新操作
        int i = userMapper.updateById(user);
        System.out.println(i);
    }

5. 测试乐观锁(失败案列->多线程)

// 乐观锁失败->(多线程。线程2抢先线程1)
    @Test
    public void testOptimisticLockerInterceptor2(){
        /**
         * 线程1
         */
        //  1.查询用户信息
        user user = userMapper.selectById(1L);
        // 2. 修改用户信息
        user.setName("sdsd111");
        user.setEmail("45455@qq.com");
        /**
         * 线程2
         */
        user user2 = userMapper.selectById(1L);
        // 2. 修改用户信息
        user.setName("sdsd222");
        user.setEmail("45455@qq.com");
        // 3.抢先执行更新操作user2
        int i = userMapper.updateById(user2);
        // 3.执行更新操作user1
        int count = userMapper.updateById(user);
        System.out.println(i+" "+count);  //如果没有乐观锁那么就会覆盖->即后面执行user的会覆盖前面的user2
    }

7.查询操作💲

查询全部、通过id、批量查询、多条件查询

// 测试查询通过id
    @Test
    public void testSelectById(){
        user user = userMapper.selectById(1L);
        System.out.println("查询单个用户->"+user);
    }
    // 测试查询批量
    @Test
    public void testSelectBatchIds(){
        List<com.jsxs.pojo.user> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
        // 利用语法糖遍历链表
        users.forEach(System.out::println);
    }
    @Test
    // 测试条件查询
    public void testSelectByMap(){
        HashMap<String, Object> map = new HashMap<>();
        // 自定义查询
        map.put("name","李明先生");
        List<user> users = userMapper.selectByMap(map);
        // 利用语法糖遍历链表
        users.forEach(System.out::println);
    }

8.分页查询

分页在网站使用的十分之多!

  1. 原始的limit进行分页。
  2. pageHelper进行分页。
  3. MP其实也内置了分页插件。

如何使用MybatisPlus的分页插件

  1. 配置拦截器组件即可
package com.jsxs.config;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement
@Configuration
public class MyBatisPlusConfig {
    // 注册乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
    //  分页插件
    @Bean
    public PaginationInterceptor paginationinterceptor(){
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        return paginationInterceptor;
    }
}
  1. 进行测试

首页=(n-1)*页面距离

// 测试分页查询
    @Test
    public void testPage(){
        // 参数一: 当前页。参数二: 页面大小.
        Page<user> page = new Page<>(0,5);
        IPage<user> userIPage = userMapper.selectPage(page, null);
        page.getRecords().forEach(System.out::println);
        //查看总条目
        System.out.println(page.getTotal());
        //查看当前页面
        System.out.println(page.getCurrent());
        //查看总页数
        System.out.println(page.getPages());
        //产看一页几条
        System.out.println(page.getSize());
    }

9.删除操作

删除全部、通过id、批量删除、多条件删除

// 删除操作通过id
    @Test
    public void testDeleteByID(){
        int i = userMapper.deleteById(7L);
        System.out.println(i);
    }

10.逻辑删除

物理删除:从数据库中直接移除

逻辑删除: 在数据库中没有被移除,而是通过一个变量来让他失效! deleted=0=>deleted=1

管理员可以查看被删除的记录! 防止数据的丢失,类似于回收站。

  1. 在数据表中增加一个deleted字段

  2. 实体类中添加这个属性。
package com.jsxs.pojo;
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class user {
    // bigint->Long
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    // int->Integer
    private Integer age;
    private String email;
    @Version  // 乐观锁注解
    private Integer version;
    @TableLogic  //逻辑删除注解
    private Integer deleted;
    @TableField(fill = FieldFill.INSERT)  // 这个意思就是插入的操作,当我们插入的时候会帮助我们自动更新时间
    private Date gmtCreate;
    @TableField(fill = FieldFill.INSERT_UPDATE)  //这个意思就是更新的操作,当我们插入然后更新就会自动更新时间
    private Date gmtUpdate;
}
  1. 去config进行配置
package com.jsxs.config;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
public class MyBatisPlusConfig {
    // 注册乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
    //  分页插件
    @Bean
    public PaginationInterceptor paginationinterceptor(){
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        return paginationInterceptor;
    }
    // 逻辑删除组件
    @Bean
    public ISqlInjector sqlInjector(){
        return new LogicSqlInjector();
    }
}
  1. 配置application.xml
mybatis-plus:
    global-config:
        db-config:
            logic-delete-value: 1 # 逻辑已删除值(默认为 1)
            logic-not-delete-value: 0 # 逻辑未删除值(默认为 0
  1. 开始测试:
// 删除操作通过id
    @Test
    public void testDeleteByID(){
        int i = userMapper.deleteById(7L);
        System.out.println(i);
    }

记录依旧在数据库,只不过改变了deleted.

6.

查询一哈,我们发现会自动过滤掉不等于0的deleted信息。

以上的CRUD操作及其扩展,我们都必须精通掌握!会大大提高我们的工作和写项目的效率。




相关文章
|
2天前
|
云安全 人工智能
2025,阿里云安全的“年度报告”
拥抱AI时代,阿里云安全为你护航~
1437 1
|
9天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1411 10
|
9天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
1315 7
|
10天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
1186 14
|
3天前
|
人工智能 前端开发 API
Google发布50页AI Agent白皮书,老金帮你提炼10个核心要点
老金分享Google最新AI Agent指南:让AI从“动嘴”到“动手”。Agent=大脑(模型)+手(工具)+协调系统,可自主完成任务。通过ReAct模式、多Agent协作与RAG等技术,实现真正自动化。入门推荐LangChain,文末附开源知识库链接。
443 118
|
2天前
|
机器学习/深度学习 测试技术 数据中心
九坤量化开源IQuest-Coder-V1,代码大模型进入“流式”训练时代
2026年首日,九坤创始团队成立的至知创新研究院开源IQuest-Coder-V1系列代码大模型,涵盖7B至40B参数,支持128K上下文与GQA架构,提供Base、Instruct、Thinking及Loop版本。采用创新Code-Flow训练范式,模拟代码演化全过程,提升复杂任务推理能力,在SWE-Bench、LiveCodeBench等基准领先。全阶段checkpoint开放,支持本地部署与微调,助力研究与应用落地。
323 1
|
7天前
|
存储 缓存 NoSQL
阿里云经济型e实例(ecs.e-c1m4.large)2核8G云服务器优惠活动价格及性能测评
阿里云经济型e实例(ecs.e-c1m4.large)2核8G配置,支持按使用流量或按固定带宽两种公网计费方式,搭配20G起ESSD Entry云盘,是主打高性价比的内存优化型入门选择。其核心特点是8G大内存适配轻量内存密集场景,计费模式灵活可控,既能满足个人开发者的复杂测试项目需求,也能支撑小微企业的基础业务运行,无需为闲置资源过度付费。以下从优惠活动价格、性能表现、适用场景及避坑要点四方面,用通俗语言详细解析。
230 153
|
4天前
|
机器学习/深度学习 人工智能 算法
炎鹊「Nexus Agent V1.0」:垂直领域AI应用的原生能力引擎
炎鹊AI「Nexus Agent V1.0」是垂直行业专属AI原生引擎,融合大模型、AIGA决策大脑、行业知识图谱与专属模型,打造“感知-决策-执行”闭环。支持21个行业低代码构建工具型、员工型、决策型AI应用,实现技术到业务价值的高效转化,推动AI从实验走向规模化落地。(239字)
245 1

热门文章

最新文章