zoukankan      html  css  js  c++  java
  • mybatis核心配置解析

    mybatis配置环境中的核心配置解析

    核心配置文件

    配置标签列表

    configuration(配置)

    • properties(属性):加载.properties`属性配置文件。
    • settings(设置):https://mybatis.org/mybatis-3/zh/configuration.html#properties
    • typeAliases(类型别名):为 pojo 类取一个别名;或指定包名,默认别名为类名小写。
    • typeHandlers(类型处理器):设置 java 数据类型与 sql 数据类型的对应关系。
    • objectFactory(对象工厂): 每次 MyBatis 创建结果对象的新实例时,它都会使用一个对象工厂来完成实例化工作。
    • plugins(插件):使用插件在映射语句执行过程中的某一点进行拦截调用
    • environments(环境配置):可选择其中一个环境 id 作为默认环境。
      • environment(环境变量):每个 SqlSessionFactory 实例只能选择一种环境。
        • transactionManager(事务管理器):会被 Spring 的事务管理器覆盖。
        • dataSource(数据源)
    • databaseIdProvider(数据库厂商标识)
    • mappers(映射器): 直接告诉 MyBatis 到哪里去找映射文件,可以使用资源路径、映射类全类名甚至包名,将包内接口全部注册为映射器。

    以上配置文件,顺序是固定的,不能颠倒。举个栗子:你不能把别名配置在设置之前。

    1、properties

    定义配置,配置的属性可以在整个文件中其他的地方进行引用;这个属性比较重要,对于属性值可能变化的项我们优先是想用property配置文件解耦。例如jdbc连接数据库的驱动名称、密码、用户名等

    //将数据库信息通过properties导进来,实现数据库基本信息的解耦 
    <properties resource="database.properties"/>
    

    2、settings

    设置指定Mybatis 的一些全局配置属性,它们会影响Mybatis运行时的行为。它内容很多,以下挑几个常用的介绍

    设置名 描述 有效值 默认值
    cacheEnabled 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 true|false true
    lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 true|false false
    logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 ...

    log4j设置实例

    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    

    设置log4j的输出格式(在maven项目的resources目录下创建log4j.properties文件)

    log4j.rootLogger=DEBUG, stdout, logfile
     
    log4j.category.org.springframework=ERROR
    log4j.category.org.apache=INFO
     
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
     
    log4j.appender.logfile=org.apache.log4j.RollingFileAppender
    log4j.appender.logfile.File=${myweb.root}/WEB-INF/log/myweb.log
    log4j.appender.logfile.MaxFileSize=512KB
    log4j.appender.logfile.MaxBackupIndex=5
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
    

    其他属性可以自行查看官方文档了解

    3、typeAliases

    自定义别名或者扫描包,被扫描包中的类自动生成默认别名(类名的首字母小写)

    <typeAliases><!--自定义别名-->
        <typeAlias alias="order" type="com.cugb.pojo.Order"/>
        <typeAlias alias="user1" type="com.cugb.pojo.User"/>
    </typeAliases>
    
    
    <typeAliases><!--扫描包生成默认别名-->
        <package name="com.cugb.pojo"/>
    </typeAliases>
    

    系统默认别名

    4、typeHandlers

    用于jdbcType 与 javaType 之间的转换;(没有特殊需要不用调整)
    在TypeHandlerRegistry 注册中心中已经把大部分的java 和数据库之间类型的做好了映射,例如我们想把一些枚举类型转化成我们的数据库中的字段,那时候我们就要用到typeHandlers 来做映射(用的比较少)

    5、ObjectFactory

    Mybatis 每次创建结果对象的新实例时,都会使用对象工厂ObjectFactory 去创建POJO(基本不用修改,用默认的就好)

    6、plugins

    插件,Mybatis允许我们在已经映射的语句执行过程做那个的某一点进行拦截调用

    7、environments

    MyBatis 可以配置成适应多种环境

    不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

    Mybatis 默认的事务管理器是JDBC,连接池:POOLED

    <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${username}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
        </environments>
    

    8、mappers

    既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。 但是, 首先我们需要告诉 MyBatis 到哪里去找到这些语句。

    1、通过resource加载映射文件(推荐使用

    <mappers>
      <mapper resource="com/cugb/dao/DaoUsersMapper.xml"/>
    </mappers>
    

    2、通过mapper接口加载映射文件

    <mappers>
      <mapper class="com.cugb.dao.DaoUsersMapper.xml"/>
    </mappers>
    

    3、自动注册包内所有接口

    <mappers>
      <package name="com.cugb.dao"/>
    </mappers>
    

    其中,2和3两种方式使用的前提是,需要将mapper接口类名与xml文件映射名称保持一致,且在一个目录中

    在扫描引射器的过程中,有可能找不到类,需要在pom.xml文件中配置

    <build>
    	<resources>
    		<resource>
    			<directory>src/main/java</directory>
    			<includes>
    				<include>*.xml</inlude><!--默认(新添加自定义则失效)-->
    				<include>**/*.xml</include><!--新添加 */代表1级目录 **/代表多级目录-->
    			</includes>
    			<filetering>true</filetering>
    		</resource>
    	</resources>
    </build>
    
    
    
  • 相关阅读:
    Java I/O (1)
    hadoop集群添加新节点
    [kuangbin带你飞]专题三 Dancing Links
    Codeforces Round #580 (Div. 2)(A、B、C)
    2019 年百度之星&#183;程序设计大赛
    [kuangbin专题] KMP
    Codeforces Round #578 (Div. 2)(A、B、C、D、E)
    二维前缀和、差分习题集
    [kuangbin带你飞]专题七 线段树
    Codeforces Round #577 (Div. 2) (A、B、C)
  • 原文地址:https://www.cnblogs.com/cugb/p/13262616.html
Copyright © 2011-2022 走看看