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>

 

 

那麼username和password被替換成dev_user和F2Fa3!33TYyg,而drive和url屬性將讀取config.properties中的內容從而取得具體值

 

properties還可以通過SqlSessionFactoryBuilder的build方法作爲參數傳入:

 

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

// ... or ...

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

 

property加載順序:

1、properties元素內部

2、外部properties文件

3、SqlSessionFactoryBuilder的build方法參數

也就是說,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

BATCH:reuses 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只可以在一種環境下被創建。

利用SqlSessionFactory的build函數

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 id:development">

事務控制類型:JDBC">

   JDBC:根據jdbc控制事務的提交和回滾

    MANAGED:將事務控制轉交給容器

數據源類型:POOLED">

   UNPOOLED:不使用池技術,在請求到來時直接打開或者關閉數據庫連接

        必須配置的參數:driver、url、username、password

        可選參數:使用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_source:JNDI數據庫名稱

        使用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>

   

 來自:http://blog.csdn.net/yanjunhp/article/details/5669583

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章