MyBatis 配置1

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><!-- 类型命名 -->
        <package name="com.xx.xx.tntity"/>
    </typeAliases>
    <typeHandlers/><!-- 类型处理器 -->
    <objectFactory type=""></objectFactory><!-- 对象工厂 -->
    <plugins><!-- 插件 -->
       <plugin interceptor=""></plugin>
    </plugins>
    <environments default="development"><!-- 配置环境 -->
        <environment id="development"><!-- 环境变量 -->
            <transactionManager type="JDBC"></transactionManager><!-- 事务管理器 -->
            <dataSource type="POOLED"><!-- 数据源 -->
            </dataSource>
        </environment>
    </environments>
    <databaseIdProvider type=""></databaseIdProvider><!-- 数据库厂商标识 -->
    <mappers></mappers><!-- 映射器 -->
</configuration>
  1. properties 属性
    可以给系统配置一些运行的参数,可以放在XML文件或者properties文件中,而不是放在java编码中,这样的好处在于方便参数修改,而不会引起代码的重新编译。
    property子元素:
<properties>
      <property name="database.driver" value="com.mysql.jdbc.Driver"/>
      <property name="database.url" value="jdbc:mysql://localhost:3306/test"/>
      <property name="database.username" value="root"/>
      <property name="database.password" value="root"/>
    </properties>
  1. properties文件
    通过键值对应,我们可以配置多个放在文件中,然后在mybatis-config.xml文件中引入:
  <properties resource="jdbc.properties"></properties>  
  1. settings 设置
    settings是MyBatis中最复杂的配置,它能深刻影响MyBatis底层的运行,但是在大部分情况下使用默认便可以运行,所以大部分情况下不太需要大量配置它,只需要修改一些常用的规则即可,比如自动映射、驼峰命名映射、级联规则、是否启动缓存、执行器类型等。
    由于配置太多,这里不再例举,下面给出一个最全的配置样列,如下常用配置:
<settings><!-- 设置 -->
       <!-- 该配置影响所有映射器中配置缓存的全局开关 默认:true -->
       <setting name="cacheEnabled" value="true"/>

       <!-- 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。在特定关系中可通过设置fetchType属性来覆盖该项的开关状态。 默认:false-->
       <setting name="lazyLoadingEnabled" value="true"/>

        <!-- 是否允许单一语句返回多结果集(需要兼容驱动) 默认:(版本3.4.1之前是true,之后是false)true -->
       <setting name="multipleResultSetsEnabled" value="true"/>

        <!-- 允许jdbc支持自动生成主键,需要驱动兼容。如果设置true,则这个设置强制使用自动生成主键。 默认:false -->
       <setting name="useGeneratedKeys" value="false"/>

        <!-- 指定MyBatis应该如何自动映射列到字段或属性。NONE表示取消自动映射;PARTIAL表示智慧自动映射,
        没有定义嵌套结果集和映射集。FULL会自动映射任意复杂的结果集    默认:PARTIAL -->
       <setting name="autoMappingBehavior" value="PARTIAL"/>

       <!-- 指定自动映射当中未知列(或位置属性类型)时的行为。默认是不处理,只有当日志级别达到WARN级别或者以下,才会显示相关日志,如果处理失败就会抛出SqlSessionException异常 默认:NONE -->
       <setting name="autoMappingUnKnownColumnBehavior" value="WARNING"/>

       <!-- 默认的执行器。SIMPLE是普通的执行器;REUSE会重用预处理语句;BATCH执行器将重用语句并执行批量更新  默认:SIMPLE -->
       <setting name="defaultExecutorType" value="SIMPLE"/>

       <!-- 设置超时时间,它决定驱动等待数据库响应的秒数 默认:Not Set -->
       <setting name="defaultStatementTimeout" value="25"/>

        <!-- 设置数据库驱动程序默认返回的条数限制,此参数可以重新设置 默认:Not Set -->
       <setting name="defaultFetchSize" value="100"/>

       <!-- 允许在嵌套语句中使用分页(RowBounds),如果允许设置false  默认:false -->
       <setting name="safeRowBoundsEnabled" value="false"/>

       <!-- 允许在嵌套语句中使用分页(ResultHandler),如果允许设置false  默认:true -->
       <setting name="mapUnderscoreToCamelCase" value="false"/>

        <!-- MyBatis利用本地缓存机制防止循环引用和加速重复嵌套查询。SESSION这种情况下会缓存一个会话中执行的所有查询。
        STATEMENT,本地会话仅用在语句执行上,对相同SqlSession的不同调用讲不会共享数据  默认:SESSION -->
       <setting name="localCacheScope" value="SESSION"/>

       <!-- 当没有参数提供特定的JDBC类型时,为空值指定JDBC类型。某些驱动需要制定列的JDBC类型,多数情况下直接用一般类型即可,
       比如NULL、VARCHAR、OTHER  默认:OTHER -->
       <setting name="jdbcTypeForNull" value="OTHER"/>

        <!-- 指定哪个对象的方法触发一次延迟加载   -->
       <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
    </settings>
  1. typeAliases 别名
    由于类的全限定名称很长,需要大量使用的时候,总写那么长的名称不方便。在MyBatis中允许定义一个简写来代表这个类,这就是别名。
    别名分为系统定义别名和自定义别名
    1、系统别名:在MyBatis初始化的时候,系统自动初始化了一些别名 例如 _byte —> byte
    2、自定义别名:

    指定某几个类使用别名

<typeAliases><!-- 类型命名 -->
        <typeAlias type="com.xx.xx.entity.Role" alias="role"/>
    </typeAliases>

扫描指定包只用别名

<typeAliases><!-- 类型命名 -->
        <package name="com.xx.xx.tntity"/>
</typeAliases>
别名冲突后,可以更改
@Alias("abc")
public class Analyst
  1. typeHandler 类型转换器
    在JDBC中,需要在PreparedStatement对象中设置那些已经预编译过的SQL语句的参数。执行SQL后,会通过ResultSet对象获取得到数据库中的数据,而这些MyBatis
    是根据数据的类型通过typeHandler来实现的。
    typeHandler又分为 jdbcType(用于定义数据库类型) 和 javaType(用于定义java类型)。
    作用:就是承担jdbcType和javaType之间的转换。
    它也分两种,一种是系统定义一种是自定义。绝大多数情况下系统定义都可以满足需求,当在使用枚举的时候需要使用自定义,例:
    (1):org.apache.ibatis.type.EnumOrdinalTypeHandler
    是按MyBatis根据枚举数据下标索引的方式进行匹配的,也是枚举类型的默认转换类,它要求数据库返回一个整数作为下标,它会根据下标找到对应的枚举类型。
1.枚举
public enum SexEnum {

    MALE(1,"男"),
    FEMALE(0,"女");

    private int id;
    private String name;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    SexEnum(int id,String name){
        this.id=id;
        this.name=name;
    }

    public SexEnum getSexById(int id){
        for(SexEnum sex : SexEnum.values()){
            if(sex.getId()==id){
             return sex;    
            }
        }
        return null;
    }

}

2.entity
private SexEnum sex;

3.xml
<resultMap id="BaseResultMap" type="com.bob.analyst.model.Analyst">
        <id column="id" jdbcType="BIGINT" property="id" />
        **<id column="sex" property="sex"  typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
    </resultMap>**

4.Service
@Override
    public Analyst selectByPrimaryKey(Long id) {
        Analyst analyst=analystMapper.selectByPrimaryKey(id);
        System.out.println(".........sex:"+analyst.getSex().getName());
        return analyst;
    }

(2):EnumTypeHandler:会把使用的名称转化为对应的枚举,比如它会根据数据库返回的字符串“MALE”,进行 Enum.valueOf(SexEnum.class,”MALE”);转换

   <id column="sex" property="sex"  typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值