本文参考:https://www.oschina.net/news/91631/mapper-3-4-6-released
以下代码需要使用JDK1.8环境,因为使用了接口的新特性
maven版本依赖:
<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>3.4.6</version> </dependency>
spring引用方式:
<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>1.1.7</version> </dependency>
工具类:
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.weekend.WeekendSqls; import java.util.Iterator; import java.util.Map; /*** * 构造查询条件 */ public interface SQLCondition { /*** * {@code key}属性等于{@code value}的记录 * @param key * @param value * @param targetClass * @param <T> * @return */ default <T> Example.Builder sqlAnd(String key, Object value, Class<T> targetClass) { return sqlAnd(key,value,targetClass,new String[0]); } static <T> Example.Builder builder(Class<T> targetClass) { return Example.builder(targetClass); } default <T> Example.Builder sqlAnd(String key, Object value, Class<T> targetClass, String ...excludeProperties) { return builder(targetClass).andWhere(WeekendSqls.custom().andEqualTo(key,value)); } default <T> Example.Builder sqlAnd(Map<String,Object> nameValuePair, Class<T> targetClass) { WeekendSqls<T> criteria = WeekendSqls.custom(); for (Iterator<Map.Entry<String, Object>> it = nameValuePair.entrySet().iterator();it.hasNext();) { Map.Entry<String, Object> entry = it.next(); String name = entry.getKey(); Object value = entry.getValue(); criteria.andEqualTo(name,value); } return builder(targetClass).where(criteria); } default <T> Example.Builder orderBy(String fieldName, Class<T> targetClass) { return builder(targetClass).orderBy(fieldName); } default <T> Example.Builder orderBy(Class<T> targetClass,String ...fieldNames) { return builder(targetClass).orderBy(fieldNames); } default <T> Example.Builder orderByDesc(String fieldName, Class<T> targetClass) { return builder(targetClass).orderByDesc(fieldName); } default <T> Example.Builder orderByDesc(Class<T> targetClass,String fieldNames) { return builder(targetClass).orderByDesc(fieldNames); } /*** * 模糊查询{@code key}属性like {@code value} 尚未测试/未按照构造器模式重构 * @param key * @param value * @param targetClass * @param <T> * @return */ default <T> Example sqlLike(String key, String value, Class<T> targetClass) { Example example = new Example(targetClass); Example.Criteria criteria = example.createCriteria(); criteria.andLike(key,value); return example; } }
食用方法:
在你的接口继承自这个接口
import com.xxx.web.open.bean.ApiServicePkg; import com.xxx.web.open.dto.ApiServicePkgDto; import java.util.List; import java.util.Map; public interface ApiServicePkgService extends SQLCondition { ApiServicePkg getById(Integer packageId); ApiServicePkgDto getDtoById(Integer packageId); List<ApiServicePkg> queryList(Map<String,Object> params); List<ApiServicePkg> queryList(); List<ApiServicePkgDto> queryDtoList(); }
实现类
import com.xxx.web.open.bean.ApiServicePkg; import com.xxx.web.open.dto.ApiServicePkgDto; import com.xxx.web.open.mapper.ApiServicePkgMapper; import com.xxx.web.open.service.ApiServicePkgService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Collections; import java.util.List; import java.util.Map; @Service public class ApiServicePkgServiceImpl implements ApiServicePkgService { @Autowired ApiServicePkgMapper servicePkgMapper; @Override public ApiServicePkg getById(Integer packageId) { return servicePkgMapper.getById(packageId); } @Override public ApiServicePkgDto getDtoById(Integer packageId) { return servicePkgMapper.getDtoById(packageId); } @Override public List<ApiServicePkg> queryList(Map<String, Object> params) { //把Map里面的键值对用来构造sql and条件,total字段正序排序 return servicePkgMapper.selectByExample(sqlAnd(params,ApiServicePkg.class).orderByAsc("total").build()); } @Override public List<ApiServicePkg> queryList() { //查询enabled=1(true)的行,根据total字段正序排序 return servicePkgMapper.selectByExample(sqlAnd("enabled",true,ApiServicePkg.class).orderByAsc("total").build()); } @Override public List<ApiServicePkgDto> queryDtoList() { return servicePkgMapper.queryDtoList(Collections.emptyMap()); } }