SSM(MybatisPlus)

入门案例

MybatisPlus(mp)是基于Mybatis框架基础上开发的增强型工具

1、创建新模块,选择spring初始化,并配置模块相关基础信息

2、选择myspl driver依赖

3、手动添加mp依赖

xml 复制代码
<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
        </dependency>

4、设置jdbc参数(application.yml)

5、制作实体类与表结构(类名与表名对应,属性名与字段对应)

如果不对应使用@TableName()绑定

java 复制代码
@TableName("tbl_book")
public class Book {}

6、定义数据接口,继承BaseMapper

java 复制代码
@Mapper
public interface BookDao extends BaseMapper<Book> {
}

分页查询实现

1、设置分页拦截器作为Spring管理的bean

java 复制代码
    @Bean
    public MybatisPlusInterceptor pageInterceptor(){
        MybatisPlusInterceptor pageInterceptor =new MybatisPlusInterceptor();
        pageInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return pageInterceptor;
    }

2、封装数据的对象:IPage

java 复制代码
  @Test
    public void testPage(){
        IPage page=new Page(1,3);
        bookDao.selectPage(page, null);
        System.out.println(page.getRecords());
    }

DQL编程控制

查询

条件查询-设置查询条件

格式一:常规格式

java 复制代码
QueryWrapper qw=new QueryWrapper();
        qw.lt("id",3);
        qw.ge("id",1);
        List<Book> list=bookDao.selectList(qw);
        System.out.println(list);

格式二:链式编程格式

java 复制代码
QueryWrapper<Book> qw=new QueryWrapper();
        qw.lt("id",3).ge("id",1);
        List<Book> list=bookDao.selectList(qw);
        System.out.println(list);

格式三:lambda格式(推荐)

java 复制代码
        QueryWrapper<Book> qw=new QueryWrapper();
        qw.lambda().lt(Book::getId,3).ge(Book::getId,1);
        List<Book> list=bookDao.selectList(qw);
        System.out.println(list);

格式四:lambda格式(推荐)

java 复制代码
        LambdaQueryWrapper<Book> qw=new LambdaQueryWrapper();
        qw.lt(Book::getId,3).ge(Book::getId,1);
        List<Book> list=bookDao.selectList(qw);
        System.out.println(list);

条件查询-组合查询条件

and:直接连着写

or:条件之间加 .or()

条件查询-null值处理

条件参数控制

java 复制代码
 //模拟前端的数据
        Book book=new Book();
        book.setId(3);
        
        
        LambdaQueryWrapper<Book> qw=new LambdaQueryWrapper();
        qw.lt(book.getId()!=null,Book::getId,3).ge(Book::getId,1);
        List<Book> list=bookDao.selectList(qw);
        System.out.println(list);

查询投影:

查询结果包含模型类中部分属性

java 复制代码
       LambdaQueryWrapper<Book> qw=new LambdaQueryWrapper();
        qw.select(Book::getId,Book::getName);
        List<Book> list=bookDao.selectList(qw);
        System.out.println(list);

查询结果包含模型中未定义的属性

java 复制代码
QueryWrapper<Book> qw=new QueryWrapper();
        qw.select("count(*) as count");
        List<Map<String, Object>> list=bookDao.selectMaps(qw);
        System.out.println(list);

感觉就是用java代码写SQL,条件有很多,需要了去查文档

字段映射与表映射

@TableField

位于类属性上方

相关属性:

value:设置数据库字段名称

exist:设置属性在数据库表中是否存在(默认true)

select:设置属性是否参与查询

@TableName

位于类上

绑定数据库表

增删改

id生成策略控制:

AUTO(0):使用数据库id自增策略控制id生成

NONE(1):不设置id生成策略

INPUT(2):用户手工输入id

ASSIGN_ID(3):雪花算法生成id(可兼容数值型与字符串型)

ASSIGN_UUID(4):以UUID生成算法作为id生成策略

如果有些东西多处要用到,可以在yml配置文件中,设置全局配置(具体看文档)

逻辑删除

1、数据库表中添加逻辑删除标记字段(deleted)

2、实体类中添加对应字段,并设定当前字段为逻辑删除标记字段(@TableLogic)

另一个方法:

配置逻辑删除字面值(yml)

注意:一但启用删除是更新标记字段、查询只会查到没被删除字段

乐观锁

1、数据库表中添加锁标记字段

2、实体类中添加对应字段,并设定当前字段为乐观锁字段(@Version)

3、配置乐观锁拦截器实现锁机制对应的动态SQL语句拼装

java 复制代码
pageInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());

4、使用乐观锁机制在修改前必须先获取对应数据的version方可正常运行

相关推荐
多米Domi0119 分钟前
0x3f 第48天 面向实习的八股背诵第五天 + 堆一题 背了JUC的题,java.util.Concurrency
开发语言·数据结构·python·算法·leetcode·面试
2301_822377659 分钟前
模板元编程调试方法
开发语言·c++·算法
csbysj202013 分钟前
Python 循环嵌套
开发语言
测试_AI_一辰15 分钟前
Agent & RAG 测试工程05:把 RAG 的检索过程跑清楚:chunk 是什么、怎么来的、怎么被命中的
开发语言·人工智能·功能测试·自动化·ai编程
Coding茶水间18 分钟前
基于深度学习的输电电力设备检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
开发语言·人工智能·深度学习·yolo·目标检测·机器学习
清风~徐~来22 分钟前
【视频点播系统】BRpc 介绍及使用
开发语言
啟明起鸣23 分钟前
【C++ 性能提升技巧】C++ 的引用、值类型、构造函数、移动语义与 noexcept 特性,可扩容的容器
开发语言·c++
故以往之不谏25 分钟前
函数--值传递
开发语言·数据结构·c++·算法·学习方法
今天_也很困34 分钟前
LeetCode热题100-560. 和为 K 的子数组
java·算法·leetcode