ibatis配置随记

ibatis与hibernate都是持久层的额技术框架,这里记录一下ibatis的简单配置,作为自己以后的参考。

ibstis的配置主要由两种文件:

(一)有关项目的总体配置,如连接的数据源,连接池,缓存等的配置,也即sqlmapconfig.xml文件的配置。
(二)sqlmap.xml文件的配置,也即对象与表的操作映射的配置。

一、sqlMapConfig.xml配置

SqlMapConfig配置文件中可以配置JDBC连接,SqlMap映射文件,<properties>元素的配置,<settings>元素的配置,<typeAlias>元素,transactionManager元素,sqlMap元素等信息。如下是列举的一些配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
        PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
        "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
    
    <properties resource="jdbc.properties" />
    
    <transactionManager type="JDBC">
        <dataSource type="SIMPLE">
            <property name="JDBC.Driver" value="${jdbc.driverClassName}" />
            <property name="JDBC.ConnectionURL" value="${jdbc.url}" />
            <property name="JDBC.Username" value="${jdbc.username}" />
            <property name="JDBC.Password" value="${jdbc.password}" />
        </dataSource>
    </transactionManager>
    
    <settings>
        <lazyLoadingEnabled>true</lazyLoadingEnabled>
        <cacheModelsEnabled>true</cacheModelsEnabled>
        <enhancementEnabled>true</enhancementEnabled>
        <useStatementNamespaces>false</useStatementNamespaces>
    </settings>
    
    <typeAlias alias="User" type="ibatis.model.User" />

    <sqlMap resource="ibatis/resources/User.xml" />
    
</sqlMapConfig>

1.1 、<properties>元素的配置

<properties>元素的配置,它提供了允许在主配置文件之外的一个“键值对”列表,可以将其中的配置信息加载进来,而这些配置信息可以放在任何一个地方。使用properties元素,其中有两个属性,分别是:resource和url。

使用resource属性时,类加载器会从类路径开始定位该资源;而使用url属性时,则是用java.net.URL类来处理的,提供一个有效的URL即可。

1.2、<settings>元素的配置

<settings>元素的配置,这个元素即设置iBatis的全局配置信息。下面是一些可配置的属性信息说明。

  • lazyLoadingEnabled,从名字即可看出是否进行延迟加载。通俗来说,延迟加载就是只加载必要信息而推迟加载其他未明确请求的数据,这里要和Hibernate中延迟加载区分开。那也就是说,除非绝对必须,否则程序加载的数据越少越好。iBatis默认使用了延迟加载,即不配置时也是默认为true的。
  • cacheModelsEnabled,这是数据缓存的配置,缓存可以提高程序的性能,这是显而易见的。和延迟加载一样,缓存也是默认启用的。
  • enhancementEnabled,该配置是来说明是否使用cglib中那些优化的类来提高延迟加载的性能,默认值为true,也就是启用。但是之前的示例中,并没有在lib中加入cglib的类库,那么iBatis没有在类路径上发现cglib时,该功能也就不能起作用了。这里多说一点,对于增强框架,除非必须,尽量避免使用。
  • useStatementNamespaces,该配置说明是否使用语句的命名空间,默认是不使用的,但是在大型应用时,使用命名空间来作为限定就比较清楚了。使用方法是在<sql-map>标记上加namespace属性即可,在程序中就使用“命名空间.SQL映射语句”这种语法来执行。

1.3、<typeAlias>元素

<typeAlias>元素,就是起别名,很容易理解,我们不想使用过长的类名时,可以用它来起个别名,之后我们使用别名就可以了。很容易看出type属性是原始的类名,而alias属性配置我们希望使用的名字即可。

iBatis已经为我们设置了一些类型的别名,我们就可以直接使用了,比如事务管理器的JDBC,JTA和EXTERNAL;数据类型的string,byte,long,short,int等;数据源工厂的SIMPLE,DBCP,JNDI;高速缓存控制器的FIFO,LRU,MEMORY,OSCACHE和XML结果类型的DOM,domCollection,Xml,XmlCollection,它们是可以直接使用的。 

1.4、transactionManager元素

transactionManager元素,没错,它就是来做事务的。iBatis内置的事务管理器有JDBC,JTA和EXTERNAL。EXTERNAL表示事务管理器是应用程序本身负责,而不是iBatis。使用type属性就能在transactionManager元素中配置事务管理器了。比如:

<transactionManager type="JDBC"></transactionManager>  

它还有一个可以配置的属性是commitRequired,来配置在某个连接释放之前必须提交或者回滚的情况。 

在transactionManager元素中还可以继续配置<properties>元素和<dataSource>元素。properties元素用于指定transactionManager的配置项,而后者用于配置数据源工厂,默认提供三种SIMPLE,DBCP和JNDI。 

1.5 、typeHandler元素

typeHandler元素,即类型处理器,用于将数据库中的数据类型转换成应用程序中使用的数据类型。假如数据库中不支持布尔值,那么只能以0/1来代表,而Java应用程序中支持布尔值,这里就需要一个类型处理的过程。使用时需要创建两个类,一个是类型处理类,一个是类型处理回调类。iBatis预先设置了大量的类型处理器,如果不是必须,为了程序的简单,那么尽量不要使用。

1.6、sqlMap元素元素

sqlMap元素,它就是配置SQL语句的了,是我们最常用到的一个标签。可以使用namespace来确定一个命名空间,这在之前已经说到了,可以将同一流程的SQL语句写在一起,放到一个命名空间下,在程序中使用更加清晰。在sqlMap之中,就是对数据库具体操作的实现了,包括增删改查等标记。

二、sqlmap.xml配置

例如我们面想要对一个User对象和users表进行数据库操作关联,我们创建一个User.xml的配置文件,配置信息如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE sqlMap        
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"        
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">  
<sqlMap>  
    <typeAlias alias="User" type="ibatis.model.User" />  
    <select id="getAllUsers" resultClass="User">  
        select *  
        from users  
    </select>  
</sqlMap> 

typeAlias标签是设置别名用的,这里我们使用了一个Bean叫做User,声明别名后,在文件的后续部分可以直接使用别名而不用再给出完整类型了,非常方便,如select标签中的resultClass属性。 
    这个配置我们使用的是Bean作为返回的结果类型,当然也可以使用Map,非常灵活。select的id是标识该SQL语句的标识符,要在应用程序中使用到,必须唯一。select标签体内的部分就是SQL语句了,当然这里是一个简单的示例,也可以使用update、insert、delete等标签。 

三、使用SqlMapClient接口提供的方法进行数据操作

示例代码如下:

package ibatis;  
import ibatis.model.User;  
import java.io.*;  
import java.sql.SQLException;  
import java.util.List;  
import com.ibatis.common.resources.Resources;  
import com.ibatis.sqlmap.client.*;  
public class IBatisDemo {  
    public static void main(String[] args) throws IOException, SQLException {  
        String config = "ibatis/SqlMapConfig.xml";  
        Reader reader = Resources.getResourceAsReader(config);  
        SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);  
        List<User> list = sqlMap.queryForList("getAllUsers");  
        for (User user : list) {  
            System.out.println(user);  
        }  
    }  

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值