1.条件查询、多条件查询
MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合。
@Test
void testGetByCondition() {
// 方式一:按条件查询
QueryWrapper<User> qw = new QueryWrapper<User>();
qw.lt("age", 20);
List<User> userList = userDao.selectList(qw);
System.out.println(userList);
// 方式二:lambda格式
QueryWrapper<User> qw2 = new QueryWrapper<User>();
qw2.lambda().lt(User::getAge, 10);
List<User> userList2 = userDao.selectList(qw2);
System.out.println(userList2);
// 方式三:lambda格式
LambdaQueryWrapper<User> qw3 = new LambdaQueryWrapper<User>();
qw3.lt(User::getAge, 10);
List<User> userList3 = userDao.selectList(qw3);
System.out.println(userList3);
// 多条件查询
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
// 10到30岁之间
// lqw.lt(User::getAge, 30).gt(User::getAge, 10);
// 小于10岁或大于30岁
lqw.lt(User::getAge, 10).or().gt(User::getAge, 30);
List<User> userList4 = userDao.selectList(lqw);
}
2.条件查询null判定
封装User模型的查询条件,这里age是具有上下限的,User类里面的age作为下限,这里的age2作为上限。
domain.query.UserQuery.java
package com.example.domain.query;
import com.example.domain.User;
import lombok.Data;
@Data
public class UserQuery extends User {
private int age2;
}
①if语句控制
②条件参数控制
3. 查询投影
查询结果包含模型类中的部分属性
查询结果包含模型类中未定义的属性
4.查询条件
5.@TableField注解和@TableName注解
问题一:表字段和编码属性设计不同步
问题二:编码中添加了数据库中未定义的属性
问题三:设定某个字段不参与查询,比如密码pwd字段
问题四:表名与编码开发设计不同步
前三个问题采用**@TableField注解**,问题四采用**@TableName注解**
6.id生成策略控制
不同的表,应用不同的id生成策略。
- 日志:自增(1,2,3....)
- 购物订单:特殊规则(FQ23948c232e)
- 外卖单:关联地区、日期等信息
使用@TableId注解
7. 多记录操作
8.逻辑删除
删除操作的问题:业务数据从数据库中丢弃
逻辑删除:为数据设置是否可用状态字段,删除时设置字段为不可用状态,数据保留在数据库中。
具体使用**@TableLogic**注解