问题:在做数据库操作的时候,经常要传多参数进sql语句,以前版本的ibatis,不支持直接传多个参数进来,只能压入对象或者HashMap中,这样实在不是很方便。
在现在的版本,终于有了支持。
官方文档:
你可以传递多个参数给一个映射器方法。如果你这样做了,默认情况下它们将会以它们
在参数列表中的位置来命名,比如:#{0},#{1} (位置从0开始)等。如果你想改变参数的名称(只在多参数情况下),
那么你可以在参数上使用@Param(“paramName”)注解。在用到like进行模糊匹配的sql语句里,用下标的方式会报错,得用给参数重命名的方式才行。
例子:
public AddrInfo getAddrInfo(@Param("corpId")int corpId,@Param("addrId")int addrId);
xml配置这样写:
<select id="getAddrInfo" resultMap="com.xxx.xxx.AddrInfo">
SELECT * FROM addr__info where addr_id=#{addrId} and corp_id=#{corpId}
</select>
以前在<select>语句中要带parameterType的,如:
parameterType 可以是别名或完全限定名 ,map->java.util.Map,这两个都是可以的
-->
<selectid=
"selectBlogByMap"
parameterType=
"map"
resultType=
"Blog"
>
SELECT t.ID, t.title, t.content
FROM blog t
WHERE t.title = #{h_title}
AND t.content =#{h_content}
</select>
/**
* 通过Map传递多个参数
*/
@Test
public
void
testSelectByMap() {
SqlSession session = sqlSessionFactory.openSession();
Map<String, Object> param=
new
HashMap<String, Object>();
param.put(
"h_title"
,
"oracle"
);
param.put(
"h_content"
,
"使用序列!"
);
Blog blog = (Blog)session.selectOne(
"cn.enjoylife.BlogMapper.selectBlogByMap"
,param);
session.close();
System.out.println(
"blog title:"
+blog.getTitle());
}
|