MybatisPlus快速入门

21,658 阅读3分钟

快速使用

  • 导入依赖

    <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个类,AbstractWrapperQueryWrapperUpdateWrapper,关系如下

1.png

下面对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中的BETWEEN
  • notBetween
  • like:模糊匹配。like("name","黄"),相当于SQL的name like '%黄%'
  • likeRight:模糊匹配右半边。likeRight("name","黄"),相当于SQL的name like '黄%'
  • likeLeft:模糊匹配左半边。likeLeft("name","黄"),相当于SQL的name like '%黄'
  • notLikenotLike("name","黄"),相当于SQL的name not like '%黄%'
  • isNull
  • isNotNull
  • in
  • and:SQL连接符AND
  • or:SQL连接符OR
  • apply:用于拼接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());
}

相关文章:juejin.cn/post/696172…