一、查询条件使用
//单个查询,如果返回多条会抛异常
User user = userService.getOne(Wrappers.<User>query().lambda().eq(User::getUserId, 9527));
//列表查询
List<User> user = userService.list(Wrappers.<User>query().lambda().eq(User::getUserId, 9527));
// 查询条件传入对象,对象中有值的条件都会带到where条件中
List<User> list = userService.list(Wrappers.query(user));
// .eq == 等于
// .ne <> 不等于
// .gt 大于
// .ge 大于等于>=
// .lt 小于
// .le 小于等于<=
// .in 包含
// .notIn
// .orderByAsc 正序排序
// .like() 模糊匹配 likeRight 、 likeLeft
// .between() 区间查询
// .orderByDesc 倒序排序
// .last() 自定义SQL 例如 .last(" limit 1")
// .or() userWrapper.lambda.and(tmp ->tmp.eq(“pwd”, pwd).or().eq(“phone”, phone));
// where A=? or(C=? and D=?)
studentService.lambdaQuery().eq(Student::getName, "1")
.or(wp -> wp.eq(Student::getName, "1").eq(Student::getAge, 12))
.list();
userService.getOne(Wrappers.<User>query().lambda()
.eq(User::getUserId, 9527)
.last(" limit 1"))
//使用find_in_set判断参数是否在数组中
wrapper.apply(!extractExpertAssignmentDTO.getExpertType().isEmpty(), "FIND_IN_SET ('" + extractExpertAssignmentDTO.getExpertType() + "',Expert_Type)");
1.1查询条件动态化 QueryWrapper 或者 LambdaQueryWrapper
QueryWrapper<ProjectConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("project_id", projectId);
queryWrapper.eq("is_using", 1);
if ("1".equals(type)) {
queryWrapper.le("sc_product_distribution_relationship_start_time", new Date());
queryWrapper.ge("sc_product_distribution_relationship_end_time", new Date());
} else if ("4".equals(type)) {
// 小于等于
queryWrapper.le("contract_signing_start_time", new Date());
queryWrapper.ge("contract_signing_end_time", new Date());
}
ProjectConfig con = this.getOne(queryWrapper);
// 统计数量 使用 DISTINCT
QueryWrapper<Suppur> queryWrapper = new QueryWrapper<>();
queryWrapper.select(" DISTINCT hospital_id");
int num = suppurMapper.selectCount(queryWrapper);
// LambdaQueryWrapper--可以使用lambda表达式------------begin
LambdaQueryWrapper<BidprcuOrgInfoDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.like(BidprcuOrgInfoDO::getOrgName, "XXXXXX");
BidprcuOrgInfoDO con = this.getOne(lambdaQueryWrapper);
二、新增(支持单个、批量)
//.save 保存单个
//.saveBatch 批量保存
userService.save(userEntity1);
三、修改(支持单个、批量)
1、修改对象,entity set了几个值就更新几个值,没有set值得将不更新
// 存在就修改,不存在就新增
userService.saveOrUpdate(userEntity1, Wrappers.<UserEntity>query().lambda()
.eq(UserEntity::getUserId, 9527));
UserEntity entity = new UserEntity();
// 只会更新flag,其他字段不更新
entity.setFlag("0");
// wrappers传null ,全表更新
userService.update(entity, null);
2、修改单个字段
// 修改ID为1234567的数据,状态=2
service.update(Wrappers.<UserEntity>update().lambda()
.eq(UserEntity::getId, 1234567)
.set(UserEntity::getStatus, "2"))
3、修改 手写SQL
LambdaUpdateWrapper<UserDO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.setSql(" purc_sign_OLD=purc_sign ");
四、删除
// 数据库删除
userService.remove(Wrappers.<userEntity>query().lambda().eq(userEntity::getUserId, 9527));
这边列举的是些常用的,并不全面,自己可以通过
this.baseMapper.
提示看接口所有的方法。
例:
使用技巧
1、新增修改时自动给字段赋值
@TableField(fill = FieldFill.INSERT) 新增数据的时候自动赋值,参考:FieldFill.INSERT与FieldFill.UPDATE使用_MIDSUMMER_yy的博客-CSDN博客_fieldfill
2、表单未传值时,不更新数据表字段,可以添加以下注解,这样前台传递null 也会更新到数据库
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String stas;
3、表主键id生成的几种方式
// 注意 IdType几种枚举值对应生成ID的方式
@TableId(value = "id", type = IdType.ID_WORKER_STR)
private String id;
// 赋值逻辑
ob.setId(IdWorker.getIdStr());
AUTO | 自动递增代码中不需要赋值 | |
NONE | 数据库未设置主键类型(将会跟随全局) | |
INPUT | 用户输入ID(该类型可以通过自己注册自动填充插件进行填充) | |
ID_WORKER | 全局唯一ID (idWorker) | |
UUID | 全局唯一ID(UUID) | |
ID_WORKER_STR | 字符串全局唯一ID(idWorker 的字符串表示) | ob.setId(IdWorker.getIdStr()); |
4、@TableField(exist = false)表示不是数据库表字段
5、@TableLogic 标记字段为删除标识
文章并不完善,边学边记,持续更新中....