本文是我和同事陈为、徐进共同完成,主要的配置和说明借鉴夏昕的《ibatis开发指南》,稍微增加的了点东西。 附件中包含所需要的jar包
基于IBATIS框架发布包、标准化开发安装实施
1 所需jar文件
1.1 主要jar文件
ibatis-2.3.0.677.jar
1.2 辅助jar文件
log4j-1.2.14.jar
ojdbc14.jar
2 配置文件及说明
2.1 SqlMapConfig.xml
<?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>
<!-- 在这里配置jdbc.propertis,在配置datasource的时候,用${}获得jdbc.properties里的属性的值,这个配置是可选的-->
<properties resource="jdbc.properties " />
<!--
settings参数详细说明:
cacheModelsEnabled 是否启用SqlMapClient上的缓存机制.建议设为"true";
enhancementEnabled 是否针对POJO启用字节码增强机制以提升getter/setter的调用效能,避免使用JavaReflect所带来的性能开销。同时,这也为Lazy Loading带来了极大的性能提升。建议设为"true";
lazyLoadingEnabled 是否启用延迟加载机制,建议设为"true"
errorTracingEnabled 是否启用错误日志,在开发期间建议设为"true" 以方便调试;
maxRequests 最大并发请求数(Statement并发数);
maxSessions 最大并发事务数;
maxTransactions 最大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",user);
否则直接通过Statement名称调用即可,
如:sqlMap.update("updateUser",user);
但请注意此时需要保证所有映射文件中,Statement定义无重名。
-->
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
errorTracingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false"
/>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<!—配置JDBC 驱动 -->
<property name="JDBC.Driver" value="${driver}"/>
<!-- 数据库URL -->
<property name="JDBC.ConnectionURL" value="${url}"/>
<!-- 数据库用户名 -->
<property name="JDBC.Username" value="${username}"/>
<!-- 数据库用户密码 -->
<property name="JDBC.Password" value="${password}"/>
<!-- 数据库连接池可维持的最大容量 -->
<property name="Pool.MaximumActiveConnections" value="10"/>
<!-- 数据库连接池中允许的挂起(idle)连接 -->
<property name="Pool.MaximumIdleConnections" value="5"/>
<!-- 数据库联接池中,连接被某个任务所允许占用的最大时间,如果超过这个时间限定,连接将被强制收回 (毫秒)-->
<property name="Pool.MaximumCheckoutTime" value="120000"/>
<!-- 当线程试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间 (毫秒)-->
<property name="Pool.TimeToWait" value="500"/>
</dataSource>
</transactionManager>
<!-- sqlMap 节点指定了映射文件的位置 -->
<sqlMap resource="com/zrar/wxxt/config/User.xml"/>
……<!—更多的配置文件 -->
【注意:】在这里配置映射文件的时候,指定的是映射文件的路径,而不是包名,不能写成com.zrar.wxxt.config.User.xml
</sqlMapConfig>
2.2 Jdbc.properties
driver= oracle.jdbc.driver.OracleDriver
url= jdbc:oracle:thin:@192.168.3.45:1521:pure
username= wxxt
password= arkj123
2.3 映射文件(以User.xml为例)
<?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">
<!-- 定义了本映射文件中的别名,以避免过长变量值在resultClass或parameterClass中的反复书写 -->
<typeAlias alias="user" type="com.zrar.wxxt.entity.User" />
<!--
定义了本映射文件中使用的Cache机制,这里申明了一个名为"dwylbxjbxxCache"的cacheModel,之后可以在Statement申明中对其进行引用,通过Select statement获取的数据,使用cacheModel "dwylbxjbxxCache"进行缓存。之后如果程序再次用此Statement进行数据查询,即直接从缓存中读取查询结果,而无需再去数据库查询。
cacheModel主要有下面几个配置点:
flushInterval :设定缓存有效期,如果超过此设定值,则将此CacheModel的缓存清空。
size:本CacheModel中最大容纳的数据对象数量。
flushOnExecute:指定执行特定Statement时,将缓存清空。如updateUser操作将更新数据库中的用户信息,这将导致缓存中的数据对象与数据库中的实际数据发生偏差,因此必须将缓存清空以避免脏数据的出现。
-->
<cacheModel id="userCatche" type="LRU">
<flushInterval hours="6"/>
<!—updateUser和下面update标签的id相同-->
<flushOnExecute statement="updateUser"/>
<property name="size" value="1000"/>
</cacheModel>
<select
id="getUser"
parameterClass="java.lang.String"
resultClass="user"
<!—userCatche与上面定义的cacheModel标签的id相同-->
cacheModel=" userCatche ">
<!--
#name#,井号之间的字符串,必需与com.zrar.wxxt.entity.User中的属性名相同,如果传入的参数不是实体类而是map,井号之间的字符串则必需以map中的key值相同
-->
select id, name, sex from t_user where name = #name#
</select>
<update id="updateUser" parameterClass="user">
<!—
注意:<![CDATA[……]]>
该标签是为了以防sql语句中有与xml标签冲突的字符存在可以省略
-->
<![CDATA[
UPDATE t_user SET name=#name#, sex=#sex# WHERE id = 3
]]>
</update>
<insert id="insertUser" parameterClass="user">
<![CDATA[
INSERT INTO t_user (id, name, sex) VALUES (#id#, #name#, #sex#)
]]>
</insert>
<delete id="deleteUser" parameterClass="java.lang.String">
delete from t_user where id = #value#
</delete>
<select id="queryUser"
parameterClass="java.util.Map"
resultClass="user"
cacheModel=" userCatche "
>
SELECT * FROM
$tableName$
【注意:】$tableName$ 为动态表名,通过实体类中的属性名或者Map中的Key值匹配。
<!--
Dynamic 节点和判定节点中的prepend属性,指明了本节点中定义的SQL子句在主体SQL中出现时的前缀。
相当于在之前的sql语句后加上 WHERE 语句
-->
<dynamic prepend="WHERE">
<!--
isEmpty 节点,该节点属于一元节点,如果属性为Collection或者String,其size是否<1,如果非以上两种类型,则通过
String.valueOf(属性值)获得其String类型的值后,判断其size是否<1;
isNotEmpty节点 和 isEmpty节点相反。
其他一元节点:
<isPropertyAvailable> 参数类中是否提供了此属性
<isNotPropertyAvailable> 与<isPropertyAvailable>相反
<isNull> 属性值是否为NULL
<isNotNull> 与<isNull>相反
-->
<isNotEmpty prepend="AND" property="name">
(name like #name#)
【注意:】此句相当于:如果的name不为空,则在 WHERE 语句后面加上 name like ‘name’,ibatis会自动判断是否需要加上 and
</isNotEmpty>
【注意:上面列出了一元节点,ibatis还提供了二元节点,具体清空可也查阅相关资料】
</dynamic>
</select>
</sqlMap>
3 Java类
3.1 SqlMapConfig.java 获得SqlMapClient的实例
public class SqlMapConfig {
private static final SqlMapClient sqlMap;
static {// static块中的语句只会在第一次加载这个类的时候执行
try {
String resource = "sqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (Exception e) {
e.printStackTrace();
// 在这里将异常抛出来,是为了能在日志文件里更好的跟踪该异常
throw new RuntimeException("Error initializing MyAppSqlConfig class. Cause:" + e);
}
}
public static SqlMapClient getSqlMapInstance() {
return sqlMap;
}
}
分享到:
相关推荐
java ibatis框架 jar包
ibatis框架简单应用
iBATIS框架源码剖析
J2EE学习 Ibatis开发资料共享 Ibatis开发资料 Ibatis学习框架 Ibatis开发概要
struts2+spring+Ibatis框架包
SpringMvc+ibatis框架实现,直接可上项目,简单实用,案例实现用户的增删查改,端口8080
iBatis技术框架介绍。ibatis2.x教程。
Spring+ibatis框架struts2的配置以struts.xml为主要配置文件,该文件配置了URL和java类之间的对应关系,struts支持多个配置文件并存,所以某个模块的配置文件可以新建一个struts-模块名.xml,并在此文件中进行配置。
iBATIS持久层框架开发
spring+hibernate+struts2+ibatis框架,同时实现了分页的方法,可以直接做为项目框架用。
该资源为PDF格式文件,内容为IBATIS框架的详细搭建步骤,配置文件的编辑,相关JAVA类的编写,以及MAP中各个元素的使用
对于初学ibatis者来说,百度上都只提到用ibatis-2.3.0.677.jar,然后在读取配置文件的时候引用不到Resources和SqlMapClient,那么就是少了一个ibatis-sqlmap-2.3.4.726.jar,我把这两个jar同时上传了,希望可以帮助...
iBATIS框架源码剖析源码 iBATIS框架源码剖析源码 iBATIS框架源码剖析源码
自己写的ibatis例子,可以用来入门,也可以学习一下配置文件的配置方法,程序中对可以Student表进行增删改查,自己也可以根据需要添加新的方法,里面有源码和数据库脚本。有需要的,可以下过来看看。
ibatis开发包,ibatis开发包,ibatis开发包
自己配置的springmvc+ibatis框架,自己找齐了包,不容易啊,所以上来跟大家分享一下,spring自动注入包,事务包,ibatis包,数据库连接包,都齐全的,仅局限于springmvc+ibatis,这些包不多,不少,刚够
SpringMvc+ibatis框架实现,直接可上项目,简单实用,案例实现用户的增删查改
ibatis包,包含了所有支持ibatis的包
自己写的ibatis 框架,跟ibatis功能差不多