MyBatis的核心配置文件 SqlMapConfig.xml(五)上

一.核心配置文件 SqlMapConfig.xml


有的叫 SqlMapConfig.xml, 也有的叫 mybatis-config.xml, 这里习惯用 SqlMapConfig.xml . 其中,这个配置文件主要配置的内容依次是: 注意,顺序是不能颠倒的。 可见约束文件。


<?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/> <!--配置属性信息--->

  <setting/>      <!--设置-mybatis 运行参数-->

  <typeAliases /><!--类型命名 别名-->

  <typeHandlers/><!--类型处理器--->

  <objectFactory/><!--对象工厂-->

  <plugins/>          <!--插件--->

  <environments>  <!--配置环境-->

    <environment><!--环境变量-->

      <transactionManager/><!--事务管理器-->

        <dataSource /><!--数据源-->

    </environment>

  </environments>

  <databaseIdProvider/><!--数据库厂商标识-->

  <mappers/><!--映射器-->
</configuration>


这里,只讲一些常见的使用方式,如<properties>属性,<setting> <typeAliases> <environments> <mappers> 其余的暂时不讲。


二. properties 属性


可以引用配置文件,或者提前设置属性,来进行引用属性。 常见的就是关于数据库的配置。


以前的写法:


<!-- 开发环境  development -->
    <environments default="development">
        <environment id="development">
            <!-- 事务管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 数据源 ,为pooled 连接池 -->
            <dataSource type="pooled">
                <!-- 直接硬编码在dataSource 资源里面 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="abc123"/>
            </dataSource>   
        </environment>
    </environments>


二.一 子元素设置


<!-- 子元素设置 -->
    <properties>
        <!-- 先设置一些属性,为了避免username和password重复,前面用jdbc. 前缀 -->
        <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="jdbc.url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8"/>
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value="abc123"/>
    </properties>


然后在 datasource 数据库资源中配置:


<!-- 数据源 ,为pooled 连接池 -->
    <dataSource type="pooled">
                <!-- 直接硬编码在dataSource 资源里面 -->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
</dataSource>   


调用测试方法 findAllTest 可以正常的查询。


二.二 配置文件


在src 源文件下创建jdbc.properties 配置文件,里面设置属性,进行相应的引用。


MyBatis的核心配置文件 SqlMapConfig.xml(五)上


jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8
jdbc.username=root
jdbc.password=abc123


SqlMapConfig.xml 中引入配置文件


    <!--配置文件引入  url为网络资源, 只能引入一个文件-->
    <properties resource="jdbc.properties"></properties>


相应的数据源配置为:


<!-- 数据源 ,为pooled 连接池 -->
            <dataSource type="pooled">
                <!-- 直接硬编码在dataSource 资源里面 -->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>


二.三 程序参数传递


如数据库开发时, 数据库的用户名和密码,生产数据库的用户名和密码应该对开发者是保密的,运维人员需要对其进行相应的加密,所以配置文件中的信息通常是加密后的信息。


代码形式为:


/**
     * 单例模式 获取实例
     * @author 两个蝴蝶飞
     * @return
     */
    public static SqlSessionFactory getInstance(){
        synchronized(SqlSessionFactoryUtils.class){
            if(sqlSessionFactory==null){
                InputStream input=null;
                // Mybatis 核心配置文件名
                String resource_name="SqlMapConfig.xml";
                
                //关于属性文件
                InputStream proStream=null;
                Reader propReader=null;
                Properties properties=null;
                try {
                    input=Resources.getResourceAsStream(resource_name);
                    proStream=Resources.getResourceAsStream("jdbc.properties");
                    propReader=new InputStreamReader(proStream);
                    properties=new Properties();
                    properties.load(propReader);
                    //重新编码用户名和密码 ,开发者定义好的的decode encode() 的加密和解密规则。
                    properties.setProperty("username",decode(properties.getProperty("jdbc.username")));
                    properties.setProperty("password",decode(properties.getProperty("jdbc.password")));
                    sqlSessionFactory=new SqlSessionFactoryBuilder().build(input,properties);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return sqlSessionFactory;
    }


二.四 优先级


程序参数传递的优先级最高, 配置文件resource/url 的次之,properties 属性中指定的属性优先级最低。


建议:


最好不要混用,只用一种方式即可。

最好选用 属性文件的方式进行配置。


三. setting 配置


setting 配置属性,会改变mybatis的运行时的行为,即使不配置setting,程序也会正常的运行。


setting 配置的各项参数有:


MyBatis的核心配置文件 SqlMapConfig.xml(五)上


MyBatis的核心配置文件 SqlMapConfig.xml(五)上


MyBatis的核心配置文件 SqlMapConfig.xml(五)上


MyBatis的核心配置文件 SqlMapConfig.xml(五)上


上面的这些配置不需要全部都配置,只需要配置常用的一些属性即可。

常用的开发中,需要配置的属性:


<settings>
        <!-- 设置配置文件 -->
        <!-- 开启二级缓存 -->
        <setting name="cacheEnabled" value="true"/>
        <!-- 控制懒加载的 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="aggressiveLazyLoading" value="false"/>
        <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="localCacheScope" value="SESSION"/>
        <setting name="jdbcTypeForNull" value="OTHER"/>
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
        <!-- 设置日志为 log4j -->
        <setting name="logImpl" value="LOG4J"/>
    </settings>



上一篇:SmartMat:门垫也来玩智能


下一篇:MySQL索引 使用笔记