1.对于多参数的问题:
在ibatis中,会发现其输入参数只能有一个,于是当出现需要进行多个输入参数的时候,就要想点办法了,我看到的有以下两种比较好的方法能够解决这个问题
用String代替
<select id="checkLogin" parameterClass="java.lang.String" resultClass="java.lang.Integer">
SELECT count(*) AS value FROM userinfo WHERE $sql$
</select>
比如如上的map statement代码中,将输入的参数设置为String类型,而在select语句中直接使用该String,于是用户可以在Java程序代码中手工植入需要匹配的参数。
String sql = "uid = '" + username + "' and pwd='" + password + "'";
Integer r = (Integer) sqlMap.queryForObject("checkLogin", sql);
这个方法很简单,但是弊端也很多。首先得需要用户自己手动写sql语句代码在java中,这与ibatis的本质要将数据层的操作和业务逻辑操作分隔开来是违背的。其次,这个办法可能会被利用造成sql injection的问题。比如在sql语句的最后加上一句;drop some table。这样的结果显而易见,就是灾难性的。
用 Map
情形一:
<select id="checkLogin2" parameterClass="java.util.Map" resultClass="java.lang.Integer">
SELECT count(*) AS value FROM userinfo WHERE uid=#uid# and pwd=#pwd#
</select>
这种办法显得要清楚的很多,也不需要自己手动编写sql到java之中。
Map map=new HashMap();
map.put("uid", username);
map.put("pwd", password);
Integer r = (Integer) sqlMap.queryForObject("checkLogin2", map);
在java中首先生成需要的map,然后作为输入参数传入即可。这个方法应该是比较好的,值得推荐。
情形二:
在方法体里:我们把多个参数存放在map里,然后在前面获得它:
Map map = new HashMap();
map.put("userid", userid);
map.put("name", name);
cardList = (List)sqlMapClient.queryForList("findByName", map);
在SQL语句中:
<select id="findByName" parameterClass="java.util.Map" resultClass="Card">
select * from cardinfo where userid=#userid# and name like '$name$'
</select>
这样就可以将多个参数传过去了。
2.ibatis动态update:
情形一
<update id="updateUser" parameterClass="user">
update user
<dynamic prepend="set">
<isNotNull prepend="," property="username">
username=#username#
</isNotNull>
<isNotNull prepend="," property="password">
password=#password#
</isNotNull>
</dynamic>
where id=#id#
</update>
情形二
<update id="updateUser" parameterClass="user">
update table
set ID=#ID#
<isNotEmpty prepend="," property="name">
NAME=#name#
</isNotEmpty>
<isNotEmpty prepend="," property="pwd">
PWD=#pwd#
</isNotEmpty>
<isNotEmpty prepend="," property="add">
ADD=#add#
</isNotEmpty>
where ID=#ID#
</update>
3.ibatis中的#和$的使用区别:
在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$'
说通俗一点就是:
$中间的变量就是直接替换成值的
#会根据变量的类型来进行替换
比如articleTitle的类型是string, 值是"标题"的时候
$articleTitle$ = 标题
#articleTitle# = '标题'
相关推荐
IBatis3.0学习IBatis3.0学习IBatis3.0学习IBatis3.0学习IBatis3.0学习IBatis3.0学习IBatis3.0学习
ibatis开发指南 ibatis资料文档 ibatis2.x_jar包 ibatis源码 ibatis实践项目
ibatis 学习笔记 ibatis 学习笔记 ibatis 学习笔记 ibatis 学习笔记 ibatis 学习笔记 ibatis 学习笔记 ibatis 学习笔记 ibatis 学习笔记
ibatis学习总结,oracle 学习总结,大数据量处理
J2EE学习 Ibatis开发资料共享 Ibatis开发资料 Ibatis学习框架 Ibatis开发概要
ibatis学习 ibatis总结 ibatis ibatis ibatis
ibatis学习资料ibatis学习资料ibatis学习资料ibatis学习资料ibatis学习资料ibatis学习资料ibatis学习资料ibatis学习资料ibatis学习资料ibatis学习资料ibatis学习资料ibatis学习资料
ibatis 学习资料 spring ibatis 学习资料 spring ibatis 学习资料 spring
IbatisDemo 博文链接:https://xdjava.iteye.com/blog/1070408
iBATIS入门学习
IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得
Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料
1.iBatis2学习笔记:基本原理和配置.doc 2.iBatis2学习笔记:与Spring2的整合.doc 3.iBatis2学习笔记:单表映射 .doc 4.iBatis2学习笔记:SqlMap的配置总结(18条).doc 5.iBatis2学习笔记:入参和返回值的问题.doc ...
ibatis学习笔记 ibatis学习笔记 ibatis学习笔记 ibatis学习笔记 ibatis学习笔记 ibatis学习笔记 ibatis学习笔记
Ibatis.net学习和实例Ibatis.net学习和实例Ibatis.net学习和实例Ibatis.net学习和实例
相对于Hibernate和Apache OJB等“一站式”ORM解决方案而言,IBatis是一种“半...它需要学习的东西很少,在连接表或复杂查询时也不需要复杂的scheme(怎么翻complex scheme?),使用SQL Maps, 你可以自由的使用SQL语句。
这篇iBatis 学习笔记是跟着传智播客的视频学习整理的,理解上难免有些错误,请以视频为 根本,有些地方笔记中没有整理到,因为这是我之后看着自己做的工程项目总结的,和视频 不完全一致。请谅解。
ibatis的简介和操作,是初学者的不二选择,讲解清晰明了
从网上找了一点关于ibatis的学习资料,作为保存,有兴趣的朋友用的上的直接下了!