Mybatis主配置文件mybatis-config.xml详解

刚刚接触Mybatis时,我们可以直接进行粘贴模板代码,然后将连接数据库的四要素填到响应的位置就行了,但是上面还有很多的配置,我们都不知道什么意思,而这个使用Mybatis最重要的文件配置信息是十分多而且十分重要的。接下来就来看看里面到底有什么重要的配置。



Mybatis主配置文件mybatis-config.xml详解

 我们最开始使用的时候粘贴的模板如下:

<?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 resource="jdbc.properties" />
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <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/yht/mybatis/dao/EmpMapper.xml" ></mapper>
    </mappers>
</configuration>

Mybatis的API文档中我们可以看到:

 

里面其实是有很多很多的配置:

我们上面所使用的有:properties, environments, mappers三个配置,分别是配置属性,也就是需要用到的一些其他信息;environments:我们的Mybatis是对JDBC进行的封装,所以这里就是对数据库的获取和连接状态的一些相关配置;mappers,映射是Mybatis的一大特性,就是把SQL语句和java代码分开存储,而mappers就是来进行关联存储sql语句的文件。

我们就主要来讲解现在用到的几个:

properties

这个配置在现在的使用中其实可有可无,如果我们硬要是把连接数据库的配置直接写在environments中也是可以的,但是这个xml文件在项目上线的是需要打包到项目中的,而且在开发和测试还有上线的时候我们所要连接的数据库类型和驱动,账号,密码都是不同的,所以如果写死到environments中,那么就会造成进行更改的时候成本比较高,不如把这里面的属性写在外面的配置文件中,然后利用properties属性配置把这个文件来导入到xml文件中,让里面的框架是死的,但是重要的内容是活的。

properties还有一种配置方法,当做属性来写到xml文件中:

    <properties  >
        <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="jdbc.url" value="jdbc:mysql:///dbmaven?serverTimezone=UTC"/>
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value=""/>
    </properties>

虽然也是有这种方式,但是其实这也是多此一举,而且违背了我们想要方便更改的初衷,所以一般都不用这种方式,一般都是利用properties文件来进行外部文件存储这些信息然后再利用mybatis-config.xml的properties属性来进行导入。

environments

我们可以看出来,这个配置也是一个复数,可以进行多次配置,想一想也是这样,我们在开发以及测试等多种情况下,连接的数据库可能是不同的,所以这里需要进行多种配置来满足这个需求。我们再拿来上面的配置,并且在注释中进行逐句的讲解。

<!--  下面这一句就是environments配置的根节点,然后后面有一个属性default,这个是对于
  SqlSessionFactoryBuilder而言的,我们的SqlSessionFactoryBuilder的功能是创建一个sqlSession的工厂
  也就是搭建工厂的建筑队一样,那么在搭建的时候,一定要确定这个工厂的要求才可以完成一个我们想要的工厂
  我们现在使用的建造语句是:
            new SqlSessionFactoryBuilder().build(inputStream);
     而这里是省略参数的,这里后面可以加上一个:
            new SqlSessionFactoryBuilder().build(inputStream,mysql)
     指的意思就是依照mysql给的要求来建造一个工厂,这里mysql是下面environment的id值
     当我们想要建设多种工厂的时候,就需要在build的参数里加上参照环境的id。
     而我们现在使用的时候并没有进行这个参数的配置,就是因为我们设置的有默认的环境,
     而这个default指定的这个环境,就是我们在建造工厂是默认的环境。

     这里也就告诉我们,如果我们想要使用不同的环境,那么一定要另外进行工厂的构造。
     一个SqlSessionFactory对应一个环境;-->
    <environments default="mysql">

<!--     这里是搭建了一个环境,参数id就是作为一个唯一标识,让SqlSessionFactoryBuilder来进行建造对应的工厂   -->
        <environment id="mysql">

            <!-- 这下面是一个事务管理器,后面的属性type里有两种参数,
             一种是JDBC,一种是MANAGED,而这两种参数,其实都是别名
             他们各自对应着封装好一个类,进行别名设置的是在:Configeration类中。这是一个Mybatis进行配置的核心类
             里面JDBC对应的是:JdbcTransactionFactory.class类,他代表的意思就是采用JDBC的事物管理和回滚机制,取决于
             在下面获取的数据源中的数据库。而另一个参数MANAGED几乎什么操作也没有做,不进行提交事物,也不会进行回滚
             所以这里一般都会使用JDBC,但是到了后面用了spring框架之后,事务的管理操作都交由给了事物管理功能更为强大的spring
             -->
            <transactionManager type="JDBC"/>

            <!--    这下面就是配置的数据源,采用了最标准的JDBC连接方式
                    而后面的参数是决定了连接类型,里面的参数一共有三种:UNPOOLED,POOLED,JNDI
                    这里都是相对于某些数据库而言的
                    UNPOOLED是每次进行连接数据库都会进行开启和关闭,速度上相对较慢,对于小型程序来说比较好,使用的资源比较少
                    POOLED就类似于我们之前使用的C3P0连接池,利用一个池来进行存储一些连接来提高效率
                    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

mappers就是用来寻找存储查询语句的文件路径,一般利用资源路径来进行寻找。

注意这里是利用/(斜线)来进行分隔文件夹名的,一定注意这里是文件的存储路径,而不类似于包的路径利用   .   点来进行分割。


注意这里配置的顺序要严格遵循规格,否则会报错,按照下图从上到下的进行配置:

这里idea里如果顺序错误的提示语句,和上图相对应。


 

其他的配置在现在进行介绍为时过早,到后面的使用中介绍会更加清楚。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值