zoukankan      html  css  js  c++  java
  • ibatis注意要点

    一、ibatis的关键字like查询

    select * from t_student where s_name '%张%';

    这种like语句在ibatis中怎么写,他们现在的项目是用ibatis作为持久层的框架。

    我的第一反应是这样写:
    <select id="showOneStudentByName" parameterClass="String" resultMap="studentORM">
         select * from t_student where s_name like #name#
    </select>

    但是在调用中需要在参数的前后加上%,比如这样:
    return sqlMapper.queryForList("showOneStudentByName", "%"+name+"%");

    虽然这样可行,但总显得有些不协调。仔细看了ibaitis的文档后发现最好的写法是这样
    <select id="showOneStudentByName" parameterClass="String" resultMap="studentORM">
       select * from t_student where s_name like '%'||#name#||'%'
    </select>

    在调用的时候就不用去前后加%了。

    注意:sql语句不要写成select * from t_student where s_name like '%$name$%',这样极易受到注入攻击。
    网上搜了一下ibatis的关于like的使用,撇开 '%$xxx$%' 不讲。网上的解决方法如下:

    select *   
    from user  
    where username like '%'||#username#||'%'

    其实上面的语句是针对Oracle 的,对于不同数据库字符串连接符不一样。 现列举mysql

    select *   
    from user  
    where username like concat('%', #username#, '%') 

                

    二、ibatis操作陷阱
    在使用iBatis操作数据的时候,容易跌入陷阱。
    1、保存insert方法
    在保存数据方面,iBatis的insert方法返回的是新增记录的主键,类型为Object,但实为整型,有时候会让人误解为实体类型,也并非任何表的insert操作都会返回主键----这是一个陷阱。
    要返回这个新增记录的主键,前提是表的主键是自增型的,或者是Sequence的。否则获取新增记录主键的值为0或者null。
    对于oracle这样来写:
    <selectKey resultClass="int" keyProperty="id">
    <![CDATA[
    select hibernate_seq.nextval as id from dual
    ]]>
    </selectKey>
    对比Hibernate返回的Serializable类型,实际上也是主键。
    2、更新删除update/delete方法
    返回影响的记录行数。
    3、对DAO/Service设计时候的影响
    1)、对于自增主键类型表,DAO的save方法可以返回主键、或者实体对象(该对象的标识符域会填充上主键值)。
    2)、对于非自增主键类型表,DAO的save方法,在保存之前就指导整个实体对象的所有值(包括主键),因此返回什么 都可以,也可以不返回值。
    3)、对于Service的,不管表如何,一般都返回保存的实体对象。

    -----------------------------------------------------------------------------------  

    Blog:http://www.cnblogs.com/linjiqin/
    J2EE、Android、Linux、Oracle QQ交流群:142463980、158560018(满)

    题外话:
    本人来自铁观音的发源地——泉州安溪,正宗安溪铁观音,有需要的友友欢迎加我Q:416501600。
    茶叶淘宝店:http://shop61968332.taobao.com/  

  • 相关阅读:
    训练集、验证集和测试集的区别
    视频分类论文“Towards Good Practices for Very Deep Two-Stream ConvNets”程序运行过程
    201571030304/201571030311《小学四则运算练习软件软件需求说明》结对项目报告
    201571030304/201571030311《小学四则运算练习软件》结对项目报告
    实验二 软件工程个人项目
    实验一 软件工程准备
    MySQL的卸载与安装
    大宗商品
    Web_Servlet四大域对象
    Web_Servlet之间请求转发
  • 原文地址:https://www.cnblogs.com/linjiqin/p/2529829.html
Copyright © 2011-2022 走看看