Ibatis的简单介绍
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings ⑴
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
errorTracingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false"/>
<transactionManager type="JDBC"> ⑵
<dataSource type="SIMPLE"> ⑶
<property name="JDBC.Driver" value="com.p6spy.engine.spy.P6SpyDriver"/>
<property name="JDBC.ConnectionURL"value="jdbc:mysql://localhost/sample"/>
<property name="JDBC.Username" value="user"/>
<property name="JDBC.Password" value="mypass"/>
<property name="Pool.MaximumActiveConnections" value="10"/>
<property name="Pool.MaximumIdleConnections" value="5"/>
<property name="Pool.MaximumCheckoutTime" value="120000"/>
<property name="Pool.TimeToWait" value="500"/>
<property name="Pool.PingQuery" value="select 1 from ACCOUNT"/>
<property name="Pool.PingEnabled" value="false"/>
<property name="Pool.PingConnectionsOlderThan" value="1"/>
<property name="Pool.PingConnectionsNotUsedFor" value="1"/>
</dataSource>
</transactionManager>
<sqlMap resource="com/ibatis/sample/User.xml"/> ⑷
<sqlMap resource="com/ibatis/sample/Address.xml"/>
</sqlMapConfig>
|
参数
|
描述
|
|
cacheModelsEnabled
|
是否启用SqlMapClient上的缓存机制。
建议设为"true"
|
|
enhancementEnabled
|
是否针对POJO启用字节码增强机制以提升
getter/setter的调用效能,避免使用Java
Reflect所带来的性能开销。
同时,这也为Lazy Loading带来了极大的性能
提升。
建议设为"true"
|
|
errorTracingEnabled
|
是否启用错误日志,在开发期间建议设为"true"
以方便调试
|
|
lazyLoadingEnabled
|
是否启用延迟加载机制,建议设为"true"
|
|
maxRequests
|
最大并发请求数(Statement并发数)
|
|
maxTransactions
|
最大并发事务数
|
|
maxSessions
|
最大Session 数。即当前最大允许的并发SqlMapClient数。
maxSessions设定必须介于
maxTransactions和maxRequests之间,即
maxTransactions<maxSessions=<
maxRequests
|
|
useStatementNamespaces
|
是否使用Statement命名空间。
这里的命名空间指的是映射文件中,sqlMap节点
的namespace属性,如在上例中针对t_user
表的映射文件sqlMap节点:
<sqlMap namespace="User">
这里,指定了此sqlMap节点下定义的操作均从
属于"User"命名空间。
在useStatementNamespaces="true"的情
况下,Statement调用需追加命名空间,如:sqlMap.update("User.updateUser",use
r);
否则直接通过Statement名称调用即可,如:
sqlMap.update("updateUser",user);
但请注意此时需要保证所有映射文件中,
Statement定义无重名。
|
|
参数
|
描述
|
|
JDBC.Driver
|
JDBC 驱动。如:com.microsoft.jdbc.sqlserver.SQLServerDriver
|
|
JDBC.ConnectionURL
|
数据库URL。如:
jdbc:microsoft:sqlserver://localhost:1433;databaseName=ibatis如果用的是SQLServer JDBC Driver,需要在url后追加SelectMethod=Cursor以获得JDBC事务的多Statement支持。
|
|
JDBC.Username
|
数据库用户名
|
|
JDBC.Password
|
数据库用户密码
|
|
Pool.MaximumActiveConn
ections
|
数据库连接池可维持的最大容量。
|
|
Pool.MaximumIdleConnec
tions
|
数据库连接池中允许的挂起(idle)连接数
|
|
Pool.MaximumCheckoutTime
|
数据库联接池中,连接被某个任务所允许占用的最大时间,如果超过这个时间限定,连接将被强制收回。(毫秒)
|
|
Pool.TimeToWait
|
当线程试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间。(毫秒)
|
|
Pool.PingQuery
|
数据库连接状态检测语句。某些数据库在连接在某段时间持续处于空闲状态时会将其断开。而连接池管理器将通过此语句检测池中连接是否可用。检测语句应该是一个最简化的无逻辑SQL。如“select 1 from t_user”,如果执行此语句成功,连接池管理器将认为此连接处于可用状态
|
|
Pool.PingEnabled
|
是否允许检测连接状态。
|
|
Pool.PingConnectionsOlderThan
|
对持续连接时间超过设定值(毫秒)的连接进行检测。
|
|
Pool.PingConnectionsNotUsedFor
|
对空闲超过设定值(毫秒)的连接进行检测。
|
|
Pool.MaximumWait
|
当线程试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间。(毫秒)
|
|
Pool.ValidationQuery
|
数据库连接状态检测语句。某些数据库在连接在某段时间持续处于空闲状态时会将其断开。而连接池管理器将通过此语句检测池中连接是否可用。检测语句应该是一个最简化的无逻辑SQL。如“select 1 from t_user”,如果执行此语句
成功,连接池管理器将认为此连接处于可用状态。
|
|
Pool.LogAbandoned
|
当数据库连接被废弃时,是否打印日志。
|
|
Pool.RemoveAbandonedTimeout
|
数据库连接被废弃的最大超时时间
|
|
Pool.RemoveAbandoned
|
当连接空闲时间超过RemoveAbandonedTimeout时,是否将其废弃。
|
<transactionManager type="JDBC" >
<dataSource type="JNDI">
<property name="DataSource"
value="java:comp/env/jdbc/myDataSource"/>
</dataSource>
</transactionManager>
<transactionManager type="JTA" >
<property name="UserTransaction" value="java:/ctx/con/UserTransaction"/>
<dataSource type="JNDI">
<property name="DataSource" value="java:comp/env/jdbc/myDataSource"/>
</dataSource>
</transactionManager>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="映射文件名称:User">
<typeAlias alias="user" type="com.ibatis.sample.User"/> 给对应的类取别名
<cacheModel id="userCache" type="LRU">
<flushInterval hours="24"/> 设定缓存有效期
<flushOnExecute statement=" updateUser"/>
指定执行特定Statement时,将缓存清空。如updateUser操作将更新数据库中的用户信息,这将导致缓存中的数据对象与数据库中的实际数据发生偏差,因此必须将缓存清空以避免脏数据的出现。
<property name="size" value="1000" /> CacheModel中最大容纳的数据对象数量
</cacheModel>
申明了一个名为"userCache"的cacheModel,之后可以在Statement申明中对其进行引用:例如:
<select id="getUser" parameterClass="java.lang.String" resultClass="user"
cacheModel="userCache"> <select id="" parameterClass="java.lang.String" resultClass="user">
<![CDATA[ 可以避免SQL 中与XML 规范相冲突的字符对XML映射文件的合法性造成影响。
SQL语句
]]>
</select>
< update id=" " parameterClass="java.lang.String" >
<![CDATA[
SQL语句
]]>
</ update >
< insert id=" " parameterClass="java.lang.String" >
<![CDATA[
SQL语句
]]>
</ insert >
< delete id="" parameterClass="java.lang.String" >
<![CDATA[
SQL语句
]]>
</ delete >
</sqlMap>
public class SQLMapper {
public static SqlMapClient sqlMapper;
static{
String resource = "org/lzp/xml/SqlMapConfig.xml";指明了配置文件的相对路径
try {
Reader reader = Resources.getResourceAsReader(resource);
//ibatis2.0
/* XmlSqlMapClientBuilder xmlBuilder =
new XmlSqlMapClientBuilder();
sqlMapper = xmlBuilder.buildSqlMap(reader);
*/
12 //ibatis1.0
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
参数
|
描述
|
|
parameterClass
|
参数类。指定了参数的完整类名(包括包路径)。
可通过别名避免每次重复书写冗长的类名。
|
|
resultClass
|
结果类。指定结果类型的完整类名(包括包路径)
可通过别名避免每次重复书写冗长的类名。
|
|
parameterMap
|
参数映射,需结合parameterMap节点对映射关系加以定义。对于存储过程之外的statement而言,建议使用parameterClass作为参数配置方式,一方面避免了参数映射配置工作,另一方面其性能表现也更加出色。
|
|
resultMap
|
结果映射,需结合resultMap节点对映射关系加以定义。
|
|
cacheModel
|
statement对应的Cache模块。
|
<select id="getUsers" parameterClass="user" resultClass="user">
Select id,name,sex from t_user
<dynamic prepend="WHERE">
<isNotEmpty prepend="AND" property="name">
(name like #name#)
</isNotEmpty>
<isNotEmpty prepend="AND" property="address">
(address like #address#)
</isNotEmpty>
</dynamic>
</select>
|
节点名
|
描述
|
|
<isPropertyAvailable>
|
参数类中是否提供了此属性
|
|
<isNotPropertyAvailable>
|
与<isPropertyAvailable>相反
|
|
<isNull>
|
属性值是否为NULL
|
|
<isNotNull>
|
与<isNull>相反
|
|
<isEmpty>
|
如果属性为Collection或者String,其size是否<1,
如果非以上两种类型,则通过
String.valueOf(属性值)
获得其String类型的值后,判断其size是否<1
|
|
<isNotEmpty>
|
与<isEmpty>相反。
|
|
节点名
|
属性值与compareValues的关系
|
|
<isEqual>
|
相等。
|
|
<isNotEqual>
|
不等。
|
|
<isGreaterThan>
|
大于
|
|
<isGreaterEqual>
|
大于等于
|
|
<isLessThan>
|
小于
|
|
<isLessEqual>
|
小于等于
|
Ibatis的简单介绍的更多相关文章
- Hibernate学习(1)简单介绍
1.什么是Hibernate? 首先,Hibernate是数据持久层的一个轻量级框架.数据持久层的框架有非常多比方:iBATIS,myBatis,Nhibernate,Siena等 ...
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍
一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...
- yii2的权限管理系统RBAC简单介绍
这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...
- angular1.x的简单介绍(二)
首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...
- Linux的简单介绍和常用命令的介绍
Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...
- iOS-iOS开发简单介绍
概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...
- iOS开发多线程篇—多线程简单介绍
iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...
随机推荐
- Excel将秒转换成标准的时间格式HH:MM:SS
Excel将秒转换成标准的时间格式HH:MM:SS 比如120秒,转换成00:02:00 Excel公式为: =TEXT(A1/86400,"[hh]:mm:ss") A1为秒数据 ...
- From Disk partition to PostgreSQL installation
From Disk partition to PostgreSQLinstallation [root@compute mnt]# fdisk /dev/sdb Welcome to fdisk (u ...
- G面经prepare: Set Intersection && Set Difference
求两个sorted数组的intersection e.g. [1,2,3,4,5],[2,4,6] 结果是[2,4] difference 类似merge, 分小于等于大于三种情况,然后时间O(m+n ...
- JSP 使用框架frame
JSP使用框架放在<head>标签里面.如果放在<body>标签里面,用Tomcat打开,是不会显示的.
- 20145207 《Java程序设计》第二周学习总结
开源中国的代码托管 不算调查问卷的话,这是第二篇博客,怎么说呢……感觉好麻烦!哈哈哈哈!不过也就这样吧.按照同学传达的老师的意思就是“写博客就是在重复一天的所学,虽然可能会花一定的时间,但是对于自己是 ...
- 使用 GitHub / GitLab 的 Webhooks 进行网站自动化部署
老早就想写这个话题了,今天正好有机会研究了一下 git 的自动化部署.最终做到的效果就是,每当有新的 commit push 到 master 分支的时候,就自动在测试/生产服务器上进行 git pu ...
- [转]iis7.5+win2008 出现 HTTP Error 503. The service is unavailable.
解决: 应用程序池启动32位应用程序 设置托管管道为集成 (仍然有问题) 试试以下方法: http://phpwind.me/1222.html 楼主 发表于: 2011-11-26 图片: ...
- js this 闭包
var myObject = { value :, increment:function (inc){ ; } }; myObject .increment(); console.log(myObje ...
- 本周PSP+历年作品评论
本周PSP 类别 内容 开始时间 结束时间 间断时间 净时间(min) 9月11号 看书 构建之法 19:00 21:00 14 106 9月12号 写程序 词频统计多需求版 8:00 14:23 3 ...
- 编译php时出现xsl错误的解决方法
是因为系统没安装一个叫 libxslt-devel 的包, 安装上就好了. 附编译php时的常见错误: http://www.myhack58.com/Article/sort099/sort0102 ...