iBatis配置与应用

yigui2001 发表于 2006-10-16 14:22:52
作者:Arom_chen     来源:参照ibatis Guide整理
评论数:11 点击数:12,678     投票总得分:3 投票总人次:1
关键字:iBatis;数据库;持久层;配置;应用

摘要:

本文介绍了IBatis的简单入门配置与操作. 作者通过简单的例子对IBatis进行了入门性的介绍.
一.iBatis基础配置

1.1. 下载iBatis驱动组件
  下载压缩文件包:iBATIS_DBL-2.1.7.597.zip
    需用的:ibatis-common-2.jar
                ibatis-dao-2.jar
                ibatis-sqlmap-2.jar

1.2. SqlMapConfig.xml
   <?xml version="1.0" encoding="UTF-8" ?>

<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="org.gjt.mm.mysql.Driver"/>
                        <property name="JDBC.ConnectionURL"                                                 value="jdbc:mysql://localhost/ibatissample"/>
                        <property name="JDBC.Username" value="root"/>
                        <property name="JDBC.Password" value="chenyan"/>
                        <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 t_user"/>
                        <property name="Pool.PingEnabled" value="false"/>
                        <property name="Pool.PingConnectionsOlderThan" value="1"/>
                        <property name="Pool.PingConnectionsNotUsedFor" value="1"/>
                </dataSource>
        </transactionManager>
        <sqlMap resource="hs/com/ibatis/User.xml"/>
</sqlMapConfig>


注意点:1. maxRequests >= maxSessions > maxTransactions
           2. useStatementNamespaces节点:对应于映射文件中的namespace属性,当此节点为true的时候,Statement调用需要追加命名空间。当此节点为false的时候,则需保证所有的映射文件中,Statement定义无重名。

1.3. POJO文件
package hs.com.ibatis.POJO;
import java.io.Serializable;
public class User implements Serializable {
private Integer id;
private String name;
private Integer sex;
/** default constructor */
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;}
}


1.4. 映射文件
<?xml version="1.0" encoding="UTF-8"?>

<sqlMap namespace="User">
<typeAlias alias="user" type="hs.com.ibatis.POJO.User"/>
<select id="getUser“ parameterClass="java.lang.String“ resultClass="user">
<![CDATA[ Select name, sex from t_user where name = #name# ]]>
</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>


二.iBatis基础组件与操作

1. XmlSqlMapClientBuilder
       2.0版本后引入,以替代XmlSqlMapBuilder。作用是根据配置文件创建SqlMapClient实例。2.7版本中好像找不到了!

2. SqlMapClient
       提供数据操作的基础平台,线程安全
      
 String resource ="hs/com/ibatis/SqlMapConfig.xml";
        Reader reader = Resources.getResourceAsReader(resource);
        //XmlSqlMapClientBuilder xmlBuilder = new XmlSqlMapClientBuilder();
        SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);


SqlMapClient基本操作:
  数据写入(Insert,Update,Delete)
  数据查询
  在指定对象中存放查询结果
  执行批量查询
  查询指定范围内的数据
  结合RowHandler查询
  分页查询
  基于Map的批量查询

数据写入(Insert):
sqlMap.startTransaction();
Product product = new Product();
product.setId (1);
product.setDescription (“Arom_chen”);
int rows = sqlMap.insert (“insertProduct”, product);
sqlMap.commitTransaction();


数据查询:
sqlMap.startTransaction();
Integer key = new Integer (1);
Product product = (Product)sqlMap.queryForObject
(“getProduct”, key);
sqlMap.commitTransaction();


其他的操作也是基本上根据上面两种操作变化而来!

三.iBatis高级特性

3.1. 数据关联
3.2. 延迟加载
3.3. 动态映射
<select id="getUsers"
parameterClass="user"
resultMap="get-user-result">
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>


注意:在第一个条件成立的时候不会加AND前缀。

3.4. 事务管理

附(mysql表):CREATE TABLE t_address (id int(10) not null,

country varchar(100) not null,

city varchar(100),

town varchar(100),

number int(10),

PRIMARY KEY(id))

TYPE=myisam;



CREATE TABLE t_user (id int(10) not null,

name varchar(100) not null,

sex int(10),

PRIMARY KEY(id))

TYPE=myisam;

本页页面地址:

投票评分(记入本贴作者的专家分)

     非常好 还行 一般 扔鸡蛋          投票总得分: / 投票总人次:

用户评论列表

#1 评论作者: dfd 发表时间: 2006-10-18 11:25 上午

fdfggdfgdfgfdgdg

#2 评论作者: xxx 发表时间: 2006-10-19 05:47 下午

真不知道该怎么评价。官方有中文的文档。你写得也简单了一些吧!

#3 评论作者: ???? 发表时间: 2006-10-19 05:47 下午

真不知道该怎么评价。官方有中文的文档。你写得也简单了一些吧!

#4 评论作者: piaoling 发表时间: 2006-10-25 08:38 上午

嗯,简洁。不过对于初学者来说,还是摸不着头脑

#5 评论作者: yigui2001 发表时间: 2006-10-25 11:02 上午

我觉得大家如果按照这样的配置去写的话,不用修改代码,
就可以直接跑通了。所以看起来好像没什么东西。
因为其中的很多配置都没讲到,但不影响程序运行阿!

#6 评论作者: shugengen 发表时间: 2006-10-26 11:47 上午

讲的有点乱,没有讲清楚整体的各个部分的关系

#7 评论作者: dongdonglipei 发表时间: 2007-06-24 03:04 下午

正在找这个东东,太好了,

#8 评论作者: hao 发表时间: 2007-07-06 03:39 下午

hao a hao ahao a hao ahao a hao a

#9 评论作者: 0obeiiedo0 发表时间: 2008-03-15 09:30 下午

不胜感激!!!!!!

#10 评论作者: inhnet 发表时间: 2009-01-05 04:28 下午

bu ming que


发表我的评论 (评论可增加个人积分...)

用户*: E-mail:
评论内容*:

支持BBCode
算术题*: + =