`
javaz
  • 浏览: 32540 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

ibatis 使用

阅读更多

最近又看了遍iabtis 简单记录一下!

 

 1.缓存: Memory cache 实现使用reference类型来管理cache的行为,垃圾回收器根据reference中的了类型判断是否要回收cache中的数据,适用于没有同意对象重用模式的应用,或内存不足的应用 reference-type : strong ,soft ,weak s

trong:基于传统的java对象的引用机制,必须使用显示的晴空缓存(到了刷新缓存的时间,或者执行了更新等操作,或者代码里做了清除),会一直在内存中。 适用于内存充足的情况。 soft:只有JVM内存不足的情况,才会对缓冲池中的数据进行回收。适用与内存较充足 并且并发量不是很多的情况下。 weak:当jvm启动垃圾回收的时候,将被回收。 这三种的话,weak为最佳选择们可以提高查询的性能,但对于当前不被使用的查询结果数据,将被清除以释放。

 

LRU cache:近期最少使用原则来确定如何从cache中清除对象cache-size的属性值必须是整数,代表同事存在cache中的最大数目。

 FIFO cache: 实现用“先进先出”原则来确定如何从缓存中清除,对于短时间内持续引用的特定查询后很可能不再使用的情况。

 OScahce:缓存引擎插件,具有很好的配置性,分布式,灵活性。可以缓存任何对戏那个,拥有全面的API,永久缓存,支持集群。

cacheModel缓存的是statement,即key是跟sql语句相关,如果sql语句不同,将产生两个cache。 cache-size设置的大小一直是我纠结的事情,如果sql是不变的,我认为是产生的一个list的对象保存到缓存中,所以cache-size 可以设置成为1

 

2.配置: 对于存储过程之外的statement 而言,建议使用parameterClass作为参数配置方式;对于返回结果,如果是select语句,建议使用resultClass进行定义。

 

3.ibatis后台调试日志: log4j.logger.java.sql.PreparedStatement=Debug

 

4.一对多关联查询,观察日志发现,sql会首先将所有数据查出来,然后再分别查,开销很大,可以使用存储过程来规避。

 

5.延迟加载: 执行sql时,只是想数据库发送了一条sql,而用于获取子记录的sql。只有在真正访问其他表对象时时,才开始执行。 lazyLoadingEnabled 是否使用延迟加载 enhancementEnabled 设定是否启用字节码强化执行

 

6.动态映射 <dynamic prepend="WHERE"><isnotempty prepend="AND" property="name"> (name lika #name#) </isnotempty></dynamic> 判定条件:一元判定:isEmpty ,isnotEmpty,isNull,isnotNull 二元判定:两个判定参数,一个是属性一个是判定值 isEqual ,isGreaterThan, isLessThan

 

7.事务管理: ibatis 自动化的事务提交机制,根据当前的调用环境,自动判断是否需要自动提交。 JDBC事务由Connection管理,事务周期限于Connection的生命周期。 JTA事务由JTA容器实现,对加入事务的众多Connection进行调度。

 

附件中为学习的ibatis文章。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics