`
kumcun
  • 浏览: 89240 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ibatis3.0配置

 
阅读更多

配置文件

 

配置文件的层次结构如下:

 configuration

    o properties

    o settings

    o typeAliases

    o typeHandlers

    o objectFactory

    o plugins

    o environments

     environment

          • transactionManager

          • dataSource

    o mappers

 

1 properties

用来定义外部properties配置文件信息。比如

<properties resource="org/apache/ibatis/example/config.properties">

    <property name="username" value="dev_user"/>

    <property name="password" value="F2Fa3!33TYyg"/>

properties>

<dataSource type="POOLED">

    <property name="driver" value="${driver}"/>

    <property name="url" value="${url}"/>

    <property name="username" value="${username}"/>

    <property name="password" value="${password}"/>

dataSource>

 

 

那么usernamepassword被替换成dev_userF2Fa3!33TYyg,而driveurl属性将读取config.properties中的内容从而取得具体值

 

properties还可以通过SqlSessionFactoryBuilderbuild方法作为参数传入:

 

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, props);

// ... or ...

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment, props);

 

property加载顺序:

1properties元素内部

2、外部properties文件

3SqlSessionFactoryBuilderbuild方法参数

也就是说,build方法参数中的properties优先级高于前两个,因为它是最后被加载,所以会覆盖前两种加载方法加载的properties值。

 

2 settings

 

Setting 描述 合法值 默认值

cacheEnabled 是否使用全局缓存 true|false true

lazyLoadingEnabled 是否使用全局懒加载 true|false true

multipleResultSetsEnabled 是否允许返回多个结果集合(需要兼容的驱动) true|false true

useColumnLabel 使用列标签取代列名(不同驱动表现不同) true|false true

useGeneratedKeys 允许jdbc自动生成主键 true|false false

enhancementEnabled(该属性在测试的时候报错,提示不存在,查阅资料好像文档里写错了,这个属性已经取消) 全局性地启用或禁用运行时字节码增强,以优化enhancementEnabled访问Java Bean属性的性能,同时优化延迟加载的性能。 true|false false

defaultExecutorType 配置默认执行方式

SIMPLE nothing special

REUSE reuses prepared statemets

BATCHreuses statements and batches updates SIMPLE

REUSE

BATCH  SIMPLE

defaultStatementTimeout 数据库超时时间 Any positive

integer  Not Set

(null) 

 

例子:

 

    cacheEnabled" value="true"/>

    lazyLoadingEnabled" value="true"/>

    multipleResultSetsEnabled" value="true"/>

    useColumnLabel" value="true"/>

    useGeneratedKeys" value="false"/>

    enhancementEnabled" value="false"/>

    defaultExecutorType" value="SIMPLE"/>

    defaultStatementTimeout" value="25000"/>

 

3 typeAliases

 

java类别名

 

<typeAliases>

    <typeAlias alias="Author" type="domain.blog.Author"/>

    <typeAlias alias="Blog" type="domain.blog.Blog"/>

    <typeAlias alias="Comment" type="domain.blog.Comment"/>

    <typeAlias alias="Post" type="domain.blog.Post"/>

    <typeAlias alias="Section" type="domain.blog.Section"/>

    <typeAlias alias="Tag" type="domain.blog.Tag"/>

typeAliases>

4 typeHandlers

 

Type Handler Java Types JDBC Types

BooleanTypeHandler Boolean,boolean Any compatible BOOLEAN

ByteTypeHandler Byte,byte Any compatible NUMERIC or BYTE

ShortTypeHandler Short,short Any compatible NUMERIC or SHORT INTEGER

IntegerTypeHandler Integer,int Any compatible NUMERIC or INTEGER

LongTypeHandler Long,long Any compatible NUMERIC or LONG INTEGER

FloatTypeHandler Float,float Any compatible NUMERIC or FLOAT

DoubleTypeHandler Double,double Any compatible NUMERIC or DOUBLE

BigDecimalTypeHandler BigDecimal Any compatible NUMERIC or DECIMAL

StringTypeHandler String CHAR,VARCHAR

ClobTypeHandler String CLOB,LONGVARCHAR

NStringTypeHandler String NVARCHAR,NCHAR

NClobTypeHandler String NCLOB

ByteArrayTypeHandler byte[] Any compatible byte stream type

BlobTypeHandler byte[] BLOB,LONGVARBINARY

DateTypeHandler Date(java.util) TIMESTAMP

DateOnlyTypeHandler Date(java.util) DATE

TimeOnlyTypeHandler Date(java.util) TIME

SqlTimestampTypeHandler Timestamp(java.sql) TIMESTAMP

SqlDateTypeHadler Date(java.sql) DATE

SqlTimeTypeHandler Time(java.sql) TIME

ObjectTypeHandler Any OTHER,or unspecified

EnumTypeHandler Enumeration Type VARCHAR – any string compatible type,as the code is stored(not the index)

 

也可以通过实现TypeHandler接口来实现自定义的类型转换器

 

// ExampleTypeHandler.java

public class ExampleTypeHandler implements TypeHandler {

    public void setParameter(

        PreparedStatement ps, int i, Object parameter,JdbcType jdbcType)

    throws SQLException {

        ps.setString(i, (String) parameter);

    }

    public Object getResult(

        ResultSet rs, String columnName)

    throws SQLException {

        return rs.getString(columnName);

    }

    public Object getResult(

        CallableStatement cs, int columnIndex)

    throws SQLException {

        return cs.getString(columnIndex);

    }

}// MapperConfig.xml

 

    String" jdbcType="VARCHAR"

    handler="org.apache.ibatis.example.ExampleTypeHandler"/>

这样会覆盖原来ibatis默认的string varchar转换器5 objectFactory

 

ibatis使用objectFactory去创建result object的实例对象,这里可以自己继承DefaultObjectFactory类实现自己的ObjectFactory

 

// ExampleObjectFactory.java

public class ExampleObjectFactory extends DefaultObjectFactory {

    public Object create(Class type) {

        return super.create(type);

    }

    public Object create(

        Class type,

        List constructorArgTypes,

        List<> constructorArgs) {

        return super.create(type, constructorArgTypes, constructorArgs);

    }

    public void setProperties(Properties properties) {

        super.setProperties(properties);

    }

}// MapperConfig.xml

org.apache.ibatis.example.ExampleObjectFactory">

    someProperty" value="100"/>

6 plugins

 

ibatis允许插件截断以下方法调用

Executor(update,query,flushStatements,commit,rollback,getTransaction,close,isClosed)

ParameterHandler(getParameterObject,setParameters)

ResultSetHandler(handleResultSets,handleOutputParameters)

StatementHandler(prepare,parameterize,batch,update,query)

必须在理解这些方法的基础上很小心的使用插件,不然很容易破坏ibatis的核心

 

// ExamplePlugin.java

@Intercepts({@Signature(

    type= Executor.class,

    method = "update",

    args = {MappedStatement.class,Object.class})})

   

    public class ExamplePlugin implements Interceptor {

        public Object intercept(Invocation invocation) throws Throwable {

            return invocation.proceed();

        }

        public Object plugin(Object target) {

            return Plugin.wrap(target, this);

        }

        public void setProperties(Properties properties) {

        }

}

 

// MapperConfig.xml

 

org.apache.ibatis.example.ExamplePlugin">

    someProperty" value="100"/>

 

7 environments

 

这个是ibatis 3非常好的一个配置,允许配置多个不懂运行环境参数,不过每个SqlSessionFactory只可以在一种环境下被创建。

利用SqlSessionFactorybuild函数

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader,environment);

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader,environment,properties);

如果不知名environment参数,则应用默认的环境参数

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader);

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader,properties);

 

xml中如下配置:

 

default="development">

    development">

        JDBC">

            " value=""/>

       

    POOLED">

        driver" value="${driver}"/>

        url" value="${url}"/>

        username" value="${username}"/>

        password" value="${password}"/>

   

   

 

几个注意点:

默认environment id default="development">

environment iddevelopment">

事务控制类型:JDBC">

   JDBC:根据jdbc控制事务的提交和回滚

    MANAGED:将事务控制转交给容器

数据源类型:POOLED">

   UNPOOLED:不使用池技术,在请求到来时直接打开或者关闭数据库连接

        必须配置的参数:driverurlusernamepassword

        可选参数:使用driver.xxx来配置,如:driver.encoding=UTF8

    POOLED:使用数据库连接池

        poolMaximumActiveConnections:同一时间内最大连接数 默认10

            

        poolMaximumIdleConnections:连接最大空闲数目

            

        poolMaximumCheckoutTime:连接被每个任务占用的最大时间 默认20000ms

            

        poolTimeToWait:连接池中无可用连接时,线程的等待时间 默认20000ms

            

        poolPingQuery:数据库连接状态检测语句,类似于ping的功能 默认NO PING QUERY SET

            

        poolPingEnabled:是否允许ping检测 默认false

           

        poolPingConnectionsNotUsedFor:对超过指定空闲时间的数据库连接进行状态监测 默认0 (必须在poolPingEnabled设置true情况下)

            

   JNDI

        initial_context:可选,没看明白,原文:This property is used for the Context lookup from the InitialContext

        data_sourceJNDI数据库名称

        使用env.xxx配置可选参数,如:env.encoding=UTF8

 

 

8 mappers

 

配置实体映射文件的路径// Using classpath relative resources

<mappers>

<mapper resource="org/apache/ibatis/builder/AuthorMapper.xml"/>

<mapper resource="org/apache/ibatis/builder/BlogMapper.xml"/>

<mapper resource="org/apache/ibatis/builder/PostMapper.xml"/>

mappers>

// Using url fully qualified paths

<mappers>

<mapper url="file:///var/sqlmaps/AuthorMapper.xml"/>

<mapper url="file:///var/sqlmaps/BlogMapper.xml"/>

<mapper url="file:///var/sqlmaps/PostMapper.xml"/>

mappers>

分享到:
评论

相关推荐

    最新的ibatis 3.0(包含源码)

    5. **Mapper配置与映射文件**:在Ibatis 3.0中,映射文件(Mapper XML)通常与Mapper接口一起使用,其中定义了SQL查询和结果映射。映射文件可以被加载到SqlSessionFactory中,成为Mapper接口的一部分。 6. **注解...

    ibatis3.0示例

    iBatis 3.0的配置文件(通常为`mybatis-config.xml`)是整个系统的核心,它定义了数据源、事务管理器、插件等全局配置。SqlSessionFactory则是根据配置文件创建的对象,用于生成SqlSession实例,它是执行SQL的入口...

    ibatis3.0+jsp(demo)

    总的来说,"ibatis3.0+jsp(demo)"项目是一个学习和实践Java Web数据库操作的好资源,涵盖了iBATIS的配置、映射、SQL执行,以及JSP的视图展示,对于理解Java Web开发和数据库操作具有很高的参考价值。通过深入研究这...

    配置ibatis3.0时,发生的小错误

    在配置iBatis3.0时,可能会遇到各种小错误,这些错误往往由于不正确的配置、依赖缺失或者编码问题导致。以下是对这个主题的详细解释。 首先,让我们了解iBatis是什么。iBatis是一个优秀的持久层框架,它允许开发者...

    Ibatis3.0 增删改查(三)

    在本教程中,我们将深入探讨...总结,Ibatis 3.0提供了一套完善的接口和XML配置机制,使得数据库操作变得简单而灵活。通过学习这一部分,你应能熟练掌握在Ibatis中进行数据的增删改查操作,并理解其背后的原理和用法。

    ibatis3.0中in的用法

    通过本文的介绍,我们不仅了解了ibatis3.0中`IN`语句的基本用法,还深入学习了`&lt;foreach&gt;`标签的具体配置及其实现细节。这对于提高SQL查询的灵活性和效率具有重要意义。在实际开发中,合理运用这些技术,可以大大...

    ibatis3.0中文文档和英文文档

    2. **配置**:Ibatis3.0的配置文件(mybatis-config.xml)包含了数据源、事务管理器等核心配置。此外,还支持基于Java的配置,允许在代码中动态创建SqlSessionFactory。 3. **SqlSession与SqlSessionFactory**:...

    ibatis 3.0 使用参考

    介绍了ibatis3.0的配置技巧,包括比较复杂的sql语句的写法。

    Ibatis3.0 增删改查(二)

    Ibatis3.0是Mybatis的前身,它提供了一种灵活的方式来映射SQL语句,使得数据库交互变得更加简单。在这个“增删改查(二)”的主题中,我们将继续上一部分的内容,详细介绍如何执行数据库的基本操作。 首先,我们...

    Ibatis3.0+spring2.5+strut2

    ### Ibatis3.0 + Spring2.5 + Struts2 整合实践 #### 一、项目背景与目的 在本篇文章中,我们将探讨如何将 Ibatis3.0(实际上是 MyBatis 的早期版本,这里可能是指 MyBatis 3.0)、Spring2.5 和 Struts2 这三个...

    ibatis_3.0_Dynamic_Sql_设计解析(并与2.x的差异)

    在ibatis 2.x中,Dynamic Sql的配置较为繁琐,需要使用特定的标签如`&lt;isNotNull&gt;`、`&lt;iterate&gt;`等来构建动态部分。例如,为了根据参数是否为空来决定是否包含某个条件,需要使用`&lt;isNotNull&gt;`标签,而对于集合参数的...

    struts2_spring_ibatis3.0整合

    在提供的文件`ibatis_spring`中,可能包含了iBatis和Spring整合的相关配置文件和示例代码,如`sqlMapConfig.xml`、`applicationContext.xml`、映射文件以及相关的Java类。通过分析这些文件,你可以更好地理解如何在...

    spring3.0 + ibatis+jquery+注解建立dao、service类

    标题 "spring3.0 + ibatis+jquery+注解建立dao、service类" 提供了我们讨论的核心技术栈,这是构建一个基于Java的Web应用程序的常见组合。Spring框架是核心,用于依赖注入(DI)和面向切面编程(AOP),iBatis则作为...

    ibatis-core-3.0.jar.zip

    《深入解析iBatis核心库:ibatis-core-3.0.jar》 iBatis,一个优秀的持久层框架,以其轻量级、易用性、灵活性等特性深受开发者喜爱。在Java开发领域,iBatis作为数据访问层的解决方案,为数据库操作提供了强大的...

    ibatis用xml配置文件配置使用

    DOCTYPE mapper PUBLIC "-//iBATIS.com//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"&gt; SELECT * FROM users WHERE id = #{id} ... ``` 注意,`namespace`属性应与映射接口...

    ibatis-3-core-3.0.0.227.z

    其中,SqlMapConfig.xml是iBatis的核心配置文件,它定义了数据源、事务管理器、SQL映射文件等全局设置。 接着,"ibatis-3-core-src-3.0.0.227.zip"则是iBatis源码包,对于开发者来说,这是一份宝贵的资源。通过阅读...

    ibatis相关配置

    ### Ibatis配置详解 1. **全局配置文件(ibatis-config.xml)** 全局配置文件是Ibatis系统的起点,它包含了数据源、事务管理器、插件、类型别名等整体设置。例如: ```xml &lt;!DOCTYPE configuration PUBLIC "-/...

    Spring 3.0 整合Ibatis 3

    ### Spring 3.0 整合 iBatis 3 的实践与配置 #### 一、背景介绍 在软件开发过程中,经常会遇到需要整合多种技术框架的情况。本文将详细介绍如何将 Spring 3.0 与 iBatis 3 进行整合。尽管作者提到 iBatis 3 在当时...

    Spring 3.0 整合 iBatis 3 Beta10 配置

    在Spring 3.0中整合iBatis 3 Beta10是一个相对复杂的过程,因为官方文档并未明确提及对iBatis 3的支持。不过,通过一些自定义配置和理解两个框架的基本原理,开发者可以实现这样的整合。下面我们将详细介绍如何进行...

Global site tag (gtag.js) - Google Analytics