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的,不管表如何,一般都返回保存的实体对象。
来自:http://www.cnblogs.com/linjiqin/archive/2012/06/01/2529829.html
ibatis注意要点的更多相关文章
- 值得注意的ibatis动态sql语法格式
一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): da.huying.usermanag ...
- [入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一)
[入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一) Date 周二 06 一月 2015 By 钟谢伟 Tags mvc4 / asp.net 示 ...
- Spring+ibatis动态管理数据源
Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性.而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时 ...
- iBatis.net 循环iterate,没有foreach
3.9.4. Iterate Element This tag will iterate over a collection and repeat the body content for each ...
- ibatis 轻松入门
1.总中的配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig ...
- IBatis.Net使用总结(四)-- IBatis 调用存储过程
IBatis 调用存储过程 http://www.cnblogs.com/jeffwongishandsome/archive/2010/01/10/1543219.html http://www.c ...
- MyBatis-Exception:org.apache.ibatis.exceptions.PersistenceException
错误信息如下: HTTP Status 500 - org.mybatis.spring.MyBatisSystemException: nested exception is org.apache. ...
- Exception:HTTP Status 500 - org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
主要错误信息如下: HTTP Status 500 - org.apache.ibatis.binding.BindingException: Invalid bound statement (not ...
随机推荐
- c#: UrlDecode()
1.源起: KV需要解析从插件传来的URL网址,因为其可能经过编码,所以需要解码. 初用System.Web.HttpUtility.UrlDecode()这个函数,但根据用户环境crash场景,发现 ...
- c#调用dll接口传递utf-8字串方法
1. 起源: VCU10之视频下载模块,采用纯python编码实现,c++代码调用pythonrun.h配置python运行环境启动python模块,编译为dll给c#调用,以使界面UI能够使用其中功 ...
- 896. Monotonic Array单调数组
[抄题]: An array is monotonic if it is either monotone increasing or monotone decreasing. An array A i ...
- Extract Dataset
FROM <SAP PROGRAM DESIGN> Extract Datasets简称为Extract,是SAP中除了内表之外的另一种大量内存数据处理方式,允许用户动态地存储并排序结构化 ...
- day 12 内置函数,装饰器,递归函数
内置函数 内置函数:python给咱们提供了一些他认为你会经常用到的函数,68种 内置函数 abs() dict() help() min() setattr() all() di ...
- Shell脚本break和continue命令
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用 break 和 continue 来跳出循环. break命令 允许跳出所有循环(终止执行后面的所有循环). continu ...
- centos7下keepalived1.3.4安装与使用
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障. 一.下载keepalived http://www.keepalived.org/ 如 ...
- ie6 PNG图片透明
_background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/videoTips.pn ...
- JS 实现 jQuery的$(function(){});
1.浏览器渲染引擎的HTML解析流程 何谓“渲染”,其实就是浏览器把请求到的HTML内容显示出来的过程.渲染引擎首先通过网络获得所请求文档的内容,通常以8K分块的方式完成.下面是渲染引擎在取得内容之后 ...
- 洛谷1288 取数游戏II
原题链接 因为保证有\(0\)权边,所以整个游戏实际上就是两条链. 很容易发现当先手距离\(0\)权边有奇数条边,那么必胜. 策略为:每次都将边上权值取光,逼迫后手向\(0\)权边靠拢.若此时后手不取 ...