ibatis学习总结一

ibatis就是现在的mybatis。是一个持久层的框架。 和hibernate的不同就是 ibatis跟灵活。

先看一个简单的例子

核心的

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>
	<properties resource="db.properties"/>
    <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="${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="Pool.TimeToWait" value="500" />

            <property name="Pool.PingQuery" value="select 1 from sample" />

            <property name="Pool.PingEnabled" value="false" />

            <property name="Pool.PingConnectionsOlderThan" value="1" />

            <property name="Pool.PingConnectionsNotUsedFor" value="1" />

        </dataSource>

    </transactionManager>
    <!--每个具体的关系对象映射-->
    <sqlMap resource="xzj/test/map/User.xml" />

</sqlMapConfig>

然后我们好好看看这个配置文件。看看他的dtd定义可以帮助理解一下。注释中详细的解释了一些属性和标签。 没写的我也不清楚。。。以后看到补上。

这个就是最核心的配置了。我们将根据这个文件创建SqlMapClient对象。

<!-- 根节点 配置数据源的信息,数据映射和其他可选项。例如:线程管理。。-->
<!--  
properties : 这个是配置外部应用配置文件的。属性有2个:resource 本地文件  url 外部
settings :全局的配置:  
   	classInfoCacheEnabled (true | false) #IMPLIED 
  	lazyLoadingEnabled (true | false) #IMPLIED  延迟加载 默认是true  不是必须的
	statementCachingEnabled (true | false) #IMPLIED   引用sql时 是否使用限定名字。 默认是false
	cacheModelsEnabled (true | false) #IMPLIED  高速缓存 默认是true  不是必须的
	enhancementEnabled (true | false) #IMPLIED   是否使用 cblib中的优化类来提高延迟加载的性能 默认是true
	errorTracingEnabled (true | false) #IMPLIED
	useStatementNamespaces (true | false) #IMPLIED
	useColumnLabel (true | false) #IMPLIED
	forceMultipleResultSetSupport (true | false) #IMPLIED
	maxSessions CDATA #IMPLIED  已废弃
	maxTransactions CDATA #IMPLIED 已废弃
	maxRequests CDATA #IMPLIED 已废弃
	defaultStatementTimeout CDATA #IMPLIED
resultObjectFactory:
typeAlias:别名
	alias CDATA #REQUIRED  别名
	type CDATA #REQUIRED   原名
typeHandler:类型处理器 一般情况下不要处理。
	<!ELEMENT typeHandler EMPTY>
	<!ATTLIST typeHandler
	javaType CDATA #REQUIRED
	jdbcType CDATA #IMPLIED
	callback CDATA #REQUIRED
	>
transactionManager:事务管理
	<!ELEMENT transactionManager (property*,dataSource)>
		property:定义各种属性。。。。
		dataSource:必须项 定义dataSourceFactory。 就是用哪个工厂来创建 dataSource 主要有以下3种
			SIMPLE:简单的数据源工厂。jdbc不需要你额外的操作了。 ibaties包里都包含了所有的东西。
			DBCP:DBCP数据源工厂。用于使用jakata Commons数据库连接池实现。
			JNDI:jndi数据源工厂。允许使用 iBaties 共享通过JNDI定位的基于容器的数据源
			
	<!ATTLIST transactionManager
	type CDATA #REQUIRED 类型 主要有 JDBC 提供简单的基于jdbc的事务管理(一般就用这个)  JTA 在应用程序中基于容器的事务管理  EXTERNAL 用于提供非事务管理,并假定管理事物的是应用程序。而非ibaties
	commitRequired (true | false) #IMPLIED 用于要求释放某个链接前 必须提交或者回滚。 默认为false
	>
sqlMap :映射。。
	resource CDATA #IMPLIED  就是映射的xml的路径
	url CDATA #IMPLIED
 -->
<!ELEMENT sqlMapConfig (properties?, settings?, resultObjectFactory?, typeAlias*, typeHandler*, transactionManager?, sqlMap*)+>
<!ATTLIST sqlMapConfig
xmlns:fo CDATA #IMPLIED
>

注意看SqlMapConfig.xml 的最后sqlMap标签,他负责载入每个 映射文件。个人感觉和hibernate最大的不同之一在于这里映射。hibernate是一个表对应一个映射文件。而ibats是一个返回集对应一个。

下面贴上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">
    <typeAlias alias="user" type="xzj.test.bean.User" />
    <select id="getUser" parameterClass="java.lang.String"
        resultClass="user">
        <![CDATA[    select  name,  sex   from t_user   where name = #name#   ]]>
    </select>
    <select id="getAllUser" resultClass="user">
        <![CDATA[   select   name,  sex  from t_user  ]]>
    </select>
    <update id="updateUser" parameterClass="user">
        <![CDATA[   UPDATE t_user  SET name=#name#, sex=#sex# WHERE id = #id# ]]>
    </update>
    <insert id="insertUser" parameterClass="user">
        INSERT INTO t_user ( name, sex) VALUES ( #name#, #sex# )</insert>
    <delete id="deleteUser" parameterClass="java.lang.String">
        delete from t_user where id=#value#
    </delete>
</sqlMap>

这是一个简单的例子。这里不详细讨论User.xml。后面单独讨论。 因为这个是最重要的部分了。

下面贴上对象类

User.java


public class User implements Serializable {
    private Integer id;
    private String name;
    private Integer sex;
    public User() {
    }
    public Integer getId() {
        return this.id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {

        return this.name;
    }
    public void setName(String name) {

        this.name = name;
    }
    public Integer getSex() {

        return this.sex;
    }
   public void setSex(Integer sex) {
        this.sex = sex;
    }
}
测试类

Test1.java

public class Test1 {
	public static void update() {

		//首先初始化iBatis获得一个SqlMapClient对象。路径就是你自己写的核心配置文件。 我这里特意写成SqlMapConfig1.xml是为了说明可以自定义命名。
                String resource = "xzj/test/map/SqlMapConfig1.xml";

		com.ibatis.sqlmap.client.SqlMapClient sqlMap = null;

		try {

			java.io.Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader(resource);

			sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

		} catch (Exception e) {

			e.printStackTrace();

		}

		// sqlMap系统初始化完毕,开始执行update操作

		try {

			sqlMap.startTransaction();

			User user = new User();

			user.setId(new Integer(1));

			user.setName("dsb");

			user.setSex(new Integer(1));

			sqlMap.update("updateUser", user);

			sqlMap.commitTransaction();

		} catch (SQLException e) {

			System.out.println(e.getMessage());

		} finally {

			try {

				sqlMap.endTransaction();

			} catch (SQLException e) {

				e.printStackTrace();

			}

		}

	}

	public static List getUser() {

		//	            首先初始化iBatis获得一个SqlMapClient对象

		String resource = "xzj/test/map/SqlMapConfig1.xml";

		com.ibatis.sqlmap.client.SqlMapClient sqlMap = null;

		List user=null;

		try {

			java.io.Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader(resource);

			sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

		} catch (Exception e) {

			e.printStackTrace();

		}

		// sqlMap系统初始化完毕,开始执行getAllUser操作

		try {

			sqlMap.startTransaction();                         

			user=sqlMap.queryForList("getAllUser", null,1,2);

			sqlMap.commitTransaction();

		} catch (SQLException e) {

			System.out.println(e.getMessage());

		} finally {

			try {

				sqlMap.endTransaction();

			} catch (SQLException e) {

				e.printStackTrace();

			}

		}

		return user;

	}

	public static void main(String[] args) {

		update();

		List user=getUser();       

		for(int i=0;i<user.size();i++)

		{

			System.out.println(((User)user.get(i)).getName());

		}

	}


}
这个测试类直接拷的别人的。反正很简单的例子。 数据库的配置都是写在db.properties里面的。




 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值