IBatis-学习-2

本文介绍了Ibatis2.0的核心组件SqlMapClient及其创建工具XmlSqlMapClientBuilder的功能与使用方法,并详细阐述了如何通过配置文件完成数据操作及缓存管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础语义

XmlSqlMapClientBuilder

XmlSqlMapClientBuilderibatis 2.0之后版本新引入的组件,用以替代1.x版本中的XmlSqlMapBuilder。其作用是根据配置文件创建SqlMapClient实例。

SqlMapClient

SqlMapClientibatis的核心组件,提供数据操作的基础平台。SqlMapClient可通过XmlSqlMapClientBuilder创建:

String   resource ="com/ibatis/sample/SqlMapConfig.xml";

Reader  reader = Resources.getResourceAsReader(resource);

XmlSqlMapClientBuilder    xmlBuilder   =   new XmlSqlMapClientBuilder();

SqlMapClient   sqlMap   =   xmlBuilder.buildSqlMap(reader);

"com/ibatis/sample/SqlMapConfig.xml"指明了配置文件在CLASSPATH中的相对路径。XmlSqlMapClientBuilder通过接受一个Reader类型的配置文件句柄,根据配置参数,创建SqlMapClient实例。

sqlMap.startTransaction();

// 数据写入操作

sqlMap.insert(“addUser”,user);

// 数据查询

User  user  =  sqlMap.queryForObject(“getUser”,”张三”);

// 在指定对象中存放查询结果

sqlMap.queryForObject(“getUser”,user,result);

// 执行批量查询

List<User>  list  =  sqlMap.queryForList(“getUsers”,null);

// 查询指定范围内的数据

List<User>  list  =  sqlMap.queryForList(“getUsers”,null,0,100);

// 分页查询

PaginatedList  list  =  sqlMap.queryForPaginatedList(“getUsers”,null,25);

list.nextPage();

list.previousPage();

// 基于Map的批量查询、

Map  map  =  sqlMap.queryForMap(“getUsers”,null,”userName”);

// 没有预先执行startTransaction()方法时,默认为auto_commit模式

sqlMap.commitTransaction();

OR映射

<typeAlias                 alias="user"               type="com.ibatis.sample.User"/>

<cacheModel id="userCache" type="LRU">

                <flushInterval hours="24"/>

              <flushOnExecute statement=" updateUser"/>

                 <property name="size" value="1000" />

</cacheModel>

映射文件主要分为两个部分:模块配置和Statement配置。模块配置包括:

typeAlias节点:定义了本映射文件中的别名,以避免过长变量值的反复书写,此例中通过typeAlias节点为类"com.ibatis.sample.User"定义了一个别名"user",这样在本配置文件的其他部分,需要引用"com.ibatis.sample.User"类时,只需以其别名替代即可。

cacheModel节点:定义了本映射文件中使用的Cache机制,这里申明了一个名为"userCache"的cacheModel,之后可以在Statement申明中对其进行引用:这表明对通过id为"getUser"的Select statement获取的数据,使用cacheModel "userCache"进行缓存。之后如果程序再次用此Statement进行数据查询,即直接从缓存中读取查询结果,而无需再去数据库查询。

cacheModel主要有下面几个配置点:

flushInterval :设定缓存有效期,如果超过此设定值,则将此CacheModel的缓存清空。

size:本CacheModel中最大容纳的数据对象数量。

flushOnExecute:指定执行特定Statement时,将缓存清空。如updateUser操作将更

新数据库中的用户信息,这将导致缓存中的数据对象与数据库中的实际数据发生偏差,因此必须将缓存清空以避免脏数据的出现。

Statement配置

Statement/insert/delete/update/select/procudure,各种类型的Statement 配置节点的参数类型基本一致,区别在于数量不同。如insertupdatedelete节点无需返回数据类型定义(总是int)。

主要配置如下:

    <statement id="statementName"

      [parameterClass="some.class.Name"]

      [parameterMap="nameOfParameterMap"]

      [resultClass="some.class.Name"]

      [resultMap="nameOfResultMap"]

      [cacheModel="nameOfCache"]>

      select * from t_user where sex = [?|#propertyName#]  order by [$simpleDynamic$]

    </statement>

<select id="statementName"

              [parameterClass="some.class.Name"]

              [parameterMap="nameOfParameterMap"]

              [resultClass="some.class.Name"]

              [resultMap="nameOfResultMap"]

              [cacheModel="nameOfCache"]>

           select * from t_user where sex = [?|#propertyName#]   order by [$simpleDynamic$]

</select>

<insert id="statementName"

              [parameterClass="some.class.Name"]

             [parameterMap="nameOfParameterMap"]>

             insert into t_user (name,sex) values ([?|#propertyName#],[?|#propertyName#])

</insert>

<update id="statementName"

                  [parameterClass="some.class.Name"]

                [parameterMap="nameOfParameterMap"]>

              UPDATE t_user SET name=[?|#propertyName#], sex=[?|#propertyName#]

WHERE id = [?|#propertyName#]

</update>

<delete id="statementName"

              [parameterClass="some.class.Name"]

             [parameterMap="nameOfParameterMap"]>

               delete  from   t_user   where id = [?|#propertyName#]

</delete>

参数

描述

parameterClass

参数类。指定参数的完整类名包括包路径,可通过别名来避免每次重复书写长的类名。

resultClass

结果类。指定结果类型的完整类名包括包路径,可通过别名来避免每次重复书写长的类名。

parameterMap

参数映射。需结合parameterMap节点对映射关系加以定义。对于存储过程之外的statement而言,建议使用parameterClass作为参数配置方式,一方面避免了参数映射配置工作,另一方面其性能表现也更加出色。

resultMap

结果映射。需结合resultMap节点对映射关系加以定义。

cacheModel

Statement对应的Cache模块

SQL中设定参数名时,可以同时指定参数类型,如:SET name=#name:VARCHAR#, sex=#sex:NUMERIC#    WHERE  id=#id:NUMERIC#

对于parameterMapresultMap案例如下:

<resultMap  id="get_user_result"   class="user">

     <result

              property="name"   

              column="xingming"

              jdbcType="VARCHAR"

              javaType="java.lang.String"/>

     <result

            property="sex"

            column="xingbie"

            jdbcType="int"

            javaType="java.lang.Integer"/>

</resultMap>

<parameterMap   

                 id="update_user_para"   

                 class="redemption" >

          <parameter

                     property="name"

                    jdbcType="VARCHAR"

                      javaType="java.lang.String"

                     nullValue=""/>

           <parameter

                   property="sex"

                    jdbcType="int"

                      javaType="java.lang.Integer"

                    nullValue=""/>

</parameterMap>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值