若是使用MyBatis注解方式写sql,又想要XML写法的判断入参拼接条件,能够经过@SelectProvider方式实现。sql
public class RateProvider { private final String table_name = "rate_finish"; public String getFinishRate(Map<String, Object> para) { String sql = "SELECT homework_type,device_type,`level`,finish_count,count,create_at FROM rate_finish "; sql += "WHERE 1=1 "; if (para.get("deviceType") != null && !StringUtils.isEmpty(para.get("deviceType").toString())) { sql += "AND device_type = '" + para.get("deviceType").toString() + "' "; } if (para.get("homeworkType") != null && !StringUtils.isEmpty(para.get("homeworkType").toString())) { sql += "AND homework_type = '" + para.get("homeworkType").toString() + "' "; } if (para.get("date") != null && !StringUtils.isEmpty(para.get("date").toString())) { sql += "AND create_at = '" + para.get("date").toString() + "' "; } sql += "ORDER BY homework_type,device_type,`level`"; return sql; } }
这里的para会包含6个值,也就是2倍的入参参数,能够经过key方式或者index方式获取对应参数。app
public class RateFinish extends AbstractModel { private int id; private String deviceType; private String level; private String finishCount; private String count; private String homeworkType; private String createAt;
@SelectProvider(type = RateProvider.class, method = "getFinishRate") @Results({ @Result(property = "homeworkType", column = "homework_type"), @Result(property = "deviceType", column = "device_type"), @Result(property = "level", column = "level"), @Result(property = "finishCount", column = "finish_count"), @Result(property = "count", column = "count"), @Result(property = "createAt", column = "create_at") }) List<RateFinish> getFinishRate( @Param("deviceType") String deviceType, @Param("homeworkType") String homeworkType, @Param("date") String date);