MyBatisPlus

MyBatisPlus

MyBatisPlus简介

入门案例

1、创建项目导入MyBatisPlus起步依赖

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

2、配置数据库信息

spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/spring_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false username: root password: 123456789

3、创建domain类

public class Book { private long id; private String type; private String name; private String description; public long getId() {return id;} public void setId(long id) {this.id = id;} public String getType() {return type;} public void setType(String type) {this.type = type;} public String getName() {return name;} public void setName(String name) {this.name = name;} public String getDescription() {return description;} public void setDescription(String description) {this.description = description;} @Override public String toString() { return "TblBook{" + "id=" + id + ", type='" + type + '\'' + ", name='" + name + '\'' + ", description='" + description + '\'' + '}'; } }

4、创建一个Dao接口继承BaseMapper类

@Mapper public interface BookDao extends BaseMapper<Book> { }

数据层标准开发

标准数据层功能

Lombok

一个Java类库,提供了一组注解,简化POJO实体类开发。

Lombok依赖

<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>

常见注解

@Setter:为模型类的属性提供setter方法

@Getter:为模型类的属性提供getter方法

@ToString:为模型类的属性提供toString方法

@EqualsAndHashCode:为模型类的属性提供equals和hashcode方法

@Data:是个组合注解,包含上面的注解的功能

@NoArgsConstructor:提供一个无参构造函数

@AllArgsConstructor:提供一个包含所有参数的构造函数

分页功能

使用方法

IPage<T> selectPage(IPage<T> page, Wrapper<T> queryWrapper) //IPage:用来构建分页查询条件 //Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null //IPage:返回值,你会发现构建分页条件和方法的返回值都是IPage

分页功能的使用需要配置拦截器

@Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ //1 创建MybatisPlusInterceptor拦截器对象 MybatisPlusInterceptor mpInterceptor=new MybatisPlusInterceptor(); //2 添加分页拦截器 mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return mpInterceptor; } }

查询操作

条件查询

MyBatisPlus提供了一个Wrapper类,这个类就是用来构建查询条件的

Wrapper类是一个抽象类,需要使用其实现类

QueryWrapper类

@Test void testGetAll(){ QueryWrapper qw = new QueryWrapper(); //查询年龄小于18 qw.lt("age",18); List<User> userList = userDao.selectList(qw); System.out.println(userList); }

LambdaQueryWrapper类

QueryWrapper类使用时需要输入属性名称,容易出错,可以使用lambda表达式解决

@Test void testGetAll(){ LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); //查询年龄小于18 lqw.lt(User::getAge, 18); List<User> userList = userDao.selectList(lqw); System.out.println(userList); }

多条件查询

Wrapper对象连续输入条件

@Test void testGetAll(){ LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); //年龄小于30 lqw.lt(User::getAge, 30); //年龄大于10 lqw.gt(User::getAge, 10); List<User> userList = userDao.selectList(lqw); System.out.println(userList); }

构建多条件的时候,也可以支持链式编程

@Test void testGetAll(){ LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); //年龄大于10且小于30 lqw.lt(User::getAge, 10).or().gt(User::getAge, 30); List<User> userList = userDao.selectList(lqw); System.out.println(userList); }

or()就相当于我们sql语句中的or关键字,不加默认是and

@Test void testGetAll(){ LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); //年龄小于10或大于30 lqw.lt(User::getAge, 10).or().gt(User::getAge, 30); List<User> userList = userDao.selectList(lqw); System.out.println(userList); }

条件函数的第一个参数可以true或false来设定条件是否启用,常用在非空判定

@Test void testGetAll(){ User user = new User(); user.setAge(20); LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); //年龄小于10,如果年龄为空则不判断 lqw.lt((null!=user.getAge(),User::getAge, 10) List<User> userList = userDao.selectList(lqw); System.out.println(userList); }

查询投影

通过select函数设置要查询的字段

@Test void testGetAll(){ LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); //指定要查询到的字段 lqw.select(User::getId,User::getName,User::getAge); List<User> userList = userDao.selectList(lqw); System.out.println(userList); }

模糊查询

使用like进行模糊查询

@Test void testGetAll(){ LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); //查询以“J”开头的用户 lqw.likeLeft(User::getName, "J"); List<User> userList = userDao.selectList(lqw); System.out.println(userList); }

like():前后加百分号,如 %J%

likeLeft():前面加百分号,如 %J

likeRight():后面加百分号,如 J%

排序

使用orderBy方法

@Test void testGetAll(){ LambdaQueryWrapper<User> lwq = new LambdaQueryWrapper<>(); /** * condition :条件,返回boolean, *当condition为true,进行排序,如果为false,则不排序 * isAsc:是否为升序,true为升序,false为降序 * columns:需要操作的列 */ lwq.orderBy(true,false, User::getId); userDao.selectList(lw }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值