一、 查询条件设置
查询条件
- 范围匹配(>、= 、between)
- 模糊匹配(like)
- 空判定(null)
- 包含性匹配(in)
- 分组(group)
- 排序(order)
- …
- 用户登录
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>(); //等同于"=" lqw.eq(User::getUsername,"张三").eq(User::getPassword,123); List<User> selectList = userDao.selectList(lqw); System.out.println(selectList);
- 购物设定价格区间、户籍设定年龄区间(le ge匹配或者between匹配)
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>(); //范围查询lt le gt ge eq between lqw.between(User::getId,1,3); User user = userDao.selectOne(lqw); System.out.println(user);
- 查信息、搜索新闻(非全文检索版:like匹配)
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>(); //模糊匹配 like lqw.like(User::getUsername,"张"); List<User> userList = userDao.selectList(lqw); System.out.println(userList);
- 统计报表(分组查询聚合函数)
QueryWrapper<User> qw = new QueryWrapper<>(); qw.select("count(*) as count"); qw.groupBy("gender"); LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>(); List<User> userList = userDao.selectList(lqw); System.out.println(userList);
二、 映射匹配兼容性
2.1 字段映射与表名映射
- 名称:@TableFiled
- 类型:属性注解
- 位置:模型类属性定义上方
- 作用:设置当前属性对应的数据库表中的字段关系
- 范例:
public class User { private Integer id; @TableField(value = "username") private String userName; @TableField(value = "password") private String passWord; private String gender; private String addr; }
- 相关属性:
- value(默认):设置数据库表字段名称
2.2 编码中出现了数据库中未出现的属性
- exist:设置属性在数据库表字段中是否存在,默认为true,此属性无法与value合并使用。
public class User { private Integer id; @TableField(value = "username") private String userName; @TableField(value = "password") private String passWord; private String gender; private String addr; @TableField(exist = false) private Integer online; }
2.3 采用默认查询开放了更多的字段查看权限
- select:设置属性是否参与查询,此属性与select()映射匹配不冲突
public class User { private Integer id; @TableField(value = "username") private String userName; @TableField(value = "password",select = false) private String passWord; private String gender; private String addr; @TableField(exist = false) private Integer online; }
2.4 表名映射设置
- 名称:@TableName
- 类型:类注解
- 位置:模型类属性定义上方
- 作用:设置当前类对应与数据库表关系
- 范例:
@TableName("tb_user") public class User { private Integer id; @TableField(value = "username") private String userName; @TableField(value = "password") private String passWord; private String gender; private String addr; }
- 相关属性:
- value:设置数据库表名称
三、 id生成策略
3.1 id生成策略控制
- 不同的表应用不同的id生成策略
- 日志:自增(1,2,3,4,5…)
- 购物订单:特殊规则(FQ23948AK3843)
- 外卖单:关联地区日期等信息(10 04 20200314 34 91)
- 关系表:可省略id
- …
- 名称:@TableId
- 类型:属性注解
- 位置:模型类中用于表示主键的属性定义上方
- 作用:设置当前类中主键属性的生成策略
- 范例:
@TableName("tb_user") public class User { private Integer id; @TableField(value = "username") private String userName; @TableField(value = "password") private String passWord; private String gender; private String addr; }
- 相关属性:
- value:设置数据库主键名称
- type:设置主键属性的生成策略,值参照IdType枚举值
- AUTO(0):使用数据库id自增策略控制id生成
- NONE(1):不设置id生成策略
- INPUT(2):用户手工输入id
- ASSIGN_ID(3):雪花算法生成id(可兼容数值型与字符串型)
- ASSIGN_UUID(4):以UUID生成算法作为id生成策略
3.2 id生成策略全局配置
@TableName("tb_user") public class User { @TableId(type = IdType.ASSIGN_ID) private Long id; }
3.3 表名前缀全局配置
@TableName("tb_user") public class User { @TableId(type = IdType.ASSIGN_ID) private Long id; }
3.4 全局配置(综合id生成前缀和表名前缀)
# 设置统一id生成算法(为所有实体类设置) mybatis-plus: global-config: banner: false db-config: id-type: assign_id # 设置数据库表名前缀 table-prefix: tb_
四、多数据操作
- 按照主键删除多条记录
void testDelete() { List<Long> list = new ArrayList<>(); list.add(1698537145196683265L); list.add(1698539961168465921L); list.add(1698540047797653506L); userDao.deleteBatchIds(list); }
- 根据主键查询多条记录
void testSelect() { List<Long> list = new ArrayList<>(); list.add(1L); list.add(2L); list.add(3L); list.add(4L); userDao.selectBatchIds(list); }