入门案例
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方可正常运行