MyBatis

1、SqlMapConfig.xml 配置文件的内容和配置顺序

properties(读取配置文件):定义配置,配置的属性可以在整个配置文件中其他位置进行引用;settings(全局配置参数):用于指定MyBatis的一些全局配置属性,这些属性非常重要,它们会改变MyBatis的运行时行为;typeAliases(类型别名):用于配置多个数据源,每个数据源分为数据库源和事务的配置;typeHandlers(类型处理器):定义类型处理,也就是定义java类型与数据库中的数据类型之间的转换关系objectFactory(对象工厂):
⑥ plugins(插件):Mybatis的插件,插件可以修改Mybatis内部的运行规则environments(环境集合属性对象,与Spring框架整合后Say Good Bye):用于配置多个数据源,每个数据源分为数据库源和事务的配置;
  1、environment(环境子属性对象)
  2、transactionManager(事务管理)
  3、dataSource(数据源)
⑧ mappers(配置映射器位置):配置引入映射器的方法。

2、properties属性

作用将数据连接单独配置在 db.properties 中,只需要在 SqlMapConfig.xml 中加载 db.properties 的属性值,在SqlMapConfig.xml 中就不需要对数据库连接参数进行硬编码。

数据库连接参数只配置在 db.properties 中,方便对参数进行统一管理,其它 xml 可以引用该 db.properties。

1)db.properties 的内容

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/games_db?useUnicode=true&characterEncoding=UTF-8&useSSL=true
jdbc.username=root
jdbc.password=123456

2)在 SqlMapConfig.xml 中加载 db.properties 

<!-- 引入外部配置文件 -->
<properties resource="db.properties"></properties>

<!-- 配置mybatis运行环境 ; 在集成Spring是不用 -->
<environments default="development">
    <environment id="development">
        <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
        <transactionManager type="JDBC" />
        <!-- 使用连接池连接数据库 - mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
        <!-- POOLED 表示支持JDBC数据源连接池 ; UNPOOLED 表示不支持数据源连接池 ; JNDI 表示支持外部数据源连接池 -->
        <dataSource type="POOLED">
            <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>
    </environment>
</environments>

<!--配置映射器的位置 -->
<mappers>
    <!-- 单个配置 -->
    <!-- <mapper resource="com/sikiedu/mapper/UserMapper.xml" /> -->
    <!-- <mapper url="file:\D:JavaWorkSpaceJavaEE_SSM_Testssm_mybatissrccomsikiedumapperUserMapper.xml" /> -->
    <!-- <mapper class="com.sikiedu.mapper.UserMapper" /> -->
    <!-- 多配置-以包的形式;推荐使用 -->
    <package name="com.sikiedu.mapper" />
</mappers>

3)properties特性

 - 注意:

在properties元素体内定义的属性优先读取。
然后读取properties元素中resource或url加载的属性,它会覆盖已读取的同名属性。
最后读取parameterType传递的属性,它会覆盖已读取的同名属性

 - 建议:

不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。
在properties文件中定义属性名要有一定的特殊性,如xxxx.xxxx(jdbc.driver)

3、settings - 全局参数配置

mybatis框架运行时可以调整一些运行参数。比如,开启二级缓存,开启延迟加载等等。全局参数会影响mybatis的运行行为。

 1 <!-- 参数设置 -->
 2 <settings>
 3 
 4     <!-- 这个配置使全局的映射器启用或禁用缓存 -->
 5     <setting name="cacheEnabled" value="true" />
 6     
 7     <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 -->
 8     <setting name="lazyLoadingEnabled" value="true" />
 9     
10     <!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载 -->
11     <setting name="aggressiveLazyLoading" value="true" />
12     
13     <!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动) -->
14     <setting name="multipleResultSetsEnabled" value="true" />
15     
16     <!-- 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动 -->
17     <setting name="useColumnLabel" value="true" />
18     
19     <!-- 允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby) -->
20     <setting name="useGeneratedKeys" value="true" />
21     
22     <!-- 指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况) -->
23     <setting name="autoMappingBehavior" value="PARTIAL" />
24     
25     <!--当检测出未知列(或未知属性)时,如何处理,默认情况下没有任何提示,这在测试的时候很不方便,不容易找到错误。 NONE : 不做任何处理 (默认值) WARNING : 警告日志形式的详细信息 FAILING : 映射失败,抛出异常和详细信息 -->
26     <setting name="autoMappingUnknownColumnBehavior" value="WARNING" />
27     
28     <!-- 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新 -->
29     <setting name="defaultExecutorType" value="SIMPLE" />
30     
31     <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 -->
32     <setting name="defaultStatementTimeout" value="25000" />
33     
34     <!--设置查询返回值数量,可以被查询数值覆盖 -->
35     <setting name="defaultFetchSize" value="100" />
36     
37     <!-- 允许在嵌套语句中使用分页 -->
38     <setting name="safeRowBoundsEnabled" value="false" />
39     
40     <!--是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 -->
41     <setting name="mapUnderscoreToCamelCase" value="false" />
42     
43     <!--MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。 -->
44     <setting name="localCacheScope" value="SESSION" />
45     
46     <!-- 当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR OTHER。 -->
47     <setting name="jdbcTypeForNull" value="OTHER" />
48     
49     <!-- 指定哪个对象的方法触发一次延迟加载。 -->
50     <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />
51     
52 </settings>
View Code

4、typeAiases - 别名

在 mapper.xml 中,定义很多的 statement,statement 需要 parameterType 指定输入参数的类型、需要 resultType 指定输出结果的映射类型。

如果在指定类型时输入类型全路径,不方便进行开发,可以针对 parameterType 或 resultType 指定的类型定义一些别名,在 mapper.xml 中通过别名定义,方便开发。

1)mybatis默认支持的别名

别名 映射的类型          别名 映射的类型          别名 映射的类型
_byte  byte  _boolean boolean double Double
_long long  string String float Float
_short  short  byte Byte boolean Boolean
_int  int  long Long date Date
_integer  int  short Short decimal BigDecimal
_double double int Integer bigdecimal Bigdecimal
_float float integer Integer    

2)自定义别名

 - 单个别名定义

<typeAliases>
    <typeAlias type="com.sikiedu.beans.User" alias="user" />
</typeAliases>

 - 批量定义别名:推荐

使用package包形式来配置别名,包的形式会扫描主包及子包中所有文件;

以对象类名为别名,大小写不限,推荐使用小写。

<typeAliases>
    <package name="com.sikiedu.beans" />
</typeAliases>

 - UserMapper.xml引用别名

<select id="findUserById" parameterType="int" resultType="user" >
      select * from t_user where id=#{id}
</select>

5、typeHandlers - 类型处理器

mybatis 中通过 typeHandlers 完成 jdbc 类型和 java 类型的转换。

通常情况下,mybatis 提供的类型处理器满足日常需要,不需要自定义。

1)mybatis 支持类型处理器

类型处理器

Java类型

JDBC类型

BooleanTypeHandler 

Boolean,boolean 

任何兼容的布尔值

ByteTypeHandler 

Byte,byte 

任何兼容的数字或字节类型

ShortTypeHandler 

Short,short 

任何兼容的数字或短整型

IntegerTypeHandler 

Integer,int 

任何兼容的数字和整型

LongTypeHandler 

Long,long 

任何兼容的数字或长整型

FloatTypeHandler 

Float,float 

任何兼容的数字或单精度浮点型

DoubleTypeHandler 

Double,double 

任何兼容的数字或双精度浮点型

BigDecimalTypeHandler 

BigDecimal 

任何兼容的数字或十进制小数类型

StringTypeHandler 

String 

CHAR和VARCHAR类型

ClobTypeHandler 

String 

CLOB和LONGVARCHAR类型

NStringTypeHandler 

String 

NVARCHAR和NCHAR类型

NClobTypeHandler 

String 

NCLOB类型

ByteArrayTypeHandler 

byte[] 

任何兼容的字节流类型

BlobTypeHandler 

byte[] 

BLOB和LONGVARBINARY类型

DateTypeHandler 

Date(java.util)

TIMESTAMP类型

DateOnlyTypeHandler 

Date(java.util)

DATE类型

TimeOnlyTypeHandler 

Date(java.util)

TIME类型

SqlTimestampTypeHandler 

Timestamp(java.sql)

TIMESTAMP类型

SqlDateTypeHandler 

Date(java.sql)

DATE类型

SqlTimeTypeHandler 

Time(java.sql)

TIME类型

ObjectTypeHandler 

任意

其他或未指定类型

EnumTypeHandler 

Enumeration类型

VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。

6、environments - 环境集合属性对象

① environment 元素是配置一个数据源的开始,属性id是它的唯一标识

transactionManager 元素配置数据库事务,其中type属性有三种配置方式

  • jdbc,采用jdbc的方式管理事务;
  • managed,采用容器的方式管理事务,在JNDI数据源中使用;
  • 自定义,自定义数据库事务管理办法;

dataSource 元素配置数据源连接信息,type属性是连接数据库的方式配置,有四种配置方式

  • UNPOOLED 非连接池方式连接
  • POOLED 使用连接池连接
  • JNDI 使用JNDI数据源

7、mappers - 映射配置

1)加载单个映射文件

 - resource、url方法一次加载一个映射文件

 - class属性:mapper接口加载单个映射配置文件;遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;

   上边规范的前提是:使用的是mapper代理方法;

<mappers>
    <!-- 单个配置 -->
    <mapper resource="com/sikiedu/mapper/UserMapper.xml" />
    <mapper url="file:\D:JavaWorkSpaceJavaEE_SSM_Testssm_mybatissrccomsikiedumapperUserMapper.xml" />
    <mapper class="com.sikiedu.mapper.UserMapper" />
</mappers>

2)批量加载mapper - 推荐使用

   批量加载映射配置文件,mybatis自动扫描包下面的mapper接口进行加载;

   遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;

<!--配置映射器的位置 -->
<mappers>
    <package name="com.sikiedu.mapper" />
</mappers>

3)另外,还可以通过自定义注解。当然,系统已经为我们提供了扫码工具【mybatis与spring集成】。

<bean id="mapperSanner" class="org.mybatis.spring.mapper.MapperSannerConfigurer">
  <property name="basePackage" value="com.xxx.mapper"></property>
</bean>

还有一种情况,当我们不使用spring只使用mybatis时,那么我们就需要自定义注解来扫描mapper文件,通过mybatis的配置来使用了。

原文地址:https://www.cnblogs.com/Dm920/p/12048570.html