- 浏览: 127897 次
- 性别:
- 来自: 北京
最新评论
-
C_J:
有必要这么鸡冻咩?
编写自己的ClassLoader知识点 -
jason61719:
你这不是说了等于没说吗……就解析个loadClass(),谁不 ...
编写自己的ClassLoader知识点 -
jiming:
tedeyang 写道很好的改进,不过话说回来,mybatis ...
开源,从关注产品社区做起(ibatis3.x的最近一个issue展示) -
C_J:
独爱Java 写道好像实际用处并不是很大,只是多了解了有这个东 ...
Java内存模型笔记 -
独爱Java:
好像实际用处并不是很大,只是多了解了有这个东西而已。。。
Java内存模型笔记
@Author: cjcj cj.yangjun@gmail.com <c-j.iteye.com>
两种设计思想:
1、数据库操作与业务操作分开
2、业务操作进行调用DB层时是面向OO的
两种模型:
什么叫模型?
对于DBA来说,表就是他的模型,定义了字段名、类型、主外键关系;
对于程序员来说,Entity就是他的模型,定义了变量名、类型、对象关系;
1、“贫血”模型(大家都这样叫,也就这样叫了)
就是 “数据”的Entity;
2、“充血”模型
就是 “数据”+“行为”的Entity;
也是目前流行的hibernate的思想。
现实中一些项目做法:
1、static方式,纯JDBC,纯sql
2、JavaBean方式,部分JDBC
3、Hibernate方式,业务层面向OO
讨论最多的应该是方式3,但是我感觉频繁的创建很多DAO是很繁琐的。所以想寻索到一种更好的方法。
iBATIS项目思想:
1、sql语句与代码分离
2、select语句where条件可写死在xml或在代码中指定
3、运用IOC的构造sqlMapClient和targetType成员属性
IBATIS框架涉及的文件
IBATIS配置文件(XML)
1、配置缓存 setting
2、配置连接和连接池 transactionManager
3、配置sqlMap资源 sqlMap
如:对于容器没有提供连接池的情况,配置一个DBCP连接池
IBATIS MAP文件(XML)
<parameterMap id=”parameterMapName” [class=”com.domain.Product”]> <parameter property =”propertyName” [jdbcType=”VARCHAR”] [javaType=”string”] [nullValue=”NUMERIC”] [null=”-9999999”]/> <parameter …… /> <parameter …… /> </parameterMap> <resultMap id=”resultMapName” class=”some.domain.Class” [extends=”parent-resultMap”]> <result property=”propertyName” column=”COLUMN_NAME” [columnIndex=”1”] [javaType=”int”] [jdbcType=”NUMERIC”] [nullValue=”-999999”] [select=”someOtherStatement”] /> <result ……/> <result ……/> <result ……/> </resultMap>
对于复杂查询1:1的情况,有两种查询方式:延迟加载VS联合查询。
如果您要缓存查询结果,则使用子查询(而不是联合查询)来缓存查询结果。
对于复杂查询1:M or M:N的情况,2.x目前还没有更好的解决方案,只能采用“延迟加载”
<resultMap id=”get-category-result” class=”com.ibatis.example.Category”> <result property=”id” column=”CAT_ID”/> <result property=”productList” column=”CAT_ID” select=”getProductsByCatId”/> </resultMap> <resultMap id=”get-product-result” class=”com.ibatis.example.Product”> <result property=”id” column=”PRD_ID”/> </resultMap> <statement id=”getCategory” parameterClass=”int” resultMap=”get-category-result”> select * from CATEGORY where CAT_ID = #value# </statement> <statement id=”getProductsByCatId” parameterClass=”int” resultMap=”get-product-result”> select * from PRODUCT where PRD_CAT_ID = #value# </statement>
对于多个参数属性
IBATIS的client实例
IBATIS提供的数据库操作实例是sqlMapClient,里面包括了query,update,delete的方法,还有transaction,datasource(DBCP);sqlMapClient实例的query方法是用ThreadLocal保证线程安全。
IBATIS的事务管理
因为IBATIS本身只是轻封装了JDBC,所以事务也是JDBC本身控制的。运用事务很简单,只需要获得sqlMapClient实例调用相应方法就可以了,如下:
sqlMap=new MapClientConfigLoader(SqlMapClientSingleton.sqlMapConfig).loadSMC(); sqlMap.startTransaction(); // 事务操作,在同一个Session里 sqlMap.endTransaction();
IBATIS的Cache
采用简单查询缓存;
采用Hibernate 等的两级缓存
对象缓存(Object Cache),将对象像库表记录一样,按主键进行缓存,相当于建立一个简单的内存数据库;
查询缓存(Query Cache),但它只缓存结果集的主键,因此 cache.value 空间消耗大大减少。
Some public websites that utilize IBatis
1up.com - Gaming community
http://www.1up.com
Abebooks.com - Worlds largest online marketplace for books
http://www.abebooks.com
AccesStream.com - Open Source Identity and Access Management Suite
http://www.accesstream.com
BullionVault.com - Online gold trading
http://www.bullionvault.com
www.druckdiskont.at -
Online print portal (Web To Print)
http://www.druckdiskont.at
Fiskars - Consumer products manufacturer
http://www.fiskars.com
GalMarley.com - Gold prices, facts, figures and charts
http://www.galmarley.com
GAPay - General Agent Payment System
http://www.gapay.com.
Ideal Financial Services
http://www.idealfsi.com ....
于是也简单查了下IBATIS的Cache源码;
- 三种模式
/** * Constant for weak caching * This cache model is probably the best choice in most cases. It will increase * performance for popular results, but it will absolutely release the memory to * be used in allocating other objects, assuming that the results are not currently * in use. */ public final static MemoryCacheLevel WEAK; /** * Constant for soft caching. * This cache model will reduce the likelihood of running out of memory in case the * results are not currently in use and the memory is needed for other objects. * However, this is not the most aggressive cache-model in that regard. Hence, * memory still might be allocated and unavailable for more important objects. */ public final static MemoryCacheLevel SOFT; /** * Constant for strong caching. * This cache model will guarantee that the results stay in memory until the cache * is explicitly flushed. This is ideal for results that are: * <ol> * <li>very small</li> * <li>absolutely static</li> * <li>used very often</li> * </ol> * The advantage is that performance will be very good for this particular query. * The disadvantage is that if the memory used by these results is needed, then it * will not be released to make room for other objects (possibly more important * objects). */ public final static MemoryCacheLevel STRONG;
- 4种策略
FIFO
LRU
MEMORY
OS
研究dao-zone项目中...
疑难杂症:
1:classNotFound, 找不到Resource类的问题,用户会出现打成JAR包的时候无法找到IBATIS的类错误;
解决:这个属于ECLIPSE打包的问题,在你的JAR所在目录下新建LIB文件夹,并在工程MANIFEST.MF修改如下:
Manifest-Version: 1.0
Main-Class: com.hp.CcdMain
Class-Path: lib/ibatis-common-2.jar lib/ibatis-sqlmap-2.jar lib/log4j.jar lib/commons-dbcp-1.2.2.jar lib/mysql-connector-java-5.1.8-bin.jar lib/commons-pool-1.5.2.jar
Class-Path为第三方JAR包的路径
2:Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Element "sqlMap" requires additional elements.异常问题
解决:IBATIS支持JRE1.4,刚开始我怀疑是JRE版本的问题,不是,这类问题大多数跟IBATIS的XML配置文件有关;
sqlMap必须要有<sqlMap>和<statement>标签,否则IBATIS将报错
3:SqlMapConfig.xml加载外部资源文件相对路径问题:
提供了两种方式:resource和url
今天实验下url好像不能用相对路径如 .. ,只能用绝对路径,郁闷了,如<properties url="file:///G:/SRC/testccd/config.properties" />
发表评论
-
iOS入门(ongoing)
2012-09-13 11:32 1301Record it: The overview of ... -
Stuff about Android
2011-07-09 16:15 1065Foreword: long time ... -
JQuery初体验(Demo)
2011-05-22 13:43 1458Demo:Show <meta content ... -
Java内存模型笔记
2011-04-13 15:48 1538题记: 看到C/C++ ... -
Radiant_The Popular Ruby's CMS Demo篇
2011-04-02 14:49 1241题记: 上篇 记录我第一次安装Rodiant经过和 ... -
Radiant_The Popular Ruby’s CMS安装篇
2011-03-28 00:48 1278题记: 今天第一次参加JE的线下活动,robbin等 ... -
关于Azul 并发垃圾回收器
2011-03-26 14:40 1317题记: 总感觉JE讨论的帖子的东西都比较滞后,所以会 ... -
phpCMS & jQuery是我该做的(阉割了)
2011-02-27 23:02 81WD讲究以plugin挂载为结构,我需要构造一个p ... -
我的玩意:J2ME的Criteria初探
2011-01-20 21:59 1019题记: 前几天跟初中同学聊天,他问我能不能做一个GP ... -
编写自己的ClassLoader知识点
2011-01-13 14:41 1871题记: 看到InfoQ关于ClassLoader的文 ... -
周末好玩,用短信控制你的计算机
2011-01-10 16:34 2987Snapshot: 详情 ... -
About Dock Plugin on Mac
2010-11-21 22:47 1463题记: 第一次接触MAC的开发..... ... -
可变hashcode的隐患和序列化安全
2010-10-25 00:55 1369可变hashcode的隐患 为识别对象,JDK ... -
体验OSGi(helloworld.jar)—富app的热拔插
2010-10-18 23:22 2436记得以前工作的时候,有天direct manager问 ... -
MongoDB on DAO with Java Language
2010-08-26 19:17 1426A Quick Tour Using the Java d ... -
Getting Start on Mongodb
2010-08-26 01:29 1505题记: 最近老和同学聊到non-relational ... -
Java Media Framework本地玩转摄像头
2010-08-04 00:57 17351、简介The JavaTM Media Framework ... -
从WeakLogHandler应用看Java的引用、引用队列
2010-06-14 00:58 1499题记: 前几天讨论到WeakHashMap(这个是个弱引用的 ... -
《重构》读书笔记
2010-05-09 00:05 1045Martin Fowler于2003年出版 ... -
RPC之WebServices&RMI&JMS,phprpc框架?(待续)
2010-05-06 22:31 55前段时间写过基本的WebServices,也没再做深入 ...
相关推荐
在给定的资源 "elementUI - date-picker.zip" 中,主要涉及的是 ElementUI 中的日期选择器(date-picker)组件的修改,特别是关于时间步长(time-step)的调整。 日期选择器是用户界面中常见的一种交互元素,用于让...
obs-文本-脚本 date-and-time.lua
其中,`el-date-picker`组件是一个非常实用的日期选择器,它可以轻松集成到各种表单中。但有时候开发者需要根据实际需求对日期选择范围做出限制,比如限制用户只能选择当天或之前的时间。 本文的核心知识点是探讨...
element UI el-date-picker组件样式更改 popper-class="down-time" 原码是body下的弹出器
https://blog.csdn.net/xuelang532777032/article/details/121287203,内有博客截图,方便没有vip的小伙伴下载
搭建MHA时所需的包,MHA是一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用.在宕机的时间内(通常10—30秒内),完成故障切换,部署MHA,可避免主从一致性问题,节约购买新服务器的费用...
【tiny-date-picker】是一个专为前端开发设计的轻量级、无依赖的日期选择器组件。这个项目的主要目标是提供一个简单易用、性能高效且功能完备的日期选择解决方案,适用于各种网页应用。由于它不依赖任何外部库,如...
"date-utils" 是一个专为前端开发者设计的开源库,致力于提供一系列强大的日期处理功能,它作为一个node.js的日期加载项,能够方便地在Node.js环境中使用,同时也支持浏览器环境,使得前端开发人员可以更高效地处理...
标题中的"Date-Calc-5.4.tar.gz_Date-Calc-5.4"指的是一个名为"Date-Calc"的Perl模块的版本5.4的压缩文件,它采用tar.gz格式进行打包。这种格式通常用于在Unix/Linux环境中归档和压缩文件,方便传输和存储。".tar"是...
时间选择器,可以选择时间段内的时间,有效提高jsp代码
npm install date-fns chartjs-adapter-date-fns@next --save import { Chart } from 'chart.js' ; import 'chartjs-adapter-date-fns' ; CDN 默认情况下, ...
"date-picker"是一个开源项目,主要关注日期选择功能的实现,尤其强调其梯度依赖特性。在IT领域,"date-picker"通常指的是一个允许用户在用户界面中选择日期的组件,广泛应用于各种Web和移动应用中,如日历应用、...
为了更好地理解如何使用这个插件,你可以查看`angular-date-time-input-master`压缩包中的示例代码。它通常包括一个运行的实例,展示了如何在实际项目中集成和使用Angular Date Time 插件。 ### 7. 兼容性与版本...
查找v1文档暗模式演示版安装纱yarn add vue-ctk-date-time-picker NPM npm i --save vue-ctk-date-time-picker用法ES6模块/ CommonJS import VueCtkDateTimePicker from 'vue-ctk-date-time-picker' ;import 'vue-...
perl-TimeDate-1.1301-1.noarch.rpm
boost-date-time-1.41.0-11.el6_1.2.i686.rpm是centos工具包。
Angular-ngx-date-fns.zip,角度大于等于2.0的日期fns管道 =ngx日期fns,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web...
资源分类:Python库 所属语言:Python 资源全名:mkdocs-git-revision-date-localized-plugin-0.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
import { subDays, differenceInDays, format } from 'date-fns'; const targetDate = new Date('2023-05-01'); const now = new Date(); const remainingDays = differenceInDays(targetDate, now); const ...
@ nuxtjs / date-fns 现代JavaScript日期实用程序库-Nuxt.js的date-fns 设置将@nuxtjs/date-fns依赖项添加到您的项目中yarn add --dev @nuxtjs/date-fns # or npm install --save-dev @nuxtjs/date-fns 添加@nuxtjs/...