`

ibatis实战之使用内联参数--用#做占位符

 
阅读更多

ibatis实战之使用内联参数--用#做占位符

----------

 

内联参数就是一种在已映射语句中添加查询条件的简单方式,你可以使用两个不同的方法来设置内联参数

第一个方法是使用散列(#)符号。以下的例子就使用#符号传递进一个简单的内联参数,以通过accountId值来获取一个唯一的Account bean:

 

<select accountId,
	username,
	password,
	firstName,
	lastName,
	address1,
	address2,
	city,
	state,
	postalCode,
	country
	from Account 
	where accountId = #value#
</select>

 

上面这条已映射语句中的字符串#value#是一个占位符,用于告诉ibatis你将传递一个简单参数,ibatis在执行该已映射语句之前会使用此参数来设置SQL。该已映射语句可以用如下方式调用:

 

account = (Account)sqlMap.queryForObject("Account.getByIdValue",new Integer(1));

 

下面花一点时间来看一下ibatis框架是如何处理该语句的。首先,ibatis将查找名为Account.getByIdValue的已映射语句,并把#value#占位符变换为一个预备语句参数,见如下代码的最后一行:

 

select accountId,
	username,
	password,
	firstName,
	lastName,
	address1,
	address2,
	city,
	state,
	postalCode,
	country
from Account
where accountId = ?

 

然后,ibatis将这个参数的值设置为1,并执行该预备语句。最后,ibatis接收该结果行,把它映射到一个java对象,并返回这个对象。尽管看上去这可能像是很底层的信息,但理解此处究竟发生了什么是非常重要的。有关ibatis最觉见的问题之一就是:“如何在WHERE子句中使用LIKE?”通过上面这条语句,你就可以很容易地明白:为何输入的参数必须具有通配符,以及为何它们不能被轻易地插入到SQL语句中。对于这个难题,有3种可能的解决方案:

1.在所传入的参数中使用SQL通配符

2.要搜索内容的文本必须是能够被参数化的SQL表达式的一部分。例如:'%'||#value#||'%'

3.改为使用替代语法(用$作占位符)

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics