业务背景:
-
系统中有大量的下拉列表需要从数据库中获取, 不想查询多余不需要的数据。(拉下一般都是key-value);
-
查询的下拉数据需要条件查询(是否禁用),需要排序 order by.
通用Dao实现
package com.ecd.dao.div;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
/**
*
* @author Administrator
*
* @param <T>实体类
* @param <K>查询条件
*/
public interface CommonDao<T, K> {
/**
*
* @param tableName 查询表名
* @param colName 查询列名
* @param example 查询条件
* @return 有序键值对(key-value) List<Map<String,String>>
*/
public List<Map<String, String>> select(@Param("tableName") String tableName,
@Param("colName") List<String> colName, @Param("example") K example);
}
XML文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ecd.dao.CommonDao">
<sql id="Example_Where_Clause">
<where>
<foreach collection="example.oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" suffix=")" prefixOverrides="and">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<select id="select" resultType="java.util.Map">
select
<if test="colName!=null">
<foreach collection="colName" item="listItem" separator=",">
${listItem}
</foreach>
</if>
from ${tableName}
<if test="example!= null">
<include refid="Example_Where_Clause" />
</if>
<if test="example.orderByClause != null">
order by ${example.orderByClause}
</if>
</select>
</mapper>
Service层调用
@Autowired
private CommonDao<BizGift, BizGiftExample> dao;
public String select() {
//查询表
String tableName="biz_gift";
//指定查询列
List<String> colName = new ArrayList<String>();
colName.add("id");
colName.add("giftname");
//查询条件
BizGiftExample example = new BizGiftExample();
BizGiftExample.Criteria criteria = example.createCriteria();
criteria.andStatusEqualTo(Boolean.FALSE);
example.setOrderByClause("sort");
List<java.util.Map<String, String>> list = dao.select(tableName, colName, example);
return success(0, list);
}