普通查询
- T selectById(Serializable id);(String Long Integer都有实现该接口)
- List selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); (只需要传入idList作为主键ID列表,不能为空)
- List selectByMap(@Param(Constants.COLUMN.MAP) Map<String,Object> columnMap); (String必须为数据库表字段,Object为值)
以条件构造器作为参数的查询(AbstractWrapper抽象类,具体实现子类有QueryWrapper)
具体案例:
{0}防止SQL注入漏洞
用到lambda表达式
nested 正常嵌套 不带 AND 或者 OR
例: nested(i -> i.eq(“name”, “李白”).ne(“status”, “活着”))—>(name = ‘李白’ and status <> ‘活着’)
last 无视优化规则直接拼接到 sql 的最后
注意事项:只能调用一次,多次调用以最后一次为准 有sql注入的风险,请谨慎使用
select不列出全部字段
select写前写后都可以,第二种写法是排除掉不要的表字段,用于需要显示多个表字段。
condition作用
在like方法中选择含有返回boolean类型的condition作为条件输入,即可作为判断条件选择指定的SQL语句在数据库中进行查询。
实体作为条件构造器方法的参数
该方法与使用like查询互不干扰,两种条件都会执行,容易出现问题。(解决方法:在实体类中对相应的成员属性加@TableField(condition=SqlCondition.LIKE),具体什么条件用什么属性值。而如果只想使用小于条件,而SqlCondition中却没有明确标明小于的属性值则可以拆解NOT EQUAL,写成@TableField(condition="%s<#{%s}"))
AllEq用法
传三个参数的情况
第一个参数是拦截指定的属性(用lambda表达式)第二个参数是将Map集合作为AllEq方法的参数传递,第三个参数传入false将忽略掉值未null的查询。
其它使用条件构造器方法
- selectMaps(queryWrapper) 返回List<Map<String,Object>>类型,好处在于当你只需要从多数列中查询少数列的值情况,返回的只有要查询列的结果。
- 案例:
- 结果
- List selectObjs(@Param(Constants.WAPPER) Wrapper queryWrapper) 只返回第一个字段的值
- 案例:
- 结果
- Integer selectCount(queryWrapper) 返回总记录数
- 案例
- 结果
- 方法(若查询条件结果满足两条以上就会报错)
- 案例
- 结果
Lambda条件构造器
- LambdaQueryWrapper lambda = new QueryWrapper().lambda();
- LambdaQueryWrapper lambda = new LambdaQueryWrapper();
- LambdaQueryWrapper lambda = Wrappers.lambdaQuery();
- 特殊 :需要传入继承BaseMapper的类 (后面的list()是LambdaQueryChainWrapper实现的一个接口ChainQuery中的方法,底层还是调用BaseMapper中的selectList()方法)
用法:
好处:编译时期会帮你检查有无误写成员变量。
- 案例