快速使用
-
导入依赖
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> -
连接数据库,这一步和
mybatis相同spring.datasource.username=root spring.datasource.password=ccc+022599 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai -
主启动类中添加 @MapperScan(basePackages = "cn.ccb.dao"),该注解为mapper接口生成代理类, 或在具体接口上添加
@Mapper注解
增删改查
-
Service层,继承
ServiceImpl实现类,该父类中提供了lambdaQuery()、lambdaUpdate()链式调用方法@Service public class UserServiceImpl extends ServiceImpl<UserMapper, User>{ // CRUD均已完成 } -
Mapper层
public interface UserMapper extends BaseMapper<User> { // CRUD均已完成 }
条件查询
条件构造器主要涉及到3个类,AbstractWrapper,QueryWrapper,UpdateWrapper,关系如下
下面对AbstractWrapper中用于构建SQL语句中的WHERE条件的方法进行部分列举
eq:equals,等于allEq:all equals,全等于ne:not equals,不等于gt:greater than ,大于>ge:greater than or equals,大于等于≥lt:less than,小于<le:less than or equals,小于等于≤between:相当于SQL中的BETWEENnotBetweenlike:模糊匹配。like("name","黄"),相当于SQL的name like '%黄%'likeRight:模糊匹配右半边。likeRight("name","黄"),相当于SQL的name like '黄%'likeLeft:模糊匹配左半边。likeLeft("name","黄"),相当于SQL的name like '%黄'notLike:notLike("name","黄"),相当于SQL的name not like '%黄%'isNullisNotNullinand:SQL连接符ANDor:SQL连接符ORapply:用于拼接SQL,该方法可用于数据库函数,并可以动态传参
具体使用:
QueryWrapper<User> wrapper = new QueryWrapper<>();
// 只选出id, name 列 (QueryWrapper 特有)
// SELECT id, name FROM user;
wrapper.select("id", "name");
// 名字中包含佳,且年龄小于25
wrapper.like("name", "佳").lt("age", 25);
List<User> users = userMapper.selectList(wrapper);
// 姓名为黄姓,且年龄大于等于20,小于等于40,且email字段不为空
// name like '黄%' AND age BETWEEN 20 AND 40 AND email is not null
wrapper.likeRight("name","黄").between("age", 20, 40).isNotNull("email");
// 姓名为黄姓,或者年龄大于等于40,按照年龄降序排列,年龄相同则按照id升序排列
// name like '黄%' OR age >= 40 order by age desc, id asc
wrapper.likeRight("name","黄").or().ge("age",40).orderByDesc("age").orderByAsc("id");
// 名字为王姓,并且(年龄小于40,或者邮箱不为空)
// name like '王%' AND (age < 40 OR email is not null)
wrapper.likeRight("name", "王").and(q -> q.lt("age", 40).or().isNotNull("email"));
// 名字为王姓,或者(年龄小于40并且年龄大于20并且邮箱不为空)
// name like '王%' OR (age < 40 AND age > 20 AND email is not null)
wrapper.likeRight("name", "王")
.or(
q -> q.lt("age",40)
.gt("age",20)
.isNotNull("email")
);
// (年龄小于40或者邮箱不为空) 并且名字为王姓
// (age < 40 OR email is not null) AND name like '王%'
// 当()需要放在WHERE语句的最开头时,可以使用nested()方法
wrapper.nested(q -> q.lt("age", 40).or().isNotNull("email"))
.likeRight("name", "王");
// 年龄为30,31,34,35
// age IN (30,31,34,35)
wrapper.in("age", Arrays.asList(30,31,34,35));
// 或
wrapper.inSql("age","30,31,34,35");
// 年龄为30,31,34,35, 返回满足条件的第一条记录
// age IN (30,31,34,35) LIMIT 1
wrapper.inSql("age","30,31,34,35").last("LIMIT 1");
分页查询
@Configuration
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
}
@Test
void test2(){
Page<User> page = new Page<>(2, 2);
Page<User> userPage = userDao.selectPage(page, null);
List<User> records = userPage.getRecords();
System.out.println(records);
System.out.println("总数量:"+userPage.getTotal());
}