Mybatis使用map参数查询,本文介绍两种方式:
以Map为参数直接查询。
以分页对象中的Map作为参数查询。
- 第一种:Map为参数直接查询:
查询参数 :
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("begTime", begTime);
paramMap.put("endTime", endTime);
paramMap.put("goodsname", allgoodsname);
//查询方法
List<String> idList = mainMapper.selectMemberCard(paramMap);
Mapper层:
/**
* 根据时间和商品型号查询会员id集合
*
* @param paramMap
* @return
*/
List<String> selectMemberCard(Map<String, Object> paramMap);
Mapper.xml
<select id="selectMemberCard" parameterType="Map" resultType="String">
SELECT
customer_id AS customerId
FROM
main_order
WHERE 1=1
<if test="begTime != null and begTime != '' and endgTime != null and endgTime != ''">
and unix_timestamp(CHARGE_END_TIME) between
unix_timestamp(#{begoTime}) and
unix_timestamp(#{endgoTime})
</if>
<if test="goodsname != null and goodsname !='' ">
and goodsname like CONCAT('%','${goodsname}','%')
</if>
</select>
由于Mapper层没有使用@Param注解,所以在XMl直接去map里的参数名称即可取到值
2. 第二种 分页对象中的Map作为参数查询:
查询参数 (所有的查询参数都放到分页对象的Map集合中) :
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("begTime", begTime);
paramMap.put("endTime", endTime);
//分页查询会员信息
Page<MembershipCardInfo> pages = new Page<MembershipCardInfo>();
pages.setLimit(exportTemplateService.getMaxExportCount());
pages.setOffset(0);
pages.setParamMap(paramMap);
List<MembershipCardInfo> cardList = cardInfoMapper.selectcardListByValue(pages);
Pages分页实体对象
public class Page<T> implements Serializable {
private static final long serialVersionUID = -3323321457300243220L;
/** 总记录数 */
private long total;
/** 当前页对应的记录列表 */
private List<T> rows;
/** 分页查询条件对应的参数Map */
private Map<String, Object> paramMap;
/** 排序字符串 */
private String orderBy;
/**一次取多少条**/
private int limit;
/**从第几条开始去**/
private int offset;
Mapper层:
/**
*
* 根据会员开卡时间查询会员卡信息
* @param page
* @return
*/
List<MembershipCardInfo> selectExcelListByValue(
@Param("page") Page<MembershipCardInfo> page);
Mapper.xml
<select id="selectExcelListByValue" parameterType="map" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List" />
FROM
membershipcardinfo
WHERE 1 = 1
<if test="page.paramMap.begTime != null and page.paramMap.begTime != '' and page.paramMap.endTime != null and page.paramMap.endTime != ''">
and unix_timestamp(CREATE_TIME) between
unix_timestamp('${page.paramMap.begTime}') and
unix_timestamp('${page.paramMap.endTime}')
</if>
</select>
由于使用@Param注解,所以接收参数时先要找到注解的参数名page,然后找到page对象里的map集合,然后取集合中的某个参数。即page.paramMap.begTime
结束,欢迎反馈。