×
文章路径: 框架 > mybatis

指定参数名称,参数值查询数据的通用方法

发表于6年前(Apr 25, 2016 9:43:58 AM)  阅读 2582  评论 0

分类: 框架 mybatis

标签: 动态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中增加相应地重载方法。

 

发表评论