1.insert,update,delete 返回值
(1).insert 返回的为插入的主键值,但必须在配置文件中加入<selectKey/>
   如果主键值为String
<selectKey resultClass="string" keyProperty="id">
   SELECT @@IDENTITY AS ID
</selectKey>

如果主键值为Int型
<selectKey resultClass="java.lang.Integer" keyProperty="id" >
   SELECT @@IDENTITY AS ID
</selectKey> 
或者
<selectKey resultClass="int" keyProperty="id">
   SELECT @@IDENTITY AS ID
</selectKey>
注:@@IDENTITY只是SQL Server的写法,其他数据库也有相关的属性。

(2).Update,和Delete返回为修改数据影响的条数;
2.SQL模糊查询的两种方法
(1).如果是模糊查询,在关键字传入前加‘%’; 例:String keyword=”%”+keyword+”%”;
(2).配置文件的写法: select name,sex from t_user where name like '%$name$%' 
3.在ibatis的bean.xml配置文件中,日期的转换
<![CDATA[
select count( 1 ) from dbu_window where   
(     
( DATE_FORMAT( '$dateStartTemp$', '%Y-%m-%d' ) >= f_start_date and
    DATE_FORMAT( '$dateStartTemp$', '%Y-%m-%d' ) <= f_end_date )
or     
( DATE_FORMAT( '$dateEndTemp$', '%Y-%m-%d' ) >= f_start_date and 
    DATE_FORMAT( '$dateEndTemp$', '%Y-%m-%d' ) <= f_end_date ) )
]]>
4.$sql$即程序预定义sql语句的应用
java代码:String selSql = "select count(*) from `bbs_config`;";
     sqlMapClient.queryForObject( "execSelSqlStr" , selSql );
bean.xml文件:
<select id="execSelSqlStr" resultClass="int" parameterClass="string">
   <![CDATA[   $sql$   ]]>
</select>
5.ResultClass和ResultMap的区别
resultClass:可以把结果自动映射到相应的JAVA类中,但无法指定输出字段的类型,会对性能产生轻微的影响。
resultMap:可以预先定义resultMap元素,可以控制数据如何从结果集中取出,以及哪个属性匹配哪个字段,

parameterClass和parameterMap的区别
parameterClass属性值是JAVA类的全限定名,目的是限制输入参数的类型为指定的JAVA类,如果不指定,任何带有合适属性(get/set方法)的JAVA BEAN都可以作为输入参数
parameterMap:预先定义parameterMap的属性值,用于有次序的参数匹配JDBC符号
6.“#”和“$”的区别
“#” 为占为符,#在是用prepareStatement的?插入参数,$是文本替换
“$”为直接替换,但为出现SQL引入问题和性能上的影响,like,limit和表名的引入必须使用“$”
7.where 条件的组装
<isEqual>         比较属性值和静态值或另一个属性值是否相等
<idNotEqual>      比较属性值和静态值或另一个属性值是否不相等
<isGreaterThan>    比较属性值是否大于静态值或另一个属性值
<isGreaterEqual>   比较属性值是否大于等于静态值或另一个属性值
<isLessThan>      比较属性值是否小于静态值或另一个属性值
<isLessEqual>     比较属性值是否小于等于静态值或另一个属性值
<isNull>          检查属性是否为NULL
<isNotNull>       检查属性是否不为NULL
<isEmpty>        检查属性是否为NULL或空
<isNotEmpty>     检查属性是否不为NULL或不为空
<isPropertyAvailable>       检查是否存在该属性
<isNotPropertyAvailable>    检查是否不存在该属性
8.<![CDATA[ ]]>的含义
用了特殊字符的SQL语句(比如>,<)不能直接使用。必须用<![CDATA[ ]]>
9.ibatis自带缓存的运用
<cacheModel id=”person-cache” implementation=”LRU”>
   <flushInterval hours=”24”/>       //可以用hours/minutes/second
   <flushOnExecute   statement=”selectperson”/>    //需要缓存的方法,可以为多个
   <property name=”size” value=”1000”/>
</cacheModel>

缓存策略:
   LRU:最近最少使用
   MEMORY:适用于没有统一的对象重用模式,property的属性值必须是STRONG,
   SOFT,WEAK,这三个值分别对应于JVM不同内存reference类型。
   WEAK,大多数情况下,WEAK是最佳选择,缺省值就是WEAK,它能大大提高常用查询的性能,对于当前不被使用的查询数据,将被清除
   SOFT,在查询结果对象不被使用,可以减少内存不足的可能性
   STRONG,对查询的结果一直保留在内存中,可以使用在数据量很少或者静态数据的时
   FIFO:先进先出
   OSCACHE:配置oscache.properties
10.value的使用
假如没有必要写JAVA BEAN作为参数,可以直接使用基本类型,也可以直接传入参数值。如果是直接传入参数值就配置文件中必须写 #value#做为参数传入
11.事务的处理
startTransacton();
commitTransaction();
rollbackTransaction();

批处理
如果有很多非查询的(insert/update/delete)语句要处理,为了减少网络通讯的流量,可以进行批处理
sqlMaClientp.startBatch();
sqlMapClient.endBatch();

12.iterate在ibatis里的运用,List参数名后面一定要加“[]”,防止解析器简单的把List解析成String
<select id="getUserInfoByName" resultMap="userResult" parameterClass="java.util.List">
select * from tuserinfo where f_user_code in
    <iterate open="(" close=")" conjunction="," >
<![CDATA[
           #value[]# 
        ]]>
   </iterate>
</select>

13.xmlResultName的运用 详细输出结果,直接把查存出来的结果映射成XML document
   <select id="getUser" parameterClass="user" resultClass="xml" xmlResultName="person">
    <![CDATA[ 
        select name,sex from t_user where id = #id# 
     ]]>
   </select>

String xml= (String)sqlMapClient.queryForObject("getUser",user );
System.out.println(xml);

<?xml version="1.0" encoding="UTF-8"?>
   <person>
      <name>we are good !</name>
      <sex>2</sex>
   </person>
14.分页功能的实现
1). 用ibatis自带的分页功能,但是自带分页是把所有数据读入内存再分页的,所以必须自己覆写LimitSqlExecutor方法,
2). 直接使用limit实现
15.ibatis的IDE:http://ibatis.apache.org/ibator.html
16.容易出错的地方 :
1) 在parameterMap和resultMap中,字段数据类型是java.sql.Types类定义的常量名称。常用的数据类型包括BLOB,CHAR,CLOB,DATE,LONGVARBINARY, INTEGER,NULL,NUMERIC,TIME,TIMESTAMP和VARCHAR等。 
2) 对于数据表中NULLBALE的字段,必须在parameterMap和resultMap中指定字段的数据类型。 
3) 对于数据类型是DATE,CLOB或BLOB的字段,最好在parameterMap和resultMap中指定数据类型。 
4) 对于二进制类型的数据,可以将LONGVARBINARY映射成byte[]。 
5) 对于文本类型较大的数据,可以将CLOB映射成String。 
6) Java Bean必须拥有缺省的构造器(即无参数的构造器)。 
7) Java Bean最好实现Serializable接口,以备应用的进一步扩展。

17.曾经写了一个ibatis动态查询的例子:
排序代码如下:
<dynamic prepend=" order by">
<isNotNull property="sortName">
   <isNotEqual property="sortName" compareValue="">
    <![CDATA[#sortName# ]]>
   </isNotEqual>
</isNotNull>
<isNotNull property="sortSequence">
   <isNotEqual property="sortSequence" compareValue="">
    <![CDATA[ #sortSequence# ]]>
   </isNotEqual>
</isNotNull>
</dynamic>
竟然无法排序,后来查了下资料,把“#”改成了“$”就可以了。
现总结下经验:#xxx# xxx代表是属性值,map里面的key或者是你的pojo对象里面的属性,ibatis会自动在它的外面加上引号,表现在sql语句是这样的 where xxx = 'xxx' ;而$xxxx$ 则是把xxxx作为字符串拼接到你的sql语句中,比如 order by topicId , 如果你不用$来拼接而用#的话,外面就会被加上引号,比如你的语句这样写 ... order by #xxx# (xxx就是你传进来的字符串topicId),ibatis 就会把他翻译成 order by 'topicId' 这样就报错了,用$的结果就是这样 order by topicId。

18.ibatis通用sql语句可以单独定义如:
<sql id="whereTemplate">
<dynamic prepend="where">
   <isNotNull prepend="and" property="id">
    <![CDATA[ id = #id# ]]>
   </isNotNull>
</dynamic>
</sql>

<select id="coreGetCountAll" resultClass="java.lang.Integer" parameterClass="coreNote">
<![CDATA[ SELECT COUNT( 1 ) FROM note ]]>
<include refid="whereNoteTemplate" />
</select>

ibatis经验的更多相关文章

  1. IBatis.Net项目数据库SqlServer迁移至Oracle经验

    最近完成了一个(IBatis.Net+MVC)项目的数据库+代码迁移工作,可把我折腾得~~~ IBatis.Net是一个ORM框架,具体介绍可以问度娘.我之前没用ORM框架使用经验,所以这一路我不是走 ...

  2. ibatis 开发中的经验 (一)ibatis 和hibernate 在开发中的理解

    这个项目的底层是用ibatis框架完毕,这几天也是都在用这个框架写代码,也有了一些简单的理解,把项目拿过来后基本的配置都已经配置好了,比方一些事务.日志控制等,在开发中主要用到的是写SQL语句以及熟悉 ...

  3. ibatis 开发中的经验 (三)Struts+Spring+Ibatis 开发环境搭建

             ibatis项目中用到了一些基本配置,须要和spring集成,看了看这些配置大部分同hibernate中是一样的,也比較好理解.仅仅是须要他们的配置中每个类的含义,还有当中的一些细节 ...

  4. IBatis和Hibernate区别

    1. 简介 Hibernate是当前最流行的O/R mapping框架.它出身于sf.net,现在已经成为Jboss的一部分了.iBATIS是另外一种优秀的O/R mapping框架,现已改名叫myB ...

  5. Hibernate和IBatis对比

    [转自]http://blog.csdn.net/ya2dan/article/details/7396598 项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, 也 ...

  6. ibatis轻松入门

    近日,由于公司项目应用开发的逻辑层使用的是iBatis.上网查了些资料,自己写了点demo入门.感觉良好.iBatis实在是比Hibernate很容易入门,贡献出来与各路菜鸟分享(后文附源码),希望得 ...

  7. iBatis.Net实现返回DataTable和DataSet对象

    如题.要返回一个ADO.NET对象好像没有使用ORM的必要,而且从编程的角度看这样的实现一点也不OO,但是实际的开发场景中还是会碰到这种需求的.下面我就借鉴前人的经验,结合实际的示例,再总结一下.如果 ...

  8. oracle ibatis 存储过程 返回游标 嵌套表

    自己解决问题了 问题总结: 1.index by表不能存储在数据库中的type中,故选择嵌套表. 2.ibatis不支持oracle的复合数据类型的返回.(个人理解) 3.替代方案:用返回oracle ...

  9. ibatis面试笔记

    ibatis是在结果集与实体类之间进行映射hibernate是在数据库与实体类之间进行映射Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序 ...

随机推荐

  1. HDU 5884 Sort (二分+k叉哈夫曼树)

    题意:n 个有序序列的归并排序.每次可以选择不超过 k 个序列进行合并,合并代价为这些序列的长度和.总的合并代价不能超过T, 问 k最小是多少. 析:首先二分一下这个 k .然后在给定 k 的情况下, ...

  2. 洛谷 - P1198 - 最大数 - 线段树

    https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...

  3. HDU6024:Building Shops(DP)

    传送门 题意 在一条直线上有n个教室,现在要设置糖果店,使得最后成本最小,满足以下两个条件: 1.若该点为糖果店,费用为cost[i]; 2.若不是,则为loc[i]-最近的糖果店的loc 分析 dp ...

  4. U3D 的一些基础优化

    1.在使用数组或ArrayList对象时应当注意 [csharp] view plaincopy length=myArray.Length; for(int i=0;i<length;i++) ...

  5. linux 读取部分文件内容

    一般我们在linux上读取文件,是用vi工具,如果是写shell 脚本时,一般式通过cat 再 使用管道来达到流的处理. 但如果文件太大,单纯的cat 可能会使用过多的内存,而且实现上还需要后续的加工 ...

  6. noip 2012 Day2 T2 借教室

    一.暴力简述 甩链接.jpeg 首先我们不难看出,这道题————并不是一道多难的题,因为显然,第一眼看题目时便很容易地想到暴力如何打:枚举每一种订单,然后针对每一种订单,对区间内的每一天进行修改(做减 ...

  7. Luogu P1417烹调方案【dp/背包】By cellur925

    题目传送门 我们看到这道题,就会想起背包.于是我就一顿01背包敲,结果发现只有30分.后来看题解发现需要对输入的食材进行排序. 我们回想国王游戏一题,各位大臣的排列顺序会对权值造成影响,所以我们就预先 ...

  8. 如何使用go打出hell word

    今天给大家带来一篇如何使用go打出hell word(手动滑稽) 关于go介绍的话,我就不多说了,在百度上一搜一大堆, 要使用的软件Visual Studio Code(VScode) 下载go的地址 ...

  9. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) D

    Description A tree is an undirected connected graph without cycles. The distance between two vertice ...

  10. 剪花布条 HDU - 2087

    剪花布条 HDU - 2087 要求各个匹配出来的子串不重叠的kmp.实际上直接贪心从前往后找,每找到一个就把当前j标为0即可.(一般kmp是标为f[j]) #include<cstdio> ...