# 通用Mapper
Mapper接口通过继承BaseMapper接口类,获得通用的CRUD能力。
以下对一些特别的接口进行说明,简单的接口可以顾名思义,不再说明:
# example查询
使用实体类对象作为查询条件。
接口有:findByExample、findByExampleAndSort、countByExample
默认情况下entity的属性值不为空时(not empty模式),将被作为查询条件,可以使用@AttributeOptions(conditionMode=Mode.xxx)更改条件的生效模式。
默认情况下属性作为查询条件时,使用值=匹配,可以@AttributeOptions(exampleQuery=@ExampleQuery(matchType=MatchType.xxx))更改查询匹配方式 。
# example查询增强
@AttributeOptions(exampleQuery=@ExampleQuery(matchType=?, startKeyName=?, startValueContain=?, endKeyName=?, endValueContain=?, inKeyName=?))
在不同场景使用不同的键传值时,使用如上声明,详见注解说明
# criteria查询
自定义条件查询
比较于lambdaCriteria,criteria可以使用关系实体属性作为查询条件。
接口有:findByCriteria、findUniqeByCriteria、updateByCriteria、deleteByCriteria、countByCriteria。
//方式一
classMapper.findByCriteria(new QueryPredicateImpl().eq("name", "一年级").order(Direction.DESC,"id").order("studentListAddTime"));
//方式二,Consumer模式
classMapper.findByCriteria(p -> p.eq("name", "一年级").order(Direction.DESC,"id").order("studentListAddTime"));
# lambdaCriteria查询
自定义条件查询,使用lambda函数式设置Select属性、查询条件、取值。
使用lambda的好处是,当实体类属性有变化时,IDE可以直接感知并警告提示。
接口有:findByLambdaCriteria、findUniqueByLambdaCriteria、updateByLambdaCriteria、deleteByLambdaCriteria、countByLambdaCriteria。
Classs params = new Classs();
params.setName("一年级");
//方式一
classMapper.findByLambdaCriteria(predicate -> predicate.apply(params).select(Classs::getName, Classs::getAddTime).eq(Classs::getName).limit(10, false));
//方式二
classMapper.findByLambdaCriteria(predicate -> predicate.select(Classs::getName, Classs::getAddTime).eq(Classs::getName, params.getName()).limit(10, false));
# 统计类接口
countByCriteria、countByLambdaCriteria 动态条件统计符合条件的行数
maxByLambdaCriteria 动态条件查属性的最大值,无匹配数据时返回null
minByLambdaCriteria 动态条件查属性的最小值,无匹配数据时返回null
sumByLambdaCriteria 动态条件查属性的总和值,无匹配数据时返回null
statisticByCriteria、statisticByLambdaCriteria 动态条件同时统计count、sum、min、max、avg函数多个字段值