可以链式,直接在后面点:lqw.lt(User::getAge,15).gt(User::getAge,25);
如果不是and是或,加一个.orlqw.lt(User::getAge,15).or().gt(User::getAge,25);
条件查询中出现null:
选择条件的时候选择有boolen判断的哪个,先判断是否为true,如果为true则执行
lqw.lt( null != userQuery.getAge(),User::getAge,15);
查询投影:
你要查询部分属性:
1.用lambda就挨个属性全写
2.如果要查询未定义的属性
@Test public void contextLoads5() { QueryWrapper<User> userQueryWrapper = new QueryWrapper<>(); userQueryWrapper.select("couunt(*) as count"); List<Map<String, Object>> maps = userDao.selectMaps(userQueryWrapper); System.out.println(maps); } 使用userQueryWrapper.select("couunt(*) as count"); 和userDao.selectMaps(userQueryWrapper);
数据查询问题:
-
当你的实体类和表名不一致,加注解@TableName("表名")
-
当你的实体类字段名称和数据库内的不一致,加注解@TableField(value = 数据库属性名)
-
当你的实体类属性在数据库中不存在时,加注解@TableField(exist = false)
-
当有些属性不需要参与查询,加注解@TableField(select = false)
ID生成策略:
你需要设置id生成策略的时候:
在id上面加注解@TableId(type = IdType.生成方法)
可以设置为:
-
数据库自增AUTO
-
自己输入INPUT
-
空NONE
-
雪花算法ASSIGN_ID
-
uuid ASSIGN_UUID
每一个都需要写@TableId很麻烦:去yml配置文件中进行全局配置,输一个idtype就出来
同样可以设置数据库表名前缀:配置文件中输入table-prefix,就是给实体类查询数据库表时都加上这个前缀
例如实体类为user 配置 table-prefix:tbl_ 查询时自动查询tbl_user
多数据操作:删除和查询
按照id多个删除 userDao.deleteBatchIds()
按照id多个查询 userDao.selectBatchIds()
逻辑删除:
当一个员工离职后,删除她的名字和业绩,年终对业绩发现不匹配,会出现问题。
所以需要逻辑删除字段,员工后面加个1代表离职,0代表未离职。相当于做标记 ,避免了删除操作对业务的影响
使用时:
可以加注解@TableLogic(value = ,delval = )
更推荐在yml配置文件中配置:
mybatis-plus: global-config: db-config: logic-delete-field: deldete logic-not-delete-value: 0 logic-delete-value: 1
乐观锁:
多人秒杀活动,到最后一个多人抢肯定会出问题,需要锁
使用方法:
1.数据库表中加一个字段
2.在实体类中加一个属性,加注解@Version
3.加一个拦截器OptimisticLockerInnerInterceptor(),mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
代码生成器:
知道数据库信息后可以生成一个壳,前期不使用