`

ibatis学习注意事项

阅读更多

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# = '标题'

分享到:
评论

相关推荐

    IBatis学习

    IBatis3.0学习IBatis3.0学习IBatis3.0学习IBatis3.0学习IBatis3.0学习IBatis3.0学习IBatis3.0学习

    ibatis学习资料汇总

    ibatis开发指南 ibatis资料文档 ibatis2.x_jar包 ibatis源码 ibatis实践项目

    ibatis 学习笔记

    ibatis 学习笔记 ibatis 学习笔记 ibatis 学习笔记 ibatis 学习笔记 ibatis 学习笔记 ibatis 学习笔记 ibatis 学习笔记 ibatis 学习笔记

    ibatis学习总结,oracle , 敏捷开发,

    ibatis学习总结,oracle 学习总结,大数据量处理

    J2EE学习 Ibatis开发资料共享 Ibatis开发资料 Ibatis学习框架 Ibatis开发概要

    J2EE学习 Ibatis开发资料共享 Ibatis开发资料 Ibatis学习框架 Ibatis开发概要

    ibatis总结 ibatis 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 ibatis 学习资料 spring

    ibatis学习

    IbatisDemo 博文链接:https://xdjava.iteye.com/blog/1070408

    iBATIS入门学习

    iBATIS入门学习

    IBatis学习笔记以及使用心得

    IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得

    Ibatis 学习资料

    Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料Ibatis 学习资料

    iBatis2学习笔记

    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学习笔记

    Ibatis.net学习和实例~

    Ibatis.net学习和实例Ibatis.net学习和实例Ibatis.net学习和实例Ibatis.net学习和实例

    ibatis学习总结

    相对于Hibernate和Apache OJB等“一站式”ORM解决方案而言,IBatis是一种“半...它需要学习的东西很少,在连接表或复杂查询时也不需要复杂的scheme(怎么翻complex scheme?),使用SQL Maps, 你可以自由的使用SQL语句。

    持久层框架ibatis学习笔记

    这篇iBatis 学习笔记是跟着传智播客的视频学习整理的,理解上难免有些错误,请以视频为 根本,有些地方笔记中没有整理到,因为这是我之后看着自己做的工程项目总结的,和视频 不完全一致。请谅解。

    ibatis学习文档

    ibatis的简介和操作,是初学者的不二选择,讲解清晰明了

    关于ibatis 学习的文档(从百度文库搞过来的,斟酌)!

    从网上找了一点关于ibatis的学习资料,作为保存,有兴趣的朋友用的上的直接下了!

Global site tag (gtag.js) - Google Analytics