MyBatis 配置1

来源:互联网 发布:如何黑进路由器 知乎 编辑:程序博客网 时间:2024/06/10 02:30

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.entityprivate 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"/>
原创粉丝点击