Mybatis使用map参数查询

在这里插入图片描述

Mybatis使用map参数查询,本文介绍两种方式:

以Map为参数直接查询。

以分页对象中的Map作为参数查询。

  1. 第一种: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

结束,欢迎反馈。

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis 中,你可以使用动态 SQL 来遍历 Map 进行查询。下面是一个示例: ```xml <select id="selectByMap" parameterType="java.util.Map" resultType="your.package.YourResultType"> SELECT * FROM your_table WHERE <foreach collection="yourMap" item="value" index="key" separator="AND"> ${key} = #{value} </foreach> </select> ``` 在上面的示例中,`selectByMap` 是你定义的 SQL 映射语句的 ID。`parameterType` 指定了传入的参数类型为 `java.util.Map`,`resultType` 指定了查询结果的类型。 在 `<foreach>` 标签中,`collection` 属性指定了要遍历的 Map 对象,`item` 属性指定了当前遍历的 value,`index` 属性指定了当前遍历的 key。`separator` 属性指定了在每个条件之间的分隔符(这里使用了 "AND")。 `${key}` 和 `#{value}` 分别表示动态 SQL 中的属性占位符,`${key}` 使用的是字符串替换,而 `#{value}` 使用的是预编译参数使用上述示例后,你可以通过传入一个 Map 对象来进行查询,其中 Map 的 key 对应数据库表的列名,value 对应需要匹配的值。例如: ```java Map<String, Object> paramMap = new HashMap<>(); paramMap.put("column1", "value1"); paramMap.put("column2", "value2"); YourResultType result = sqlSession.selectOne("selectByMap", paramMap); ``` 上述示例中,`column1` 和 `column2` 是数据库表的列名,`value1` 和 `value2` 是对应的匹配值。执行查询后,将返回一个 `YourResultType` 类型的对象。 这是一种通过遍历 Map 进行查询的方式,你也可以根据具体的需求进行适当的修改。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值