Mybatis Plus看视频笔记1(常用注解和查询和条件构成)

850 阅读3分钟

备注:文章由菲哥消化视频后原创撰写 2020-03-08 于杭州,转载请注明出处,谢谢!

视频链接:注解的使用

【A】注解的使用

  • 常用注解
(1)id 默认为主键,默认雪花算法生成的id值在insert下插入
(2)注解:@TableName 指定表名 @TableId 指定主键 @TableField("name") 指定列名
(3)排除非表字段:
A. private transient String remark (表中没有该字段,不参与序列化)
B. 静态方法和字段 (不建议)
C. @TableField(exist = false) (数据库中无此字段) 


  • 常见查询示例
查询示例
public void selectIds(){
List<Long> idsList = Arrays.asList(213483247283948324L,33243242342442L,454545345435L);
List<User> userList = userMapper.selectBatchIds(idsList);
}

Public void selectByMap(){
Map<String,Object> columnMap = new HashMap<>();
columnMap(“department_id324234324234L); //键名是指数据库中的列名,有下划线。
columnMap(“age”,30);
List<User> userList = userMapper.selectByMap(columnMap);
} 

【B】各种条件构造器的使用

视频链接:各种条件构造器的使用

  • 条件构造器(1)

条件构造器的抽象基类是:AbstractWrapper,里面提供了很多条件构造方法:大于、小于、存在。。。 selectOne selectObj selectList selectMaps等

举例:

1. 名字中包含雨并且年龄小于40
sql条件: name like ‘%雨%’ and age<40

QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
QueryWrapper<User> query = Wrapper.<User>query();

queryWrapper.like("name","雨").It(“age”,40);
List<User> userList = userMapper.selectList(queryWrapper);

2.  名字中包含雨,并且年龄大于等于20,且小于等于40,并且email不为空
queryWrapper.like.("name","雨").between("age",20,40).isNotNull("email");

3.  涉及到排序的话 大于25,降序排列
queryWrapper.likeRight.("name","雨").or().ge("age",25).orderByDesc("age"); 

  • 条件构造器(2)

子查询 sql条件:date_format(create_time,’%Y-%m-%d’) and manager_id in (select id from user where name like ‘王%’

queryWrapper.apply("date_format(create_time,’%Y-%m-%d’) = {0}",value).inSql("manager_id","select id from user where name like ‘王%’"); 

  • 条件构造器(3)

含括号的sql,变成函数式接口

sql条件:name like ‘王%’ and (age<40 or email is not null)
queryWrapper.likeRight(“name”,”王”).and(wq->wq.It(“age”,40).or().isNotNull(“email”))
//这里的wq ->就是函数式接口 内部为.apply(V,T) 
  • 条件构造器(4)

含括号的sql,变成函数式接口

1.sql条件:(age<40 or email is not null) and name like ‘王%’
queryWrapper.nested(wq->wq.It("age",40).or().isNotNull("email")).likeRight("name","王");

2. queryWrapper.in("age",Array.aslist(30,31,35)).last("limit 1"); 

  • select 不列出全部字段
//使用select方法
queryWrapper.select("name, age,memo").in("age",Array.aslist(30,31,35)).last("limit 1");
//使用select方法,排除某2个字段
queryWrapper.in("age",Array.aslist(30,31,35)).select(User.class,info->!info.getColumn().equals("create_time")&&!info.getColumn().equals("manager_id")); 

  • condition 作用
//name 和 email都可能为空
Private void condition(String name,String email){
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.like(StringUtils.isNotEmpty(name),"name",name).like(StringUtils.isNotEmpty(email),"email",email);
List<User> userList = userMapper.selectList(queryWrapper);
}

【C】实体对象作为条件构造器的构造方法的参数

视频链接:实体对象作为条件构造器

  • 示例

【D】allEq用法

视频链接:allEq用法

【E】其他使用条件构造器的方法

视频链接:其他条件构造器

  • 适合的场景一: 只返回几列

  • 适合的场景二: 适合统计结果

  • 适合的场景三: 返回第一列或者记录数

  • 适合的场景四: 使用selectOne(queryWrapper),可以返回一条记录的实体类对象,但是注意如果返回多条,则会报错。

【F】Lambda条件构造器

视频链接:Lambda条件构造器

  • 1.创建条件构造器的4种方法

构造完后的使用方式:(lambda可以防止误写sql字段)

复杂查询示例:

以上,是MP常见查询使用方式的总结。