mybatis-plus笔记
1、快速入门
一、新建springboot工程,添加起步依赖:MySQL起步依赖
二、在pom文件中导入mybatisplus依赖和数据源依赖(druid)
三、添加与数据库对应的实体类和mapper接口,在mapper接口添加@Mapper注释,
mapper接口只需继承BaseMapper接口即可
package com.xiaoliu.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xiaoliu.pojo.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
四、以上完成后即可测试mapper接口
2、测试MybatisPlus分页功能
在UserMapper继承的BaseMapper接口中有selectPage方法,可以用于分页功能
一、书写测试方法测试功能
@Test
//测试分页功能
void testPage(){
//Page的构造方法中第一个参数指当前第几页,第二个参数指每页几条数据
IPage page = new Page(1, 2);
//selectPage第二个参数是条件
userMapper.selectPage(page, null);
System.out.println("一个多少页:" + page.getPages());
System.out.println("当前页码值:" + page.getCurrent());
System.out.println("每页显示数:" + page.getSize());
System.out.println("一共多少条数据:" + page.getTotal());
System.out.println("数据:" + page.getRecords());
}
二、配置拦截器,只有开启mp的拦截器分页功能才能起作用
在config包中配置,注意@Configuration和@Bean注解
package com.xiaoliu.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
//定义MP拦截器
MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
//添加具体的拦截器
mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mpInterceptor;
}
}
3、条件查询
含义:lt(<) le(<=) gt(>) ge(>=) eq(=)
MyBatisPlus将书写复杂的sql查询条件进行了封装,使用编程的形式完成查询条件的组合
@Test
void testSelectAll() {
//方式一:
// QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
// queryWrapper.lt("age", 18);
// List<User> list = userMapper.selectList(queryWrapper);
// System.out.println(list);
//方式二:lambda格式条件查询
// QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
// queryWrapper.lambda().lt(User::getAge,18);
// List<User> list = userMapper.selectList(queryWrapper);
// System.out.println(list);
//方式三:LambdaQueryWrapper类
// LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
// lqw.lt(User::getAge, 18);
// List<User> list = userMapper.selectList(lqw);
// System.out.println(list);
//多条件and
// LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
// //或者合并成lqw.lt(User::getAge, 18).gt(User::getAge, 5); 链式编程
// lqw.lt(User::getAge, 18);
// lqw.gt(User::getAge, 5);
// List<User> list = userMapper.selectList(lqw);
// System.out.println(list);
//多条件or
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
//大于18或者小于5
lqw.gt(User::getAge, 18).or().lt(User::getAge, 5);
List<User> list = userMapper.selectList(lqw);
System.out.println(list);
}
lt方法是小于,第一个参数指定哪个字段,第二个是小于哪个数值
条件查询空值处理:
条件类的lt等方法还有第一个参数(是否将该条件添加到sql,true添加),可以通过第一个参数判断数据是否为空,空时不添加该条件到sql
查询投影
查询投影指设置查询的结果:
@Test
void testSelectAll() {
//设置查询字段
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
//select方法中的东西放在sql的select后(如以下实例为:select age,name from 表)
lqw.select(User::getAge, User::getName);
List<User> list = userMapper.selectList(lqw);
System.out.println(list);
//count统计,由于用到字符串所以用QueryWrapper类,注意查询时使用的是selectMaps方法,
//将查询出来的qw.select("count(*) as count");作为key,userMapper.selectMaps(qw);的结果作为value
QueryWrapper<User> qw = new QueryWrapper<>();
//select方法中的东西放在sql的select后(如以下实例为:select count(*) from ...)
qw.select("count(*) as count");
List<Map<String,Object>> list = userMapper.selectMaps(qw);
System.out.println(list);
}
查询条件
各种查询条件:
一、等号(=)
条件类的eq方法,如:第一个参数是字段,第二个参数是等于的值
二、范围查询between,注意两个值前值为小,后值为大
三、模糊查询like
likeLeft指左面是%
4、字段映射
数据库字段与实体类属性名称不一致:
在实体类的属性上添加@TableField(value=“表字段名”)
实体类属性不需要在数据库存储:
设置属性不参与查询:
设置实体类与表名
5、id自增策略设置
设置使用数据库id自增策略控制id生成:在实体类的id属性上添加@TableId(type = IdType.ASSIGN_ID)
其他值:
简化在实体类上添加注解的开发:在yml配置文件上进行设置及可,如
6、删除
多记录操作
逻辑删除
7、代码生成器
1、导入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
2、快速生成
public class FastAutoGeneratorTest {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/mybatis_plus?
characterEncoding=utf-8&userSSL=false", "root", "root")
.globalConfig(builder -> {
builder.author("xiaoliu") // 设置作者
//.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("D://mybatis_plus"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.xiaoliu") // 设置父包名
.moduleName("mybatisplus") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://mybatis_plus"));
// 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("t_user") // 设置需要生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine())
// 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}