`

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学习资料及个人学习笔记,对初学者很有用

    【ibatis学习资料及个人学习笔记】 Ibatis,作为一个轻量级的持久层框架,它在Java开发领域中占有重要地位。本资料包是针对Ibatis的学习资源集合,旨在帮助初学者快速掌握这一强大的数据库操作工具。Ibatis的核心...

    ibatis教程 输入参数详解

    关于从文档复制代码的问题,以及ibatis的概述、如何开始使用ibatis、构建SqlSessionFactory的方法(包括通过XML和不使用XML的方式)、获取SqlSession的过程、探索映射SQL语句的方法、命名空间的注意事项、作用域与...

    IBatis.NET开发文档

    - 动态SQL的最佳实践:分享编写高效动态SQL的技巧和注意事项。 通过深入学习这些文档,开发者可以熟练掌握iBATIS.NET,实现高效、灵活的数据访问,同时减少因为SQL语句硬编码在代码中而带来的维护难题。iBATIS的...

    ibatis3.1官方中文帮助文档

    9. **升级指南**:针对从旧版本升级到iBatis 3.1的用户,提供了详细的迁移步骤和注意事项。 通过深入阅读并实践《iBatis 3.1 官方中文帮助文档》,开发者不仅可以熟练掌握iBatis框架,还能更好地理解和运用SQL,...

    ibatis 学习笔记

    七、最佳实践与注意事项 1. 尽量避免在Mapper接口中直接使用SQL,而是利用动态SQL来提高代码复用。 2. 适当使用缓存,但要注意数据的一致性问题。 3. 对于复杂的查询,考虑使用存储过程,然后通过iBatis调用。 4. ...

    ibatis标签

    至于压缩包中的DE_iBATIS-SqlMaps-2_cn.pdf文件,这可能是一份关于iBATIS SqlMaps的中文文档,可能包含了对`&lt;iterate&gt;`标签的详细解释,包括其语法、使用场景、示例以及注意事项等内容。这份文档对于学习和理解...

    ibatis经验

    本篇文章将基于我的学习与实践经验,全面总结Ibatis的核心概念、主要功能以及在实际应用中的注意事项,帮助读者深入理解并熟练运用Ibatis。 ## 1. Ibatis简介 Ibatis是由Apache基金会维护的开源项目,它作为SQL映射...

    最好的ibatis教程实例(内有注释)

    5. **缓存机制**:Ibatis内置了本地缓存和二级缓存,可以提高数据读取效率,但同时也需要理解缓存的原理和注意事项,避免出现数据不一致的问题。 6. **事务管理**:在Ibatis中,你可以选择手动管理事务或者交给...

    Ibatis的相关指南

    - "ibatis开发人员指南.mht"、"ibatis开发人员指南2.mht"、"ibatis开发人员指南3.mht":这些指南可能涵盖了Ibatis的基础知识,安装配置,以及开发过程中的注意事项。 - "ibatis初步介绍.mht":针对初学者,可能...

    IBatis.Net流风通用管理框架源码.rar

    4. "广而告之.txt":可能包含开发者发布的公告、更新信息或者框架的使用注意事项。 5. "WebLib.HttpModules":这部分源码可能涉及到HTTP模块,用于处理HTTP请求,实现如URL重写、身份验证等功能。 6. "WebLib.Sys":...

    ibatis-2.3.4 开发包 及 官方权威文档(开发指南+入门教程)

    1. **release.txt**:通常包含版本发布信息,包括发布日期、主要更新内容和注意事项。 2. **license.txt**:Ibatis 的授权协议文件,详细规定了软件的使用、修改和分发权限。 3. **notice.txt**:可能包含版权和第三...

    ibatis3.0中in的用法

    #### 七、注意事项 1. **类型转换**:在使用`&lt;foreach&gt;`标签时,确保传入的参数类型与预期一致,例如如果期望的是一个整型列表,则应该传递一个`List&lt;Integer&gt;`类型的参数。 2. **性能考虑**:当`IN`语句中的值非常...

    struts2+spring+ibatis增删改查

    6. **注意事项**:在实际开发中,还需要考虑异常处理、安全性、性能优化等方面的问题。例如,使用Struts2的拦截器可以进行权限控制和日志记录;为了防止SQL注入,应使用iBatis的动态SQL或者预编译语句;同时,合理的...

    ibatis开发教程

    **Ibatis 开发教程** Ibatis 是一款轻量级的...通过这个中文 Ibatis 教程,读者不仅可以了解 Ibatis 的基本概念和用法,还能掌握实际开发中的技巧和注意事项,从而更好地在项目中应用 Ibatis 实现数据访问层的操作。

    Ibatis 入门小例子

    7. **注意事项** - 事务管理可以在SqlSession中手动控制,也可以在SqlMapConfig.xml中配置为自动提交。 - 使用#{id}这样的占位符可以防止SQL注入。 - Ibatis支持动态SQL,例如if、choose、when、otherwise等标签...

    ibatis MyEclipse 入门工程代码 图文教程

    七、注意事项 1. 数据库连接池的配置:确保数据库连接池配置正确,如Druid、C3P0等。 2. 错误处理:当出现SQL错误或配置错误时,Ibatis会抛出异常,要善于利用日志工具分析错误信息。 3. 关闭SqlSession:操作完...

    iBATIS-SqlMaps-2_cn.rar

    3. readme.txt:这是一个标准的文本文件,通常用于提供关于压缩包内容的简短说明,包括可能的注意事项、更新信息或者作者的联系方式等。 通过学习这个压缩包的内容,开发者可以掌握如何在Java项目中集成和使用...

    iBATIS-SqlMaps

    该框架的设计理念是简单性,与其他框架及对象关系映射工具相比,iBATIS-SqlMaps具有更低的学习曲线。用户只需要了解JavaBeans、XML以及SQL即可使用此框架。 #### 二、安装与升级 ##### 安装 iBATIS-SqlMaps的安装...

    struts2+spring+ibatis整合

    #### 五、注意事项 - **事务管理**:确保所有的数据库操作都在一个事务中完成,以保证数据的一致性和完整性。 - **异常处理**:对于可能出现的各种异常情况,应该有统一的处理机制。 - **性能优化**:考虑到性能...

    ch07_ibatisDemo.rar

    5. **README.md** - 可能包含项目简介、如何运行和注意事项等信息。 在MyBatis中,关键知识点包括: - **SQL映射**:通过XML文件或者注解来定义SQL语句,将SQL与Java代码分离,提高可维护性。 - **动态SQL**:...

Global site tag (gtag.js) - Google Analytics