0
点赞
收藏
分享

微信扫一扫

Mybatis plus使用

闲嫌咸贤 2022-03-12 阅读 117

导入依赖;

<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>

正常连接数据库:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root

编写mapper接口,并继承baseMapper接口(指定泛型)

@Repository
public interface UserMapper extends BaseMapper<User> {
}

启动类接口包扫描:

Mybatis plus有查看SQL输出日志:在配置文件中配置:

#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

数据插入操作:

指定主键策略:

 自动填充:

需求描述:

项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。

1、在实体类中添加注解,表示自动填充:

@TableField(fill = FieldFill.INSERT)
private Date createTime; //create_time

@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime; //update_time

2、实现元素对象处理接口:

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

//mp执行添加操作,这个方法执行
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
this.setFieldValByName("version",1,metaObject);//新建数据的时候,乐观锁版本值设置为1
}

//mp执行修改操作,这个方法执行
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}

乐观锁:(通过添加一个版本号进行控制,事务版本号一致,可以提交,不一致则放弃提交)

1、数据表添加一个版本的字段,

2、实体类添加相应的属性并在实体类中的属性中添加一个version注解

3、在配置类中注册乐观锁插件

/**
* 乐观锁插件
*/

@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}

查询

通过多个id批量查询

完成了动态sql的foreach的功能

//多个id批量查询
@Test
public void testSelect1() {
List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
System.out.println(users);
}

简单的条件查询

通过map封装查询条件

//简单条件查询
@Test
public void testSelect2() {
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("name","Jack");
columnMap.put("age",20);
List<User> users = userMapper.selectByMap(columnMap);
}

分页查询:

1、分页插件

MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能

在配置类中添加分页插件:

/**
* 分页插件
*/

@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}

编写分页的查询:

Page<User> page = new Page(1,3);
Page<User> userPage = userMapper.selectPage(page, null);
//返回对象得到分页所有数据
long pages = userPage.getPages(); //总页数
long current = userPage.getCurrent(); //当前页
List<User> records = userPage.getRecords(); //查询数据集合
long total = userPage.getTotal(); //总记录数
boolean hasNext = userPage.hasNext(); //下一页
boolean hasPrevious = userPage.hasPrevious(); //上一页

其中提供了类似的分页查询方法,selectMapsPage。

//Page不需要泛型
Page<Map<String, Object>> page = newPage<>(1, 5);
Page<Map<String, Object>> pageParam = userMapper.selectMapsPage(page, null);
List<Map<String, Object>> records = pageParam.getRecords();
records.forEach(System.out::println);
System.out.println(pageParam.getCurrent());
System.out.println(pageParam.getPages());
System.out.println(pageParam.getSize());
System.out.println(pageParam.getTotal());
System.out.println(pageParam.hasNext());
System.out.println(pageParam.hasPrevious());

删除:

deleteById根据ID删除数据
deleteBatchIds根据多个ID批量删除数据
deleteByMap根据map集合条件删除相应数据

逻辑删除:

物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据

逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录

逻辑删除的实现:

在数据表中添加一个表示删除状态的字段:

ALTERTABLE `user` ADD COLUMN `deleted` boolean DEFAULT false

在实体类中添加相应的属性,并加上@TableLogic注解

@TableLogic
private Integer deleted;

application.properties 加入以下配置,此为默认值,如果你的默认值和mp默认的一样,该配置可无

mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

此时,再删除带删除字段的数据,就是逻辑删除,,默认修改状态值,相应的查询数据也是一样,只能查询出未删除的数据,即运行的SQL语句逻辑后面加上where deleted=0

条件构造器和常用接口

wapper介绍

 

Wrapper : 条件构造抽象类,最顶端父类  

    AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件

        QueryWrapper : 查询条件封装

        UpdateWrapper : Update 条件封装

    AbstractLambdaWrapper : 使用Lambda 语法

        LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper

        LambdaUpdateWrapper : Lambda 更新封装Wrapper

其中构造的查询方法有:

查询方式

说明

setSqlSelect

设置 SELECT 查询字段

where

WHERE 语句,拼接 + WHERE 条件

and

AND 语句,拼接 + AND 字段=值

andNew

AND 语句,拼接 + AND (字段=值)

or

OR 语句,拼接 + OR 字段=值

orNew

OR 语句,拼接 + OR (字段=值)

eq

等于=

allEq

基于 map 内容等于=

ne

不等于<>

gt

大于>

ge

大于等于>=

lt

小于<

le

小于等于<=

like

模糊查询 LIKE  等同 LIKE ‘%值%’

notLike

模糊查询 NOT LIKE

likeLeft模糊查询  LIKE ‘%值’
likeRight模糊查询  LIKE ‘值%’

in

IN 查询

notIn

NOT IN 查询

isNull

NULL 值查询

isNotNull

IS NOT NULL

groupBy

分组 GROUP BY

having

HAVING 关键词

orderBy

排序 ORDER BY

orderAsc

ASC 排序 ORDER BY

orderDesc

DESC 排序 ORDER BY

exists

EXISTS 条件语句

notExists

NOT EXISTS 条件语句

between

BETWEEN 条件语句

notBetween

NOT BETWEEN 条件语句

addFilter

自由拼接 SQL

last

拼接在最后,例如:last(“LIMIT 1”)

举报

相关推荐

0 条评论