zoukankan      html  css  js  c++  java
  • 2017-10-6-MyBatis配置简述

    MyBatis配置简述

    MyBatis的配置元素如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration><!--配置-->
    	<properties/><!--属性-->
        <settings/><!--设置-->
    	<typeAliases/><!--类型命名-->
        <typeHandlers/><!--类型处理器-->
        <objectFactory/><!--对象工厂-->
        <plugins/><!--插件-->
        <environments><!--配置环境-->
            <environment><!--环境变量-->
                <transactionManager/><!--事务管理器-->
                <dataSource /><!--数据源-->
            </environment>
        </environments>
    	<databaseIdProvider/><!--数据库厂商提供者-->
        <mappers/><!--映射器-->
    </configuration>
    

    这些元素并不都是必须存在的,在需要时使用即可,在使用时,发现如果顺序出现颠倒会提示错误。

    properties

    <properties>属性可以在系统运行时配置一些运行参数,可以将配置文件写在xml文件或者.properties文件中。在MyBaits中可以有三种方式使用properties:

    • property子元素
    • .properties文件
    • Java程序传递

    最普遍的用法就是使用.properties文件,可以把一些数据库连接有关的键值对如数据库驱动,连接URL,用户名和密码等放在配置文件中。
    可以创建一个dataSource.properties文件:

    database.driver = com.mysql.jdbc.Driver
    database.url = jdbc:mysql://127.0.0.1:3306/dabase_name?useUnicode=true&characterEncoding=utf8
    database.username = username
    database.password = password
    

    在MyBatis中通过<properties>属性resource就可以引入properties文件。如:

    <properties resource = "dataSource.properties"/>
    

    当然也可以直接使用<properties>中的property子元素引入。

      <properties>
            <property name="username" value="username"/>
            <property name="password" value="password"/>
        </properties>
    

    settings

    settings配置比较复杂,拥有很多配置规则,但是大部分情况下使用默认的配置就可以运行,只有一些常用的规则需要配置,如缓存cacheEnabled, 级联lazyLoadingEnabled和aggressiveLazyLoading,自动映射autoMappingBehavior和mapUnderscoreToCamelCase,执行器类型defaultExecutorType。

    <settings>  
            <setting name="cacheEnabled" value="true" />  
            <setting name="lazyLoadingEnabled" value="true" />  
            <setting name="multipleResultSetsEnabled" value="true" />  
            <setting name="useColumnLabel" value="true" />  
            <setting name="useGeneratedKeys" value="false" />  
            <setting name="autoMappingBehavior" value="PARTIAL" />  
    		<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
            <setting name="defaultExecutorType" value="SIMPLE" />  
            <setting name="defaultStatementTimeout" value="25" />
    		<setting name="defaultFetchSize" value ="100"/>
            <setting name="safeRowBoundsEnabled" value="false" />  
            <setting name="mapUnderscoreToCamelCase" value="false" />  
            <setting name="localCacheScope" value="SESSION" />  
            <setting name="jdbcTypeForNull" value="OTHER" />  
            <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />  
     </settings>
    

    typeAliases

    typeAliases用于提供别名,并且可以设置package,这样在mapper文件中可以直接使用别名,不用使用带上包路径的全限定名称。MyBatis中别名不区分大小写。

    系统定义别名

    MyBatis系统定义了一些常用的内置对象的别名,其别名和Java类型的对应规则可以大致表示为:

    • 如果是基本数组类型,别名是Java类型前面加上_,如:基本类型int对应的别名为_int;
    • 如果是引用数据类型,别名是将该类型的首写字母小写,如:Integer对应的别名为integer,由于不区分大小写,实际上写成Integer也可以。

    自定义别名

    自定义别名可以使用以下的方式:
    通过扫描包的方式,可以用这个包下面的类名直接作为别名引入

     <typeAliases><!--别名-->
            <package name="cn.abelib.bean"/>
        </typeAliases>
    

    使用配置文件的形式

     <typeAliases><!--别名-->
            <typeAliase alias="user"  type="cn.abelib.bean.User"/>
        </typeAliases>
    

    typeHandler

    typeHandler是类型转换器,用于在数据库类型jdbcType和Java类型javaType之间的转换。和typeAliases类似,系统自定义了常用的typeHandller用于系统指定的类型转换,如果在实际情况下需要也可以通过实现 TypeHandler<T>接口来自定义实现typeHandler。如:

    // 自定义的typeHandler
    public class MyTypeHandler implements TypeHandler<String> {
        Logger logger = Logger.getLogger(MyTypeHandler.class);
        public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
            ps.setString(i, parameter);
        }
    
        public String getResult(ResultSet rs, String columnName) throws SQLException {
            String result = rs.getString(columnName);
            return result;
        }
    
        public String getResult(ResultSet rs, int columnIndex) throws SQLException {
            String result = rs.getString(columnIndex);
            return result;
        }
    
        public String getResult(CallableStatement cs, int columnIndex) throws SQLException {
            String result = cs.getString(columnIndex);
            return result;
        }
    }
    

    使用时:

     <typeHandlers><!--用于jdbc和Java之间的类型转换-->
            <typeHandler jdbcType="VARCHAR" javaType="string"
                    handler="com.abel.mybatis.MyTypeHandler"/>
        </typeHandlers>
    

    ObjectFactory

    ObjectFactory被用来在创建结果集时生成结果集实例。默认情况下使用的是org.apache.ibatis.reflection.factory包下的DefaultObjectFactory,当然也可以根据需要自己继承DefaultObjectFactory实现自定义的对象工厂。

    plugins

    plugins可以算得上是MyBaits最复杂、最强大的组件,后面会单独来学习这部分内容。

  • 相关阅读:
    99%的人都理解错了HTTP中GET与POST的区别
    CSS3 Border-image
    Tween.js的使用示例
    HTML5的postMessage使用记要
    Vuejs——(2)Vue生命周期,数据,手动挂载,指令,过滤器
    nodejs ejs 请求路径和静态资源文件路径
    JS逗号运算符的用法详解
    toStirng()与Object.prototype.toString.call()方法浅谈
    正则表达式之 贪婪与非贪婪模式
    利用符号进行的类型转换,转换成数字类型 ~~
  • 原文地址:https://www.cnblogs.com/abel-huang/p/7675258.html
Copyright © 2011-2022 走看看