ibatis中参数传入是parameterMap需要注意的一个问题

今天遇到一个问题,弄了一会结果是被一个简单的东西坑了。


如下的配置

<select id="query1" parameterMap="parameterMap1" resultMap="resultMap1">
 		<![CDATA[ 
                 SELECT * 
                 FROM b_p2pclientsum 
                 WHERE dtime >= ? and dtime <= ?
             ]]>
 	</select>

平时我常用是直接传入Map,不需要再构造别的bean。如下

 	<parameterMap class="java.util.Map" id="parameterMap1">  
  		<parameter property="para1"/>  
 	 	<parameter property="para2"/>  
 	</parameterMap>


Dao层如下

	public List<P2pClientSumCompatible> query1(String para1,String para2){
		System.out.println("====================================================开始query1");
		Map para = new HashMap();
		para.put("para1", para1);
		para.put("para2", para2);
		List<P2pClientSumCompatible> list = this.getSqlMapClientTemplate().queryForList("Pstest5765.query1", para);
		System.out.println("====================================================结束query1");
		return list;
	}

需要注意的是在一些sql中,字符串类型需要单引号包含住,但是在ibatis中不要使用单引号。如上面的para1和para2,将用单引号包住的平para1和para2传入Dao层的query1,导致where条件失效。

还有,表名是参数的时候不需要单引号,可以这样。如下

 	<select id="query11" parameterClass="java.util.HashMap" resultMap="resultMap4">
 	<![CDATA[
 				SELECT MAX(aa.a) AS field0
 				FROM (SELECT SUM(online_num) AS a,c_time
                	  FROM $para0$ WHERE data_status=1 AND c_time >= #para1# AND c_time <= #para2# 
                	  GROUP BY c_time ) 
                as aa
    ]]>
 	</select>

这里不用parameterMap,而是用parameterClass(因为试了下用?不行),将参数用$包起来,不会有单引号。

$与#的区别是:

Ibatis我们使用SqlMap进行Sql查询时需要引用参数参数引用遇符号#和$之间区分#进行与编译进行类型匹配而$进行数据类型匹配例: 
select * from table where id = #id# 其字段id字符型#id#表示'id'类型id整型#id#id类型 
select * from table where id = $id$ 字段id整型Sql语句会出错字段id字符型Sql语句应该写成 select * from table where id = '$id$'




mark下,长个记忆。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值