- 浏览: 822239 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (488)
- struts1 (4)
- spring (13)
- extjs (36)
- mysql (3)
- sqlserver (2)
- oracle (37)
- 杂谈 (11)
- 面试相关 (35)
- Java基础知识总结 (5)
- Java重要知识点 线程和io流知识点 (6)
- 服务器相关 (1)
- 生活 (1)
- jsp (7)
- servlet (2)
- junit (3)
- struts2 (9)
- 开发必备 (4)
- 使用开发工具总结的知识 (4)
- ibatis (12)
- ajax (2)
- dwr (2)
- jquery (1)
- 设计模式 (4)
- Lucene的学习 (5)
- 经验总结 (19)
- mysql全文搜索相关 (7)
- hibernate (33)
- Sphinx (1)
- log4j的总结 (1)
- 敏捷开发 (9)
- 持续集成 (15)
- UML使用总结 (1)
- Scrum (1)
- OO(面向对象编程) (1)
- struts1和struts2总结 (1)
- 数据库加密 (1)
- 多线程和Socket编程 (6)
- PowerDesigner (2)
- 权限相关 (1)
- ant应用总结 (4)
- 面试必知知识点总结 (6)
- io流与nio流总结 面试相关 (1)
- 敏捷管理工具的使用 (7)
- hsqldb相关 (1)
- svn源码相关 (2)
- debug调试技巧总结 (1)
- hibernate和ibatis对比相关 (6)
- eclipse mylyn 插件的使用总结 (2)
- fisheye使用总结 (2)
- java泛型总结 (1)
- ssh整合总结 (10)
- SpringSide的学习总结 (1)
- JPA学习总结 (2)
- RoR 总结 (2)
- 模型驱动 总结 (1)
- Oracle SQL优化技巧 (4)
- 数据库相关资料 (1)
- oracle练习相关 (4)
- PowerDesigner 使用总结 (2)
- Struts实现国际化相关 (2)
- 权限框架 Spring Security (1)
- freemarker使用总结 (1)
- jsp servlet总结相关 (3)
- Java NIO总结 (1)
- 自己学习必须 (3)
- 蝴蝶容器相关 (2)
- eclipse插件的使用 (1)
- myeclipse的使用 (1)
- flex相关 (1)
- javaeye重生后总结的知识点 (2)
- 公司学习总结 (3)
- JAXB 相关 (1)
- ECSide (1)
- EdoJs 企业ajax框架 (1)
- RSA加密算法 (1)
- jbpm相关 (1)
- JMF原理 (1)
- MyEclipse使用总结 (1)
- Funsion Charts 相关总结 (3)
- 常用知识2011 (2)
- Flex与Java整合 (1)
- IBM WebSphere相关 (1)
- jQuery使用技巧 (2)
- 2011年面试相关知识点总结 (2)
- sqlserver开发相关 (8)
- eclipse 打jar相关 (2)
- Oracle/Mysql/SqlServer比较 (1)
- WebService Axis1.4开发相关 (4)
- 进制数的转换 总结 (1)
- WebService Axis2.0开发相关 (0)
- iteye Struts2 Spring Hibernate整合相关 (3)
- iteye osgi资料相关总结 (1)
- iteye ifos相关相关 (1)
- iteye 国际化相关 (1)
- iteye Hibernate缓存机制 (4)
- iteye Struts2 总结 (1)
- iteye Struts标签总结 (0)
- iteye web配置文件大全 (6)
- iteye Efs 框架总结 (1)
- iteye sql优化 (2)
- iteye 大数据量高并发的数据库优化 (1)
- iteye 开发相关 (1)
- iteye s1sh 和 s2sh整合中的问题以及解决 (1)
- iteye s1sh整合实例 (1)
- iteye s2sh整合实例 (1)
- iteye 面试相关 基础篇 (1)
- iteye Android相关 (1)
- iteye 面试相关 Web篇 (1)
- iteye Sql Server相关 (0)
- iteye struts1与struts2比较 (1)
- iteye jquery 和Struts2 (0)
- iteye struts2与其他插件整合 (0)
- iteye jquery 开发相关 (1)
- iteye eclipse结合spket(Ext,Jquery)开发相关 (0)
- iteye myeclipse 使用技巧相关 (0)
- iteye Memcached 缓存系统相关 (0)
- iteye 常用软件相关 (0)
- iteye 最新技术预览 AjaxSwing (0)
- iteye struts上传下载相关 (0)
- iteye 新技术相关 (0)
- test (0)
- iteye 开发Java游戏相关 (0)
- iteye Java反编译 (0)
- iteye XML解析相关 (0)
- iteye 压缩ZIP相关 (0)
- iteye 面试相关 (0)
- iteye Android开发相关 (4)
- csdn (0)
- e-inoc (0)
- iteye http错误码对应说明 (0)
- iteye 面试扩展知识点 (0)
- iteye oracle面试相关 存储过程,触发器,游标等 (0)
- iteye english study (0)
- iteye starflow工作流引擎 (0)
- iteye IBM WebSphere Application Server Toolkit使用相关 (0)
- iteye spring3 (0)
- iteye mybatis (0)
- iteye js技巧总结 (0)
- iteye SEO优化相关 (2)
- iteye QUI网页界面集成框架 (1)
- iteye AjaxAnywhere (1)
- iteye Nutz相关 (1)
- iteye ibatis技巧 (0)
- iteye dwz (0)
- 128个ajax/javascript框架 (0)
- iteye 2012 Java Swing教程 (1)
- iteye 码头集装箱相关 (1)
- iteye swing (2)
- 兼职工作 (0)
- 2012 新总结的面试相关知识点 常用知识点 (1)
- 淘宝网店相关 (0)
- oracle 常用函数 2012新总结 (1)
- 我的时尚潮流屋 (0)
- 2012 年 面试新总结知识 (1)
- 技巧 (1)
- 2013总结 (1)
- 2015工作相关 (3)
- springmvc (5)
- EasyPR-Java (1)
- java (2)
- editplus 4.0 注册码 (1)
- android (1)
- oracle连接数据库相关 (1)
- 编程资料总结 (2)
- 20160808 (1)
- visio 2013 (1)
最新评论
-
drew926:
泛型的类型参数可以有多个?这是java哪个版本支持的?
java泛型总结 -
listenan:
赞!非常感谢。
Scrum总结 -
cwscwj:
写的很深刻,谢谢,看了一遍,过段时间打算再看一遍。
Scrum总结 -
hwedwin:
w
Struts 2中的OGNL\EL的使用总结 -
lanni2460:
不错 很好 支持……
sqlserver三个驱动包下载
1. IBatis简介
IBatis是以SQL为中心的持久化层框架,是一种“半自动化”的ORM实现。
IBatis不但提供了对象与关系数据库之间的映射,同时提供操作方法与SQL间的直接映射,设计者可以直接为一个方法指定一条SQL语句,从而取得更加准确的数据。因为 IBatis 的 sql 都保存到单独的xml文件中,有利于DBA对 sql 的 审核和优化。IBatis最大的特点就是小巧,上手很快,可维护性较好。
IBatis数据映射的工作流程图如图1所示:
图1:IBatis数据映射的工作流程图
2. 使用步骤
2.1 SQL Map 配置文件
SQL Map 配置文件中对<properties>、< settings >、< typeAlias >、< transactionManager >、< dataSource >、< sqlMap >等进行配置。
2.2 SQL Map映射文件
和 "IBatis总结" 有关的 java 编程小帖士:
strong>DataFormats.Format.win32Handle
指定一个boolean值,此值决定这个格式是否期望Win32句柄。
语法
public final boolean win32Handle;
构造器
在SQL Map映射文件中,可以定义的Statement 类型有<statement>、<insert>、<update>、<delete>、<select>、<procedure>。
可以使用缓存模式,Cache的3个重要属性是readOnly、serialize和type;Cache类型分为MEMORY、LRU、FIFO、OSCACHE四种。
2.3编写DAO
在DAO中,可以使用SqlMapClient提供的方法执行sql操作。
3. 开发过程中的注意点
1. 对Sequence主键,插入语句之前必须指定一个主键值给要插入的记录,否则无法插入。方法是在插入语句标签<insert....>之前配置上:
<insert id="addItemDO" parameterClass="TryItem">
<selectKey keyProperty="id" resultClass="int" type="pre">
select ITEM_ID.nextval as value from dual
</selectKey>
insert into item …
</insert>
2. 通过使用<![CDATA[……]]>,可以避免SQL 中与XML 规范相冲突的字符,如<=,>=,<,>
3. 模糊查询中参数的引用,应使用$,而不是#,比如:'%$varName$%',或者 '%' || #varname# || '%'。例子:TITLE like '%' || #keyWord# || '%'
4. SQL入参parameterClass.SQL中引用parameterClass的参数有三种方式:
IBatis内置支持的类型,比如int、string,使用#value#来引用,这个value是关键字,不可变。
map类型的参数,使用#keyName#来引用,keyName为键名。
复杂对象的参数,使用#propertyName#来引用,propertyName类属性的名字。
IBatis仅接受一个入参,当几个参数分布在不同对象中的时候,将这些对象的属性(或者对象本身put)到map中,然后一次传递给sql语句是非常有效。例如parameterClass="java.util.Map"
5. 返回值参数类型: 一种是对象类型resultClass="int",一种是resultMap=" ItemResultMap "。当查询结果列名和类属性名对应不上的时候,应该选择resultMap指定查询结果集类型。否则查询出来填充的对象属性为空(数字的为0,对象的为null)。
6. 动态SQL。prepend表示链接关键字,可以为任何字符串,当为sql关键字时,IBatis自动判断是否应该添加该关键字。
例子:一个动态的where条件
<dynamic prepend="WHERE">
<isNotNull property="skin" prepend="and">
t.skin=#skin#
</isNotNull>
<isNotNull property="effi" prepend="and">
t.effect=#effi#
</isNotNull>
</dynamic>
7. 不能自动识别null,就是匹配的字段不能为null,要么就必须为其设置当是null时的默认值。
标签: ibatis 2009-04-08 00:11parameterClass指定参数的全限定类名称;
parameterMap定义一系列有次序的参数系列,用于匹配JDBC PreparedStatement的值符;例如:
<parameterMap id=”insert-product-param” class=”com.domain.Product”>
<parameter property=”id”/>
<parameter property=”description”/>
</parameterMap>
<statement id=”insertProduct” parameterMap=”insert-product-param”>
insert into PRODUCT (PRD_ID, PRD_DESCRIPTION) values (?,?);
</statement>
3. 大于号,小于号的解决方法:
<statement id="getPersonsByAge" parameterClass=”int” resultClass="examples.domain.Person">
<![CDATA[
SELECT *
FROM PERSON
WHERE AGE > #value#
]]>
</statement>
4. resultClass属性可以让您指定一个Java类,根据ResultSetMetaData将其自动
映射到JDBC的ResultSet。只要是Java Bean的属性名称和ResultSet的列名匹配,
属性自动赋值给列值,。一般情况下,列名和属性名称不匹配,就需要使用“as”关键字。
<statement id="getPerson" parameterClass=”int” resultClass="examples.domain.Person">
SELECT PER_ID as id,
PER_FIRST_NAME as firstName,
PER_LAST_NAME as lastName,
PER_BIRTH_DATE as birthDate,
PER_WEIGHT_KG as weightInKilograms,
PER_HEIGHT_M as heightInMeters
FROM PERSON
WHERE PER_ID = #value#
</statement>
使用resultClass的自动映射存在一些限制,无法指定输出字段的数据类型(如果需要的话),无法
自动装入相关的数据(复杂属性),并且因为需要ResultSetMetaData的信息,会对性能有轻微的不
利影响。但使用resultMap,这些限制都可以很容易解决。
5.resultMap字段:准确匹配字段;不要求定义ResultSet所有返回字段的映射。
<resultMap id=”get-product-result” class=”com.ibatis.example.Product”>
<result property=”id” column=”PRD_ID”/>
<result property=”description” column=”PRD_DESCRIPTION”/>
</resultMap>
<statement id=”getProduct” resultMap=”get-product-result”>
select * from PRODUCT
</statement>
6.cacheModel
cacheModel的属性值等于指定的cacheModel元素的name属性值。属性cacheModel定义查询mapped statement的
缓存。每一个查询mapped statement可以使用不同或相同的cacheModel。
<cacheModel id="product-cache" imlementation="LRU">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”size” value=”1000” />
</cacheModel>
<statement id=”getProductList” parameterClass=”int” cacheModel=”product-cache”>
select * from PRODUCT where PRD_CAT_ID = #value#
上面例子中,“getProductList”的缓存使用WEAK引用类型,每24小时刷新一次,或当更新的操作发生时刷新。
7.xmlResultName
当直接把查询结果映射成XML document时,属性xmlResultName的值等于XML document根元素的名称。例如:
<select id="getPerson" parameterClass=”int” resultClass="xml" xmlResultName=”person”>
SELECT PER_ID as id,
PER_FIRST_NAME as firstName,
PER_LAST_NAME as lastName,
PER_BIRTH_DATE as birthDate,
PER_WEIGHT_KG as weightInKilograms,
PER_HEIGHT_M as heightInMeters
FROM PERSON
WHERE PER_ID = #value#
</select>
上面的查询结果将产生一个XML document,结构如下:
<person>
<id>1</id>
<firstName>Clinton</firstName>
<lastName>Begin</lastName>
<birthDate>1900-01-01</birthDate>
<weightInKilograms>89</weightInKilograms>
<heightInMeters>1.77</heightInMeters>
</person>
8. 解决int字段默认为0,而数据库中的字段为null的问题:
<parameterMap class="User" id="UserNameAndBirthday">
<parameter property="name"/>
<parameter property="money" jdbcType="INTEGER" nullValue="0"/>
</parameterMap>
9.extend关键字可用于联合查询,数据表之间不需要有继承关系。
10. 重要说明:sqlmap文件中互相引用的时候是有顺序的,比如在sqlmapconfig中加载sqlmap文
件的顺序是sqlmapA->sqlmapB,如果在sqlmapB中指定一个<select>的resultMap为sqlmapA.AResult,没
问题。反之如果在A中引用B的sqlmapB.BResult,则会报错。所以定义resultMap的common.xml一定要在
所有的sqlmap之前!
11. N+1 问题描述:当一个表有1个外键的时候,查询这个表的信息时,如果不用外连接或者联合查询,那么
要用额外的一条SQL来查询外键所连接的表的信息。解决方法就是联合查询或者连接查询(用一条SQL来解决问题)。
12. 在一对多的映射关系中,ibatis一定会出现N+1问题;
13. 缓存管理
“MEMORY” (com.ibatis.db.sqlmap.cache.memory.MemoryCacheController)MEMORY cache实现使
用reference类型来管理cache的行为。垃圾收集器可以根据reference类型判断是否要回收cache中
的数据。MEMORY实现适用于没有统一的对象重用模式的应用,或内存不足的应用。
<cacheModel id="product-cache" type="MEMORY">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”reference-type” value=”WEAK” />
</cacheModel>。这个名为“reference-type”属性的值必须是STRONG,SOFT和WEAK三
者其一;WEAK:大多数情况下,WEAK类型是最佳选择。如果不指定类型,缺省类型就
是WEAK。它能大大提高常用查询的性能。但是对于当前不被使用的查询结果数据,将
被清除以释放内存用来分配其他对象。SOFT:在查询结果对象数据不被使用,同时需要
内存分配其他对象的情况下,SOFT类型将减少内存不足的可能性。然而,这不是最具
侵入性的reference类型,结果数据依然可能被清除。STRONG:此类型可以确保查询结
果数据一直保留在内存中,除非Cache被刷新(例如,到了刷新的时间或执行了更新
数据的操作)。对于下面的情况,这是理想的选择:
1)结果内容数据很少,
2)完全静态的数据,和3)频繁使用的数据。优点是对于这类查询性能非常好。
缺点是,如果需要分配其他对象,内存无法释放(可能是更重要的数据对象)。
“LRU” (com.ibatis.db.sqlmap.cache.lru.LruCacheController)
LRU Cache实现用“近期最少使用”原则来确定如何从Cache中清除对象。当Cache溢出
时,最近最少使用的对象将被从Cache中清除。使用这种方法,如果一个特定的对象
总是被使用,它将保留在Cache中,而且被清除的可能性最小。对于在较长的期间内,某些
用户经常使用某些特定对象的情况(例如,在PaginatedList和常用的查询关键字结果集中
翻页),LRU Cache是一个不错的选择。LRU Cache实现可以这样配置:
<cacheModel id="product-cache" type="LRU">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”size” value=”1000” />
</cacheModel>
IBatis是以SQL为中心的持久化层框架,是一种“半自动化”的ORM实现。
IBatis不但提供了对象与关系数据库之间的映射,同时提供操作方法与SQL间的直接映射,设计者可以直接为一个方法指定一条SQL语句,从而取得更加准确的数据。因为 IBatis 的 sql 都保存到单独的xml文件中,有利于DBA对 sql 的 审核和优化。IBatis最大的特点就是小巧,上手很快,可维护性较好。
IBatis数据映射的工作流程图如图1所示:
图1:IBatis数据映射的工作流程图
2. 使用步骤
2.1 SQL Map 配置文件
SQL Map 配置文件中对<properties>、< settings >、< typeAlias >、< transactionManager >、< dataSource >、< sqlMap >等进行配置。
2.2 SQL Map映射文件
和 "IBatis总结" 有关的 java 编程小帖士:
strong>DataFormats.Format.win32Handle
指定一个boolean值,此值决定这个格式是否期望Win32句柄。
语法
public final boolean win32Handle;
构造器
在SQL Map映射文件中,可以定义的Statement 类型有<statement>、<insert>、<update>、<delete>、<select>、<procedure>。
可以使用缓存模式,Cache的3个重要属性是readOnly、serialize和type;Cache类型分为MEMORY、LRU、FIFO、OSCACHE四种。
2.3编写DAO
在DAO中,可以使用SqlMapClient提供的方法执行sql操作。
3. 开发过程中的注意点
1. 对Sequence主键,插入语句之前必须指定一个主键值给要插入的记录,否则无法插入。方法是在插入语句标签<insert....>之前配置上:
<insert id="addItemDO" parameterClass="TryItem">
<selectKey keyProperty="id" resultClass="int" type="pre">
select ITEM_ID.nextval as value from dual
</selectKey>
insert into item …
</insert>
2. 通过使用<![CDATA[……]]>,可以避免SQL 中与XML 规范相冲突的字符,如<=,>=,<,>
3. 模糊查询中参数的引用,应使用$,而不是#,比如:'%$varName$%',或者 '%' || #varname# || '%'。例子:TITLE like '%' || #keyWord# || '%'
4. SQL入参parameterClass.SQL中引用parameterClass的参数有三种方式:
IBatis内置支持的类型,比如int、string,使用#value#来引用,这个value是关键字,不可变。
map类型的参数,使用#keyName#来引用,keyName为键名。
复杂对象的参数,使用#propertyName#来引用,propertyName类属性的名字。
IBatis仅接受一个入参,当几个参数分布在不同对象中的时候,将这些对象的属性(或者对象本身put)到map中,然后一次传递给sql语句是非常有效。例如parameterClass="java.util.Map"
5. 返回值参数类型: 一种是对象类型resultClass="int",一种是resultMap=" ItemResultMap "。当查询结果列名和类属性名对应不上的时候,应该选择resultMap指定查询结果集类型。否则查询出来填充的对象属性为空(数字的为0,对象的为null)。
6. 动态SQL。prepend表示链接关键字,可以为任何字符串,当为sql关键字时,IBatis自动判断是否应该添加该关键字。
例子:一个动态的where条件
<dynamic prepend="WHERE">
<isNotNull property="skin" prepend="and">
t.skin=#skin#
</isNotNull>
<isNotNull property="effi" prepend="and">
t.effect=#effi#
</isNotNull>
</dynamic>
7. 不能自动识别null,就是匹配的字段不能为null,要么就必须为其设置当是null时的默认值。
标签: ibatis 2009-04-08 00:11parameterClass指定参数的全限定类名称;
parameterMap定义一系列有次序的参数系列,用于匹配JDBC PreparedStatement的值符;例如:
<parameterMap id=”insert-product-param” class=”com.domain.Product”>
<parameter property=”id”/>
<parameter property=”description”/>
</parameterMap>
<statement id=”insertProduct” parameterMap=”insert-product-param”>
insert into PRODUCT (PRD_ID, PRD_DESCRIPTION) values (?,?);
</statement>
3. 大于号,小于号的解决方法:
<statement id="getPersonsByAge" parameterClass=”int” resultClass="examples.domain.Person">
<![CDATA[
SELECT *
FROM PERSON
WHERE AGE > #value#
]]>
</statement>
4. resultClass属性可以让您指定一个Java类,根据ResultSetMetaData将其自动
映射到JDBC的ResultSet。只要是Java Bean的属性名称和ResultSet的列名匹配,
属性自动赋值给列值,。一般情况下,列名和属性名称不匹配,就需要使用“as”关键字。
<statement id="getPerson" parameterClass=”int” resultClass="examples.domain.Person">
SELECT PER_ID as id,
PER_FIRST_NAME as firstName,
PER_LAST_NAME as lastName,
PER_BIRTH_DATE as birthDate,
PER_WEIGHT_KG as weightInKilograms,
PER_HEIGHT_M as heightInMeters
FROM PERSON
WHERE PER_ID = #value#
</statement>
使用resultClass的自动映射存在一些限制,无法指定输出字段的数据类型(如果需要的话),无法
自动装入相关的数据(复杂属性),并且因为需要ResultSetMetaData的信息,会对性能有轻微的不
利影响。但使用resultMap,这些限制都可以很容易解决。
5.resultMap字段:准确匹配字段;不要求定义ResultSet所有返回字段的映射。
<resultMap id=”get-product-result” class=”com.ibatis.example.Product”>
<result property=”id” column=”PRD_ID”/>
<result property=”description” column=”PRD_DESCRIPTION”/>
</resultMap>
<statement id=”getProduct” resultMap=”get-product-result”>
select * from PRODUCT
</statement>
6.cacheModel
cacheModel的属性值等于指定的cacheModel元素的name属性值。属性cacheModel定义查询mapped statement的
缓存。每一个查询mapped statement可以使用不同或相同的cacheModel。
<cacheModel id="product-cache" imlementation="LRU">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”size” value=”1000” />
</cacheModel>
<statement id=”getProductList” parameterClass=”int” cacheModel=”product-cache”>
select * from PRODUCT where PRD_CAT_ID = #value#
上面例子中,“getProductList”的缓存使用WEAK引用类型,每24小时刷新一次,或当更新的操作发生时刷新。
7.xmlResultName
当直接把查询结果映射成XML document时,属性xmlResultName的值等于XML document根元素的名称。例如:
<select id="getPerson" parameterClass=”int” resultClass="xml" xmlResultName=”person”>
SELECT PER_ID as id,
PER_FIRST_NAME as firstName,
PER_LAST_NAME as lastName,
PER_BIRTH_DATE as birthDate,
PER_WEIGHT_KG as weightInKilograms,
PER_HEIGHT_M as heightInMeters
FROM PERSON
WHERE PER_ID = #value#
</select>
上面的查询结果将产生一个XML document,结构如下:
<person>
<id>1</id>
<firstName>Clinton</firstName>
<lastName>Begin</lastName>
<birthDate>1900-01-01</birthDate>
<weightInKilograms>89</weightInKilograms>
<heightInMeters>1.77</heightInMeters>
</person>
8. 解决int字段默认为0,而数据库中的字段为null的问题:
<parameterMap class="User" id="UserNameAndBirthday">
<parameter property="name"/>
<parameter property="money" jdbcType="INTEGER" nullValue="0"/>
</parameterMap>
9.extend关键字可用于联合查询,数据表之间不需要有继承关系。
10. 重要说明:sqlmap文件中互相引用的时候是有顺序的,比如在sqlmapconfig中加载sqlmap文
件的顺序是sqlmapA->sqlmapB,如果在sqlmapB中指定一个<select>的resultMap为sqlmapA.AResult,没
问题。反之如果在A中引用B的sqlmapB.BResult,则会报错。所以定义resultMap的common.xml一定要在
所有的sqlmap之前!
11. N+1 问题描述:当一个表有1个外键的时候,查询这个表的信息时,如果不用外连接或者联合查询,那么
要用额外的一条SQL来查询外键所连接的表的信息。解决方法就是联合查询或者连接查询(用一条SQL来解决问题)。
12. 在一对多的映射关系中,ibatis一定会出现N+1问题;
13. 缓存管理
“MEMORY” (com.ibatis.db.sqlmap.cache.memory.MemoryCacheController)MEMORY cache实现使
用reference类型来管理cache的行为。垃圾收集器可以根据reference类型判断是否要回收cache中
的数据。MEMORY实现适用于没有统一的对象重用模式的应用,或内存不足的应用。
<cacheModel id="product-cache" type="MEMORY">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”reference-type” value=”WEAK” />
</cacheModel>。这个名为“reference-type”属性的值必须是STRONG,SOFT和WEAK三
者其一;WEAK:大多数情况下,WEAK类型是最佳选择。如果不指定类型,缺省类型就
是WEAK。它能大大提高常用查询的性能。但是对于当前不被使用的查询结果数据,将
被清除以释放内存用来分配其他对象。SOFT:在查询结果对象数据不被使用,同时需要
内存分配其他对象的情况下,SOFT类型将减少内存不足的可能性。然而,这不是最具
侵入性的reference类型,结果数据依然可能被清除。STRONG:此类型可以确保查询结
果数据一直保留在内存中,除非Cache被刷新(例如,到了刷新的时间或执行了更新
数据的操作)。对于下面的情况,这是理想的选择:
1)结果内容数据很少,
2)完全静态的数据,和3)频繁使用的数据。优点是对于这类查询性能非常好。
缺点是,如果需要分配其他对象,内存无法释放(可能是更重要的数据对象)。
“LRU” (com.ibatis.db.sqlmap.cache.lru.LruCacheController)
LRU Cache实现用“近期最少使用”原则来确定如何从Cache中清除对象。当Cache溢出
时,最近最少使用的对象将被从Cache中清除。使用这种方法,如果一个特定的对象
总是被使用,它将保留在Cache中,而且被清除的可能性最小。对于在较长的期间内,某些
用户经常使用某些特定对象的情况(例如,在PaginatedList和常用的查询关键字结果集中
翻页),LRU Cache是一个不错的选择。LRU Cache实现可以这样配置:
<cacheModel id="product-cache" type="LRU">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name=”size” value=”1000” />
</cacheModel>
发表评论
-
ibatis优缺点总结
2010-09-30 14:45 1642ibatis优缺点总结 1.优点 简单: 易于学习, ... -
iBatis SqlMap 的配置总结
2010-09-30 14:43 1510iBatis SqlMap 的配置总结 核心提示:S ... -
ibatis总结
2010-09-22 17:08 12291. IBatis简介 IBatis是以SQL为中心的 ... -
ibatis #和$的区别 总结
2010-08-31 21:01 1079ibatis #和$的区别 在写ibatis中的sql ... -
ibaits知识点
2010-08-29 21:11 1172ibaits知识点:如果你要在DaoImpl里面得到一个Lis ... -
IBatis学习总结
2010-08-24 07:35 993IBatis学习总结 一、 介绍: 相对于Hibernat ... -
ibatis中输入/输出各种类型的参数分析及#与$区别
2010-08-23 15:28 1514ibatis中输入/输出各种类型的参数分析及#与$区别 (1 ... -
ibaits #和$有什么区别
2010-08-23 15:18 1306#和$有什么区别,即select * from t ... -
如何进行ibatis动态多条件组合查询以及模糊查询(oracle,mysql)
2010-08-13 20:29 1590这几天在学习使用IBATIS突然要使用模糊查询,以及动态多个条 ... -
ibatis动态SQL语句
2010-08-13 16:53 1464ibatis动态SQL语句 动态SQL ... -
让iBatis中的insert返回主键
2010-08-11 15:09 1440让iBatis中的insert返回主键 <!-- ...
相关推荐
ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西
总结,Ibatis提供了灵活的SQL映射机制,使得开发人员能够更好地控制SQL的执行。同时,通过与Struts和Spring的整合,可以构建出强大的企业级应用。理解并熟练掌握这些知识点,对于提升Java Web开发的效率和质量至关...
这是关于ibatis 的一些总结, 其中包含ibatis 、hibernate、jdbc三者之间的性能对比,以及ibatis的配置
ibatis优点总结 ibatis优点总结
本文将深入探讨其中一个流行的选择——iBATIS,以及其在传智播客教程中的优点总结。 iBATIS,全称为“互联网应用程序基础工具包”(Internet Basics for Architecture with Transactions and SQL),是由Apache ...
iBATIS2.0是一个基于Java的持久层框架,它主要负责将SQL查询与应用程序的业务逻辑解耦,使得开发者可以更加专注于SQL的编写和优化,而无需关心数据访问的底层细节。iBATIS并不像Hibernate那样是完全的对象关系映射...
09_ibatis教程_ibatis优点总结.zip 09_ibatis教程_ibatis优点总结.zip
### ibatis知识点总结 #### 简介 ibatis是一个开放源代码项目,起初由Clinton Begin在2001年发起。该项目最初关注的是密码软件的开发,但随着时间的发展,逐渐演变成一个基于Java的持久层框架。ibatis在2010年由...
### 总结 ibatis在处理SQL语句时,其灵活性和强大功能也伴随着易犯的错误。确保`parameterClass`和`resultClass`属性与实际参数类型和返回类型相匹配,正确使用动态SQL标签如`<isNotNull>`,并注意`#`和`{}`之间的...
在IT行业中,Ibatis、Oracle...希望这篇总结能为你的学习之路提供有价值的指导,进一步深化你对Ibatis、Oracle和敏捷开发的理解。在IT世界中,持续学习和实践是提升自身能力的关键,祝你在技术探索的道路上越走越远。
【ibatis学习总结】 在Java应用中,ORM(对象关系映射)框架是连接数据库与业务逻辑的关键。相比像Hibernate和Apache OJB这样的"一站式"ORM解决方案,iBATIS提供了一种更为灵活的"半自动化"策略。iBATIS允许开发者...
本文档旨在对iBATIS的学习进行深入的总结,帮助初学者快速上手。 一、iBATIS概述 iBATIS的核心理念是“SQL Map”,它将SQL与Java代码分离,通过XML配置文件或注解来定义SQL语句,实现了数据访问层的灵活定制。这...
iBatis.net是一个轻量级的持久层框架,它提供了灵活的数据访问机制,与ORM(对象关系映射)框架相比,具有更高的定制性和性能。在本文中,我们将深入探讨iBatis.net的使用,主要涉及以下几个核心部分: 1. **配置...
### ibatis技术总结 #### 1. 创建iBatis工程的步骤 在开始构建一个基于iBatis的应用之前,需要遵循一系列明确的步骤来确保项目的顺利进行: 1. **建立数据库**:首先需要设计并创建数据库,这一步骤至关重要,...
### ibatis的技术总结 #### 一、创建iBatis工程的步骤 1. **建立数据库:** 首先需要创建一个数据库,用于存放应用程序的数据。数据库的选择可以根据具体的应用需求来决定,例如MySQL、Oracle等。 2. **创建工程...
总结起来,iBATIS是一个强大且灵活的持久化框架,它的主要优点在于将SQL语句的控制权交给开发者,同时提供了代码简化和维护性的提升。对于那些希望在ORM框架中保留更多数据库操作控制权的开发者来说,iBATIS是一个...
"iBATIS学习总结 - 郭睿的专栏 - CSDN.NET_files"和"iBATIS与Spring集成及环境搭建 - 振华 - ITeye技术网站_files"可能是相关文章的图片或辅助资源。 通过这些资料,开发者可以系统地学习和掌握iBATIS 2.x版本的...
### 四、总结 通过上述内容,我们可以了解到Ibatis3的基本工作原理及其配置方式。Ibatis3以其灵活性和高效性在众多ORM框架中脱颖而出,特别适合那些对SQL查询有特殊需求或者需要精细化控制的应用场景。希望本文能够...
总结来说,Ibatis 是一个高效、灵活的 ORM(对象关系映射)框架,它让开发者能够更专注于业务逻辑,而不是繁琐的 JDBC 代码。通过学习 Ibatis,开发者可以更好地理解和掌握数据访问层的设计与实现,提升开发效率。...