指定参数名称,参数值查询数据的通用方法
发表于6年前(Apr 25, 2016 9:43:58 AM)  阅读 2582  评论 0
标签: 动态sql findByParams
接上篇文章,继续完善BaseMapper。
1、BaseMapper.xml:
增加findByParams SQL
<select id="findByParams" parameterType="Map" resultType="Entity">
SELECT * FROM ${__tableName__} t WHERE 1=1
<foreach collection="params" index="index" item="item" open=" and " separator=" and " close="">
${item.name}=${item.value}
</foreach>
</select>
可以看到增加了params参数,是一个list集合,集合里面的对象至少包含name和value两个属性。
2、BaseMapper.java:
public List<T> findByParams(Map<String, Object> map);
3、BaseDAO.java:
这里用一个List<Map<String,Object>>作为params参数供SQL调用,IBaseDAO接口略。
4、调用:
List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "username");
map.put("value", "'test'");
mapList.add(map);
map = new HashMap<String, Object>();
map.put("name", "id");
map.put("value", "1");
mapList.add(map);
List<Users> list = usersDAO.findByParams(mapList);
这里需要注意的事,因为使用的是硬拼SQL,如果参数是字符串,必须加上单引号,如果是其他类型,都需做相应处理。
5、ParamsObject:
package com.cangzhitao.common.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by cangzhitao on 16/4/20.
*/
public class ParamsObject {
private List<Map<String, Object>> params = new ArrayList<Map<String, Object>>();
public void addParam(String name, Object value) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", name);
map.put("value", value);
params.add(map);
}
public List<Map<String, Object>> getParams() {
return params;
}
}
封装一个ParamsObject,方便调用,以后也可以在这进行参数的包装转换。DAO中增加相应地重载方法。