Mybatis/Mybatis-Plus基础(三)

简介: Mybatis/Mybatis-Plus基础

2:分页功能

如果需要使用Mybatis的分页功能,那么需要开启Mybatis-Plus的分页功能拦截器.并加上@Configuration注解使得启动类能加载到他.

开启拦截器之后使用MybatisPlus内置的分页接口即可

同时如果想看到MybatisPlus的运行语句,那么需要开启日志

3:DQL编程控制

条件查询

可以发现BaseMapper接口中有着大量的方法,这些方法的参数为Wrapper,而这对象代表着对数据库查询时所携带的查询条件.

查询投影

查询投影即表示查询那些信息,即选择需要查看的字段

同时如果遇到不好使用这种方法来查询的,可以直接在对应的dao接口中用mybatis的注解的方式来解决

各种查询条件

1:等值匹配

@Test
    public void eq(){
        LambdaQueryWrapper<Book>lqw=new LambdaQueryWrapper<>();
        lqw.eq(Book::getName,"helo").eq(Book::getType,"sad");
        System.out.println(bookDao.selectList(lqw));
    }

2:范围查询

@Test
    public void between(){
        LambdaQueryWrapper<Book>lqw=new LambdaQueryWrapper<>();
        lqw.between(Book::getNumber,10,50);
        System.out.println(bookDao.selectList(lqw));
    }

3:模糊匹配

@Test
    public void like(){
        LambdaQueryWrapper<Book>lqw=new LambdaQueryWrapper<>();
        lqw.like(Book::getName,"e");
       //其中likeLeft/likeRight会使用左/右百分号
        System.out.println(bookDao.selectList(lqw));
    }

更多其他可以进行的查询条件可以搜索

6.条件查询介绍

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

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

       QueryWrapper : 查询条件封装

       UpdateWrapper : Update 条件封装

   AbstractLambdaWrapper : 使用Lambda 语法

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

       LambdaUpdateWrapper : Lambda 更新封装Wrapper

@SpringBootTest
publicclassQueryWrapperTests {
@Autowired
privateUserMapperuserMapper;
}

2、测试用例

2.1 ge、gt、le、lt、isNull、isNotNull

@Test
public void testQuery() {
QueryWrapperqueryWrapper = newQueryWrapper<>();
queryWrapper
.isNull(“name”)
.ge(“age”, 12)
.isNotNull(“email”);
int result = userMapper.delete(queryWrapper);
System.out.println("delete return count = " + result);
}

2.2 eq、ne

注意:seletOne()返回的是一条实体记录,当出现多条时会报错

@Test
public void testSelectOne() {
QueryWrapperqueryWrapper = newQueryWrapper<>();
queryWrapper.eq(“name”, “Tom”);
Useruser = userMapper.selectOne(queryWrapper);//只能返回一条记录,多余一条则抛出异常
System.out.println(user);
}

2.3 between、notBetween

包含大小边界

@Test
public void testSelectCount() {
QueryWrapperqueryWrapper = newQueryWrapper<>();
queryWrapper.between(“age”, 20, 30);
Integer count = userMapper.selectCount(queryWrapper); //返回数据数量
System.out.println(count);
}
2.4 like、notLike、likeLeft、likeRight
selectMaps()返回Map集合列表,通常配合select()使用
@Test
public void testSelectMaps() {
QueryWrapperqueryWrapper = newQueryWrapper<>();
queryWrapper
.select(“name”, “age”)
.like(“name”, “e”)
.likeRight(“email”, “5”);
List<Map<String, Object>>maps = userMapper.selectMaps(queryWrapper);//返回值是Map列表
maps.forEach(System.out::println);
}
2.5 orderBy、orderByDesc、orderByAsc
@Test
public void testSelectListOrderBy() {
QueryWrapperqueryWrapper = newQueryWrapper<>();
queryWrapper.orderByDesc(“age”, “id”);
Listusers = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}

1、查询方式

查询方式 说明

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

notLike 模糊查询 NOT 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”)

mybatisplus

多表联查

MybatisPlus只是在原有Mybatis的基础上增强了单表查询的功能,因此如果需要多表查询,那么依旧需要编写配置文件

mybatisplus默认的mapper配置文件的路径在类路径下的mapper目录中的所有xml文件

4:DML编程控制

id生成策略

NONE表示不启用,也就是默认值,表示按照MybatisPlus默认的id生成策略

AUTO表示使用自增

INPUT表示要求必须手动传递一个id过去

ASSING_ID表示使用雪花算法得到一个ID,对应实体类必须使用Long类型,数据库字段需要使用binary或者varchar来接受

也可以用配置文件来统一配置实体类中的id属性的注解属性

多记录操作

提供多数据的id即可

@Test
    public void deleteBatch(){
        List<Long>list= Arrays.asList(2L,3L,4L);
        bookDao.selectBatchIds(list);
        bookDao.deleteBatchIds(list);
    }

逻辑删除

乐观锁

首先需要在数据库表中添加一个字段用于表示乐观锁操作的字段.

之后就可以在对应的实体类中添加属性来对应到数据库中的字段

为了开启乐观锁的效果,需要配置乐观锁的拦截器

之后如果想要修改version这个字段,那么首先我们得先保证得到version这个属性,否则乐观锁不会启动

乐观锁实现

用户1进来后修改数据为它的部分之后,version的值就已经改变了,当用户2进来操作后,它拿到的还是原先的version值,因此它的判断条件会失败,因此无法成功再次修改数据,因此用户1成功得到这个数据.

相关文章
|
1月前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
119 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
2月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
3月前
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
|
4月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
89 3
|
4月前
|
Java 数据库连接 Maven
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
|
5月前
|
Java 数据库连接 mybatis
在Spring Boot应用中集成MyBatis与MyBatis-Plus
在Spring Boot应用中集成MyBatis与MyBatis-Plus
122 5
|
5月前
|
Java 关系型数据库 MySQL
3.MyBatis和SpringBoot整合及MyBatis-plus与SpringBoot整合
3.MyBatis和SpringBoot整合及MyBatis-plus与SpringBoot整合
44 0
|
6月前
|
SQL Java 数据库连接
Mybatis技术专题(3)MybatisPlus自带强大功能之多租户插件实现原理和实战分析
Mybatis技术专题(3)MybatisPlus自带强大功能之多租户插件实现原理和实战分析
389 1
|
6月前
|
Java 数据库连接 mybatis
shardingsphere集成mybatis/mybatis-plus快速实现简单分片
shardingsphere集成mybatis/mybatis-plus快速实现简单分片
174 0
|
6月前
|
SQL Java 数据库连接
mybatis plus :mybatis简化了jdbc,mybatisplus简化了mybatis
mybatis plus :mybatis简化了jdbc,mybatisplus简化了mybatis
139 0