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 ...
随机推荐
- mongodb概念
一.mongodb与关系型数据库的一些概念上的改变 sql术语 mongodb术语 说明 database database 数据库 table collection 表/集合 row documen ...
- 使用Mysql修改密码命令更改root的密码
使用Mysql修改密码命令更改root的密码. 进入Mysql数据库命令行方式有两种方式: 方式一:在Mysql开始菜单里包含Mysql命令行客户端,只要点击输入root的密码即可进入. 方式二:在D ...
- struts2 标签为简单标签
<s:form method="post" action="" theme="simple"> <s:textfield ...
- 序列变换(hdu5248)
序列变换 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- exjs3.2的gridPanel的表头总宽度与列的总宽度不一致的解决方案
修复之前的bug问题 修复办法,谷歌浏览器中,table的单元格实际宽度=指定宽度+padding,所以只要重写gridview里的一个方法: Ext.override(Ext.grid.GridVi ...
- php导入导出
首先:下载好PHPExcel类库文件 视图层: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- Android so lib库远程http下载和动态注册
一.背景 在开发Android应用程序的实现,有时候需要引入第三方so lib库,但第三方so库比较大,例如开源第三方播放组件ffmpeg库, 如果直接打包的apk包里面, 整个应用程序会大很多.经过 ...
- bzoj4238 电压
首先先直接对图进行二染色,dfs染完色后,有的边为搜索树边,有的为非树边,当非树边连接的两头的点为异色的时候,那么很明显这条非树边和树边构成的环上的边必然不可能成为答案:如果非树边的两端的点同色,那么 ...
- paper 66: MATLAB函数—disp的使用
例子来源于网络:关键是看disp函数怎么把字符和数字在一起进行显示. 两点生成直线程序 %%以下是一个通过给定两点显示直线方程的程序, %%该程序需要给出两个点的坐标,结果返回为y=kx+b的格式,且 ...
- sql 中的回车和换行问题
--移除回车符 update master_locationSET street_number = REPLACE(street_number, CHAR(13), '') --移除换行符 updat ...