ibatis介绍及配置文件讲解,结合实例

来源:互联网 发布:php curl 超时处理 编辑:程序博客网 时间:2024/05/20 04:11

写下博客最大的好处就是即可以分享给大家,自己也作为一种记忆方式吧。为了便于个人对知识点整理写此文章,还望各位指点。

ibatis是一种“半自动化”的ORM实现,它针对sql语句进行映射。它还是从关系型开始到对象型的思路来解决数据库的操作问题。我这里主要结合一个例子说一说。由于初出茅庐,这里面许多东西都是查找和询问得到的。

下面是主要配置文件sqlMapConfig.xml配置文件,它主要是完成事务的配置、数据库的连接、引入SqlMap.xml配置文件(配置sql语句、输入映射和输出映射)。

下面是sqlMapConfigure.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><!--<settings  --><!--    cacheModelsEnabled ="true" 是否启用缓存机制--> <!--     lazyLoadingEnabled="true"   是否启用延迟加载机制 --> <!--    enhancementEnabled="true"   是否启用字节码增强机制 --><!--     errorTracingEnabled="true"   是否启用错误处理机制 --> <!--     maxRequests="32"   最大并发请求数 -->  <!--     maxSessions="10"   最大Session数 --> <!--     maxTransactions="5"   最大并发事务数 --> <!--    useStatementNamespaces="true" />   是否启用名称空间 -->  <!-- 数据库的连接 --><properties resource="resources/jdbc.properties" /><transactionManager type="JDBC"><!-- 定义了ibatis的事务管理器有3中(JDBC,JTA,EXTERNAL) --> <dataSource type="SIMPLE"><!-- type属性指定了数据源的链接类型,也有3种类型(SIMPLE,DBCP,JNDI) --><property name="JDBC.Driver" value="${driver}" /><property name="JDBC.ConnectionURL" value="${url}" /><property name="JDBC.Username" value="${username}" /><property name="JDBC.Password" value="${password}" /><property name="Pool.MaximumActiveConnections" value ="10" />   <!-- 连接池维持的最大容量 -->  <property name="Pool.MaximumIdleConnections" value ="5" />   <!-- 连接池允许挂起的最大连接 --> <property name="Pool.MaximumCheckoutTime" value ="120000" />   <!-- 连接被某个任务所允许占用的最大时间 -->  <property name="TimeToWait" value ="500" />   <!-- 线程允许等待的最大时间 --> </dataSource></transactionManager><!-- 引入SQLMap.xml(配置SQL语句、输入映射和输出映射) --><sqlMap resource="resources/User.xml"/><sqlMap resource="resources/Ext.xml"/><!-- sqmMap节点指定了映射文件的位置,配置文件中可以定义多个sqlMap元素,以指定项目内所包含的所有映射文件.--></sqlMapConfig>

配置文件的详细解释

一、transactionManager节点

transactionManagerab定义了ibatis的事务管理器,目前提供了以下几种选择:


1)  JDBC
:通过传统JDBC Connection.commit/rollback实现事务支持.
2)  JTA:
使用容器提供的JTA服务实现全局事务管理
.
3)  EXTERNAL
:外部事务管理,如在EJB中使用ibatis,通过EJB的部署配置即可实现自动的事务管理机制.此时ibatis将把所有事务委托给外部容器进行管理.

、dataSource节点

dataSource从属于 transactionManager,用于设定ibatis运行期使用DataSource属性.
 type
属性: dataSource元素的 type属性指定了 dataSource的实现类型.可选项目
:
1)  SIMPLE:
ibatis内置的 dataSource实现,其中实现了一个简单的数据库连接池机制,对应 ibatis实现类为

               com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory.
  JDBC
使用数据库自己的事务(局部事务),connect.beginTranstion(), connect.commit().

2)  DBCP:基于Apache DBCP连接池组件实现的DataSource封装,当无容器提供DataSource服务时,建议使用该选项,对应ibatis实现类为
              com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory.
  JTA
使用jta事务管理器管理事务(全局事务),使用userTranstion对象.

3)  JNDI:使用J2EE容器提供的DataSource实现, DataSource将通过指定的JNDI Name从容器中获取.对应ibatis实现类为
              com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory.
  Ibatis
不控制事务,事务交由外部控制,一般在CTM,spring托管事务中使用.

以上就是我在网上再结合自己项目总结的有关SQLMapConfig.xml配置文件的了解

接下来看一下sqlmap.xml配置文件(SQL语句的编写)

<?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="UserDAO"><!-- 建立表与对象的映射关系 --><resultMap id="UserDO" class="entity.User"> <result property="id" column="ID" /><result property="username" column="USERNAME" /><result property="password" column="PASSWORD" /></resultMap><!-- 常用的增删改查sql语句 --><insert id="insert" parameterClass="entity.User">insert into USER (ID,USERNAME,PASSWORD)values (#id#,#username#,#password# )<!-- 自动生成主键<selectKey resultClass="int" keyProperty="id">SELECT LAST_INSERT_ID() AS ID</selectKey> --></insert><delete id="deleteUserByName" parameterClass="java.lang.String"><![CDATA[delete from USERwhere USERNAME = #username#]]></delete><update id="updateUser" parameterClass="entity.User">update USER<dynamic prepend="set"><isNotNull prepend="," property="username"><!-- 判断是否为空 -->USERNAME = #username#</isNotNull><isNotNull prepend="," property="password">PASSWORD = #password#</isNotNull></dynamic>where ID = #id#</update><!-- resultClass与上方sqlMap定义的映射对应 --><select id="selectUser" parameterClass="java.lang.String" resultMap="UserDO">select ID,USERNAME,PASSWORDfrom USERwhere USERNAME = #username#</select></sqlMap>
有关这个配置文件的讲解可以看一看 ibatis中SQL映射配置文件中动态SQL语句语法 

动态语句的编写与理解,方便今后查看。而且我自己也写了一个SQL语句的配置文件,如下:

<?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"><!-- 自己单独写SQL语句  --><sqlMap namespace="UserDAO">    <select id="select" parameterClass="java.lang.String" resultMap="UserDO">select ID,USERNAME,PASSWORDfrom USERwhere PASSWORD = #password#</select></sqlMap>
主要配置文件和SQL语句相关配置文件都结束了,接下来说一说我单独写的有关连接数据库的.properties文件

driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/testusername=rootpassword=1234
这个配置文件在书写的时候一定要小心,不可以有无用的空格,不然会保存,这样将他提出来也是便于今后修改和整理,以下是对jdbc连接数据库的详细解析:

#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=123

#<!-- 初始化连接 -->
initialSize=10

#最大连接数量
maxActive=50

#<!-- 最大空闲连接 -->
maxIdle=20

#<!-- 最小空闲连接 -->
minIdle=5

#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000


#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=utf-8

#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true

#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=

#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED

配置文件都OK了,下面就是实体类和测试类了,实体类必须要封装,这是必须的。

package entity;public class User {private int id;private String username;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
测试类我在这里给大家写出了基本的增删改查:

package test;import java.io.Reader;import java.util.List;import com.ibatis.common.resources.Resources;import com.ibatis.common.util.PaginatedList;import com.ibatis.sqlmap.client.SqlMapClient;import com.ibatis.sqlmap.client.SqlMapClientBuilder;import entity.User;public class Test {public static void main(String[] args) {SqlMapClient sqlMapclient = null;try {Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");//SqlMapClient是ibatis的核心组件,提供数据操作的基础平台。SqlMapClient可通过XmlSqlMapClientBuilder创建: sqlMapclient = SqlMapClientBuilder.buildSqlMapClient(reader);User user = new User();//增user.setId(3);user.setPassword("1234");user.setUsername("cg1");sqlMapclient.insert("insert", user);//改//user.setPassword("123");//user.setId(1);//sqlMapclient.update("updateUser", user);//删//sqlMapclient.delete("deleteUserByName","troy");//查//@SuppressWarnings("unchecked")////调用写的基本方法//List<User> users = (List<User>) sqlMapclient.queryForList("selectUser", "cg");//for(User temp : users) {//System.out.println(temp.getId() + "-" + temp.getUsername() + "-" + temp.getPassword());//}//@SuppressWarnings("unchecked")////调用自己后填入的方法//List<User> users1 = (List<User>) sqlMapclient.queryForList("select", "123456");//for(User temp : users1) {//System.out.println(temp.getId() + "-" + temp.getUsername() + "-" + temp.getPassword());//}reader.close();} catch (Exception e) {e.printStackTrace();}}}
这篇文章主要参考了以下文章:

iBATIS配置文件详细说明

简单实例链接地址:

 ibatis框架简单应用

0 0
原创粉丝点击