mybatis学习(4)——基础配置文件详解

前面的博客中讲了mybatis的入门示例,接下详细的分析一下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/>      <!--类型命名-->
    <typeHandlers/>     <!--类型处理器-->
    <objectFactory/>    <!--对象工厂-->
    <plugins/>        <!--插件-->
    <environments default="">    <!--环境配置-->
        <environment id="">      <!--环境变量-->
            <transactionManager type=""></transactionManager>   <!--事务管理器-->
            <dataSource type=""></dataSource>        <!--数据源-->
        </environment>
    </environments>
    <databaseIdProvider/>         <!--数据库厂商标识-->
    <mappers/>         <!--映射器-->
       
</configuration>

1、<properties/>    <!--属性-->

<properties>用来给系统配置一些运行参数,可以存放在XML文件或者properties文件中,这样在修改参数的时候,无需重新编译代码,提高了程序的灵活性。最典型的是配置数据库环境,在xml文件中,有两种方式来使用properties,第一种是property子元素。

这种方式和map的键值对一样,一个键值对应一个属性值。

<properties>    <!--属性-->
    <property name="database.driver" value="org.sqlite.JDBC"/>
    <property name="database.url" value="jdbc:sqlite:C:\\Users\\YZL\\test1.db"/>
</properties>

然后在xml文件的其他地方可以引用它的值。

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

            <!--
            由于我们使用的是sqlite数据库,开源免费的sqlite数据库是不需要用户名和密码的
            ,我们这里就不需要这两个属性
            <property name="username" value=""/>
            <property name="password" value=""/>
            -->
        </dataSource>
    </environment>
</environments>

第二种方式是通过引入properties文件的方式,其实properties文件的内容也是一种键值对。下面是database.properties文的内容。

atabase.driver=org.sqlite.JDBC
database.url=jdbc:sqlite:C:\\Users\\YZL\\test1.db

然后我们再<properties>元素的属性 resource 中引入文件,接下来就和之前的方式一样,可以在xml文件中其他位置引用它的值了。

<properties resource="database.properties"/>

2、<settings/>     <!--设置-->

<setting>元素是对mybatis运行时的一些设置信息,例如自动映射、驼峰命名映射、级联规则、是否启用缓存等。<setting>元素的设置项非常多,一般情况下,大部分我们使用默认设置即可,后面用到时,再详细分析。

3、<typeAliases/>      <!--类型命名-->

在mybatis的的映射文件中,我们经常需要用到parameterType或resultType来指定参数类型或者返回值的类型,有些类型的全路径可能会很长,这导致我们在使用时会非常麻烦,这时我们就可以利用来<typeAliases/>来定义一些别名,一般的基本类型,mybatis都已经定义好了别名。

别名                  Java类型
_byte                 byte
_long                 long
_short                short
_int                  int
_integer              int
_double               double
_float                float
_boolean              boolean
string                String
byte                  Byte
long                  Long
short                 Short
int                   Integer
double                Double
float                 Float
boolean               Boolean
date                  Date
decimal               BigDecimal
bigdecimal            BigDecimal
object                Object
map                   Map
hashmap               HashMap
list                  List
arraylist             ArrayList
collection            Collection
iterator              Iterator
resultset             ResultSet 

对于我们自定义的类,需要我们在配置文件中自定义别名,type属性的值是一个类的全路径名称。

<typeAlias type="com.pojo.Student" alias="student"/>

当我们有很多个类需要处理的时候,这样一个一个定义太麻烦了,我么可以通过包名的方式来定义别名,会将这个包下的所有类自动定义别名,方式是将类名首字母改成小写。

<typeAliases  >      <!--类型命名-->
    <package name="com.pojo"/>
</typeAliases>

有时候可能我们在不同的包里定义了相同的类名,这样会导致别名的重复,这时候我们可以利用注解@Alias来在java代码中直接定义别名。

package com.pojo;
import org.apache.ibatis.type.Alias;

@Alias("student2")
public class Student {
   //省略内容
}

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

<typeHandlers/>是在程序中用来处理jdbcType和javaType之间的类型转换的,在mybatis中系统预定义了一部分的typeHandlers,这些基本上涵盖了我们日常所需要用到的场景,但不排除有一些特殊的场景需要我们自定义一些typeHandlers,这里先不细说了,我还没用到这个,暂时还没有弄清楚。

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

<environments>元素的作用是运行环境中的数据库信息,我们可以配置多个数据库信息,即<environment>,可通过属性id来区分他们。

<environment>元素下有两个子元素,一个是事务管理器

<transactionManager type=""></transactionManager>   <!--事务管理器-->

其type属性有两个值,JDBC 和 MANAGED,jdbc使用JdbcTransactionFactory生成JdbcTransaction对象实现,以jdbc的方式实现数据库的提交和回滚操作;MANAGED以ManagedTransactionFactory生成的ManagedTransaction对象实现,它的提交和回滚不用任何操作,而是把事务交给容器处理;同时我们也还可以自定义事务管理器,当我后面用到的时候再去详细分析。

另一个子元素是数据源环境

<dataSource type=""></dataSource>        <!--数据源-->

其type属性有两个值,UNPOOLED和POOLED。UNPOOLED采用非数据库连接池的管理方式,每次请求数据库是,都会打开一个新的数据库连接,所以效率会比较慢;POOLED利用数据库连接池的盖面将JDBC的Connection对象组织起来,它开始会有一些空置,并且已经连接好数据库连接,所以请求时,无需再建立和验证,省去了创建新的连接实例时所必须的初始化和认证时间,它还能控制最大连接数。

type还有一个属性值为JNDI,这里我还没有研究过,后面用到的话,再去详细研究。

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

有时候我们希望一套软件系统可以支持不同的数据库,这时候就需要用到<databaseIdProvider/>属性了,他的子元素<property>也是有name和value组成的键值对,name是数据库的名称,value是一个别名。我们来看他的一个应用实例,通过这个实例就能知道它的作用了。

<databaseIdProvider type="DB_VENDOR">         <!--数据库厂商标识-->
    <property name="Oracle" value="oracle"/>
    <property name="MySQL" value="mysql"/>
</databaseIdProvider>

再来看两条标识了数据库信息的select语句。

<select id="getStudentById" resultType="student" parameterType="int" databaseId="oracle">
    select ID,Name,Sex,Grade from student where id=#{id}
</select>

<select id="getStudentById" resultType="student" parameterType="int" databaseId="mysql">
    select ID,Name,Sex,Grade from student where 1=1 and id=#{id}
</select>

当数据库位oracle时,就会执行上面一条语句,当数据库mysql时,就会执行下面一条语句。当我们需要使用多数据库时,如果配置了<databaseIdProvider type="DB_VENDOR">的type属性,执行sql语句时就会按照数据库类型来查找对应的语句,系统会优先取到和系统数据库一致的sql语句,如果没有则会找到一条没有databaseId的sql,把它当作系统默认sql,如果还是找不到,则会抛出异常。

7、<mappers/>         <!--映射器-->

<mappers/>元素是用来映入我们再外部定义好的映射器,映射器我们在前面的入门实例中已经实现过了,不记得的可以回去翻阅一下,下一篇我准备在详细介绍一下映射器文件的内容。

在基础配置文件中,引入映射器的主要有三种:

(1)使用文件路径引入映射器

<mappers>         <!--映射器-->
    <mapper resource="com.mapper.StudentMapper.xml"/>
</mappers>

(2)用包名引入映射器,将这个包下的所有映射器都引入

<mappers>         <!--映射器-->
    <package name="com.mapper"/>
</mappers>

(3)用类注册映入映射器

<mappers>         <!--映射器-->
    <mapper class="com.mapper.StudentMapper"/>
</mappers>

关于mybatis基础配置文件的介绍就这么多,其中有好多东西,我暂时还没有用到,所以也讲不清楚,后面用到的时候在来补充。

以上我在学习过程看书的笔记,加上自己的一些总结,如果有错误,欢迎在评论区中指出,共同进步。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值