MyBatis-Plus入门
视频地址:https://www.imooc.com/video/19490
github地址:https://github.com/Lining128/mybatis-plus
学前掌握技能:熟悉Lambda\SpringBoot\Maven\MyBatis
开发环境:Eclipse\jdk\Maven\Mysql
一、简介
1.mybatis-plus简介
是mybatis的增强工具,只增强不改变
官网地址:
https://mybatis.plus/
特性:无侵入、损耗小、强大的CRUD操作
支持lambda 形势调用、支持多种数据库
支持主键自动生成、支持ActiveRecord模式
支持自定义全局通用操作、支持关键词自动转义
内置代码生成器、内置分页插件、内置性能分析插件
内置全局拦截插件、内置sql注入剥离器
2.安装lombok
maven仓库:
https://mvnrepository.com/
搜lombok下载下载在eclipse文件目录下
3.入门
新建数据库及表:
新建maven项目,导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--mybatis-puls启动器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<!--mysql jdbc驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
文件结构
二、通用mapper
yml文件新增:
修改test文件下的测试
三、mybatis-puls查询方法
1.查询
2.条件构造器查询
/**
* 名字中包含雨并且年龄小于40
* name like '%雨%' and age < 40
*/
@Test
public void selectByWrapper01(){
QueryWrapper<User>queryWrapper = new QueryWrapper<User>();
queryWrapper.like("name","雨").lt("age",40);
List<User>userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/**
* 名字中包含雨并且年龄大于20且小于等于40并且email不为空
* name like '%雨%' and age between 20 and 40 and email is not null
*/
@Test
public void selectByWrapper02(){
QueryWrapper<User>queryWrapper = new QueryWrapper<User>();
queryWrapper.like("name","雨").between("age",20,40).isNotNull("email");
List<User>userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/**
* 名字为王姓或者年龄大于等于25,按照年龄降序排列,年龄相同的按照id升序排列
* name like '王%' or age >= 40 order by age desc,id asc
*/
@Test
public void selectByWrapper03(){
QueryWrapper<User>queryWrapper = new QueryWrapper<User>();
queryWrapper.like("name","王").or().ge("age",25).orderByDesc("age").orderByAsc("id");
List<User>userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/**
* 创建时间日期为2019.2.14并且直属上级为王姓
* date_format(create_time,'%Y-%m-%d')and manager_id in (select id from user where name like '王%')
*/
@Test
public void selectByWrapper04(){
QueryWrapper<User>queryWrapper = new QueryWrapper<User>();
queryWrapper.apply("date_format(create_time,'%Y-%m-%d') ={0}","2019-02-14")
.inSql("manager_id","select id from user where name like '王%'");
List<User>userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/**
* 名字王姓并且(年龄小于40或者邮箱不为空)
* name like '王%' and (age<40 or email is not null)
*/
@Test
public void selectByWrapper05(){
QueryWrapper<User>queryWrapper = new QueryWrapper<User>();
queryWrapper.likeRight("name","王").and(wq->wq.lt("age",40)
.or().isNotNull("email"));
List<User>userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/**
* 名字王姓或者(年龄小于40并且年龄大于20并且邮箱不为空)
* name like '王%' or (age<40 and age > 20 and email is not null)
*/
@Test
public void selectByWrapper06(){
QueryWrapper<User>queryWrapper = new QueryWrapper<User>();
queryWrapper.likeRight("name","王").or(wq->wq.lt("age",40)
.gt("age",20).isNotNull("email"));
List<User>userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/**
* (年龄小于40或者邮箱不为空)并且名字为王姓
* (age<40 or email is not null )and name like '王%'
*/
@Test
public void selectByWrapper07(){
QueryWrapper<User>queryWrapper = new QueryWrapper<User>();
queryWrapper.nested(wq->wq.lt("age",40)
.or().isNotNull("email").likeRight("name","王"));
List<User>userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/**
* 年龄30、31、34、35
* age in (30、31、34、35)
*/
@Test
public void selectByWrapper08(){
QueryWrapper<User>queryWrapper = new QueryWrapper<User>();
queryWrapper.in("age",Arrays.asList(30,31,34,35));
List<User>userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/**
* 只返回满足条件的其中一条语句即可
* limit 1
*/
@Test
public void selectByWrapper09(){
QueryWrapper<User>queryWrapper = new QueryWrapper<User>();
queryWrapper.in("age",Arrays.asList(30,31,34,35)).last("limit 1");
List<User>userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
四、分页查询
/**
* 名字中包含雨并且年龄小于40
* name like '%雨%' and age < 40
*/
@Test
public void selectByWrapperSupper01(){
QueryWrapper<User>queryWrapper = new QueryWrapper<User>();
queryWrapper.select("id","name").like("name","雨").lt("age",40);
List<User>userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/**
* 名字中包含雨并且年龄小于40
* name like '%雨%' and age < 40
*/
@Test
public void selectByWrapperSupper02(){
QueryWrapper<User>queryWrapper = new QueryWrapper<User>();
queryWrapper.like("name","雨").lt("age",40).select(User.class,info->!info.getColumn()
.equals("create_time")&&!info.getColumn().equals("manager_id"));
List<User>userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
五、AR模式
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootMybatisPlusApplicationTests {
@Test
public void contextLoads() {
List<User> selectList= new User().selectList(null);
System.out.println(selectList);
}
}
主键策略:在yml文件中加入
public enum IdType {
/**
* 数据库ID自增
*/
AUTO(0),
/**
* 该类型为未设置主键类型
*/
NONE(1),
/**
* 用户输入ID
* <p>该类型可以通过自己注册自动填充插件进行填充</p>
*/
INPUT(2),
/* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
/**
* 全局唯一ID (idWorker)
*/
ID_WORKER(3),
/**
* 全局唯一ID (UUID)
*/
UUID(4),
/**
* 字符串全局唯一ID (idWorker 的字符串表示)[默认策略]
*/
ID_WORKER_STR(5);
}
//局部策略
@TableId(type = IdType.AUTO)
private long userId;
//全局策略
mybatis-plus:
global-config:
db-config:
id-type: auto