IBATIS学习中需要注意的问题

ibatis使用过程中应该知道的知识:
1.占位符

是占位符,$是字符串拼接。id = #id# 生成的sql语句是 id = ? 使用的是PreparedStatement,执行时,通过setXXX方法,将值加入到sql语句中。

若字段id为String类型,传递的参数id为1,
则 id = #id# 实际SQL为:select * from user where a = ‘1’;
而 id = id 实际SQ*强调内容L为:select from user where a = 1;
注:尽量用#id# 而不要用 id ,因为后面这种只是拼接,很容易被sql注入攻击。

2.动态生成查询的结果列:
有时会出现不能动态生成查询结果列的情况,那是因为ibaits 会缓存查询的meta信息,所以在生成动态列时一定要加上 remapResults=”true”。
[html] view plain copy

<span style="font-size:14px;"><select id="getxx" resultClass="java.util.HashMap" parameterClass="map" remapResults="true"></span>

3.动态指定表名
有时会碰到2张表结构相同,但是表名不一样的情况,这时候查询语句中的表名就需要动态指定了。这时只能用 tableName ,而不能用#tableName#。
[html] view plain copy
<span style="font-size:14px;">select * from $tableName$
where id = #id#</span>

4.动态标签里面的属性
1)dynamic的prepend只要检测到第一个条件为“真”的比较元素,则覆盖其prepend属性并组装where关键字为动态SQL的一部分。 如果dynamic下面第一条动态标签不含prepend属性,则会覆盖第二个条件为“真”的动态标签的prepend属性值,所有最好每个动态标签都加上prepend属性。
2)isNotNull的prepend=’and’ 只要检测到参数值满足比较条件,则前置组装and关键字为动态SQL的一部分。

5.动态sql片段

[html] view plain copy
//动态sql片段  
    <sql id="sql_count">  
                select count(*)  
        </sql>  
        <sql id="sql_select">  
                select *  
        </sql>  
        <sql id="sql_where">  
                from student  
                <dynamic prepend="where">  
                        <isNotEmpty prepend="and" property="name">  
                                name like '%$name$%'  
                        </isNotEmpty>  
                        <isNotEmpty prepend="and" property="no">  
                                no like '%no$%'  
                        </isNotEmpty>   
                </dynamic>                 
        </sql>  
        <select id="findStudentCount" parameterClass="map" resultClass="int">  
                <include refid="sql_count"/>  
                <include refid="sql_where"/>  
        </select>  
        <select id="findStudent" parameterClass="map" resultMap="student.result_base">  
                <include refid="sql_select"/>  
                <include refid="sql_where"/>  
        </select>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值