mybatis plus条件拼接 mybatis plus条件拼接 条件构造器 说明: 以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中 没有标明condition的方法,默认为true 以下出现的泛型Param均为Wrapper的子类实例(均具有AbstractWrapper的所有方法) 以下方法在入参中出现的R为泛型,在普通wrapper中是String,在LambdaWrapper中是函数(例:Entity::getId,Entity为实体类,getId为字段id的getMethod) 参数R column均表示数据库字段,而不是实体类数据字段名!!!(字段名是数据库关键字的自己用转义符包裹!)! 以下举例均为使用普通wrapper,入参为Map和List的均以json形式表现! 使用中如果入参的Map或者List为空,则不会加入最后生成的sql中!!! 有任何疑问就点开源码

来源: mybatis plus官网

mybatis plus提供了分页功能,可以轻松实现分页;

  1. //设置查询参数
  2. Page<AaaBbbCc> page=new Page<>();
  3. page.setCurrent(1);
  4. page.setSize(2);
  5. //开始查询
  6. IPage<AaaBbbCc> page2 = aaaBbbCcDao.page(page);
  7. /**
  8. getCurrent():当前页数;
  9. getPages():总页数;
  10. getSize():查询数量;
  11. getTotal():总数量;
  12. getRecords():查询结果;
  13. 若是当前页>总页数,返回[];
  14. 若是当前页数<1,查询第一页数据;
  15. */

自定义SQL查询分页数据

  • Page<T> page 参数设置为查询的第一个参数,不需要拼接分页查询条件,mybatis plus会自动执行分页查询;
  • 例:
  1. /**
  2. * <p>
  3. * 查询 : 根据state状态查询用户列表,分页显示
  4. * 注意!!: 如果入参是有多个,需要加注解指定参数名才能在xml中取值
  5. * </p>
  6. *
  7. * @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)
  8. * @param state 状态
  9. * @return 分页对象
  10. */
  11. @Select("SELECT id,name FROM user WHERE state=#{state}")
  12. IPage<User> selectPageVo(Page page, @Param("state") Integer state);

热部署(已过时)

在3.1.0已经完全移除了....我们用的是3.1.1,用不了了o(╥﹏╥)o

逻辑删除(不建议使用)

在正式项目中,删除数据时很多时候不是将数据直接删除,而是创建一个字段,用不同的数据表示不同的状态;
比如创建一个enable字段,enable=1,则表示数据使用中,enable=0,则表示数据逻辑上已经删除了,平时使用时,这条数据默认不查询;
在mybatis plus中可以设置逻辑删除的查询;

配置

  • yml
  1. mybatis-plus:
  2. global-config:
  3. db-config:
  4. logic-delete-value: 0 # 逻辑已删除值(默认为 1)
  5. logic-not-delete-value: 1 # 逻辑未删除值(默认为 0)
  • entity
  1. //在代表删除的字段上添加注解:
  2. @TableLogic
  3. private Integer enable;

使用

  1. //默认在查询的时候就会拼接上enable的条件
  2. dao.list();//where enable=1

注意,此查询条件不会被覆盖,使用功能需谨慎

  1. //若是想要查询已经删除的数据,将无法查询....
  2. queryWrapper.eq("enable","0" );
  3. dao.list(queryWrapper);//WHERE enable=1 AND enable = 0

所以还是自己写吧o(╥﹏╥)o

枚举

自3.1.0开始,可配置默认枚举处理类来省略扫描通用枚举配置,3.1.0之前和之后的配置是不同的,我们就不研究3.1.0之前的使用方法了(#^.^#)

配置

  • 扫描通用枚举
  1. mybatis-plus:
  2. # 支持统配符 * 或者 ; 分割
  3. typeEnumsPackage: com.baomidou.springboot.entity.enums,自定义枚举
  • entity配置/JSON序列化处理
    • Jackson
  1. 在需要响应描述字段的get方法上添加@JsonValue注解即可
  • Fastjson
    • 全局处理方式
      ```java
      FastJsonConfig config = new FastJsonConfig();
      //设置WriteEnumUsingToString
      config.setSerializerFeatures(SerializerFeature.WriteEnumUsingToString);
      converter.setFastJsonConfig(config);
  1. - 局部处理方式
  2. ```java
  3. @JSONField(serialzeFeatures= SerializerFeature.WriteEnumUsingToString)
  4. private UserStatus status;

实现 IEnum 接口

  • 例:年龄使用枚举
    • 创建枚举

      1. @AllArgsConstructor
      2. public enum AgeEnum implements IEnum<Integer> {
      3. ONE(1, "一岁"),
      4. TWO(2, "二岁"),
      5. THREE(3, "三岁");
      6. private int value;
      7. private String desc;
      8. @Override
      9. public Integer getValue() {
      10. return this.value;
      11. }
      12. public String geDesc() {
      13. return this.desc;
      14. }
      15. }
    • entity中设置枚举

      1. public class User{
      2. /**
      3. * 名字
      4. * 数据库字段: name varchar(20)
      5. */
      6. private String name;
      7. /**
      8. * 年龄,IEnum接口的枚举处理
      9. * 数据库字段:age INT(3)
      10. */
      11. private AgeEnum age;
      12. }

使用

数据库中数据为":张三",3
json转换后为:"张三","THREE"

注意:age在set的时候需要设置枚举而不是之前的Integer了,但是用户可以自己设置set方法,将传入的Integer转为枚举再赋值....