备注:文章由菲哥消化视频后原创撰写 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常见查询使用方式的总结。