【MyBatis】第二篇:核心配置文件常用标签

前提

Mbatis的配置文件中的顺序如下:

MyBatis核心配置文件中的标签必须安装指定的顺序配置。
(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".

不要问为什么必须这样排序,因为上这句话是再写配置文件的时候,故意写错顺序后IDE报错的信息。

当然其只是一个顺序而已,不是必须将上面的标签都写上,有些是可以不写的。

environment属性

environment属性在environments标签内,这样也意味着可以配置多个environment。一般的时候如下配置:

 <!--            配置数据库连接信息,-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/testmybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

配置多个环境

<!-- environments的 default属性配置的是默认 运行环境,其后面的值就是environment中的id -->
    <environments default="development">
        <environment id="development">
           ......
        </environment>

        <environment id="test">
           .....
        </environment>
    </environments>

environments的 default属性配置的是默认 运行环境,其后面的值就是environment中的id

这就意味着在调用配置文件的时候,有一个方法是可以选择不同的id名字来选择不同的配置环境。

其实翻看文件当可以看出sqlSessionFactoryBuilder.build 方法有一个参数的,也有一个两个参数的。

//        返回SqlSessionFactory 因为是一个参数可以得到默认的配置环境
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);// 等同于build(inputStream,"development");

//        返回SqlSessionFactory 调用两个参数,可以把test的环境和development环境一样,然后修改密码是一个错误值 运行的话就会报错,可以看出其通过第二个参数来指定不同的运行环境
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream,"test");

这个其实了解即可,一般的时候不会设置两个环境变量,毕竟测试环境和开发环境一般都会一致,这样出现问题的话会更加容易知道。

transactionManager

这个标签其实是放在environment标签中的,

  <environment id="development">
    <transactionManager type="JDBC|MANAGED"/>
      .......  
   </environment>

transactionManager这个标签是设置事务管理器,其属性名type。但是其有三个不同的属性值:

  • JDBC: 使用JDBC中原生的事务管理。
  • MANAGED: 被管理,比如和spring进行整合的时候,会选择这个属性值。

dataSource

这个标签也是放在environment标签中:

    <environments default="development">
        <environment id="development">
            ......
            <dataSource type="POOLED | UNPOOLED | JNDI">
               .......
            </dataSource>
        </environment>
    </environments>

dataSource标签也有一个属性type,其也有三个值:

  • POOLED: 使用数据库连接池
  • UNPOOLED: 不适用数据库连接池
  • JNDI : 使用上下文的数据库源,简单说就是myBatis 会从JNDI 服务上查找DataSource 实例,然后返回使用 。这种配置如何实现后面单独补上一篇,不然篇幅会很长。

当然在datasource中通过property标签进行配置数据库连接的驱动,url,用户密码名。

在这里插入图片描述

但是dataSource标准type=“JNDI” 这种使用上下文的数据库源,就需要简单的进行演示了。

引用资源配置文件

这个首先创建一个properties文件:jdbc.properties,其内容如下:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/testmybatis
jdbc.username=root
jdbc.password=root

其路径是

在这里插入图片描述

然后mybatis-config.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<!--配置文件中可以使用哪些标签,这个地方是配置这是一个mybatis文件,使用mybatis文件标签-->
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--开始配置信息-->
<configuration>
 <!-- 导入配置文件 -->   
        <properties resource="jdbc.properties"></properties>
<!-- environments的 default属性配置的是默认 运行环境,其后面的值就是environment中的id -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- com.mysql.jdbc.Driver -->
                <property name="driver" value="${jdbc.driver}"/>
                <!-- jdbc:mysql:///demo?characterEncoding=utf-8 -->
                <property name="url" value="${jdbc.url}"/>
                <!-- root -->
                <property name="username" value="${jdbc.username}"/>
                <!-- root -->
                <property name="password" value="${jdbc.password}"/>
< 
            </dataSource>
        </environment>
 
    </environments>
    <mappers>
        <!--        <mapper resource="映射文件这个地方配置sql语句,后面具体演示"></mapper>-->
        <mapper resource="mappers/StudentMapper.xml"></mapper>
    </mappers>
</configuration>

然后运行测试程序即可。

typeAliases 以及其子标签typeAlias

typeAlias标签这个其实效果有点像是sql语句中的as关键字,其作用是:设置类型的别名。

而typeAliases 就是包含所有typeAlias标签的根标签,所以不再多说什么。

这个又有三种不同的情况,有不同的效果。

首先这个是标签是写在核心配置文件的,其别名一般在映射文件中使用。

例子1: 为一个类指定一个别名

<!-- 创建一个类,其包+类名  com.xzd.domain.Student  -->

<!-- 这个配置是写在mybatis-config.xml中的 -->

<configuration>
    ....
    <typeAliases >
        <typeAlias type="com.xzd.domain.Student" alias="testname"> 
    </typeAliases>
 
    ....
</configuration>

<!-- 这个配置是写在studentMapper.xml中的 这个返回类型就可以使用自定义别名了 -->
 <select id="getAllStudent" resultType="testname">
        SELECT 	* FROM  testmybatis.student
    </select>


但是这样有一个问题,那就是每次为一个类写一个别名都需要写一条。

例子2: 为某个类来使用默认类名作为别名

<!-- 创建一个类,其包+类名  com.xzd.domain.Student  -->

<!-- 这个配置是写在mybatis-config.xml中的 -->

<configuration>
    ....
        <typeAliases >
        <typeAlias type="com.xzd.domain.Student"> 
    </typeAliases>
    ....
</configuration>

<!-- 这个配置是写在studentMapper.xml中的 这个返回类型就可以使用默认的类名作为别名了-->
 <select id="getAllStudent" resultType="Student">
        SELECT 	* FROM  testmybatis.student
    </select>


这个说白指定好类,然后不适用alias属性,默认会自动使用类名作为别名。但也有例子1中的弊端,需要对此写

补充 通过package指定包下所有类具有默认别名

<!-- 创建一个类,其包+类名  com.xzd.domain.Student  -->

<!-- 这个配置是写在mybatis-config.xml中的 -->

<configuration>
    ....
    <!-- 这样其包下的所有类,都会默认使用类名作为别名 -->
     <typeAliases >
<!--        <typeAlias type="com.xzd.domain.Student"></typeAlias>-->
        <package name="com.xzd.domain"></package>
    </typeAliases>
    ....
</configuration>

<!-- 这个配置是写在studentMapper.xml中的 这个返回类型就可以使用默认的类名作为别名了-->
 <select id="getAllStudent" resultType="Student">
        SELECT 	* FROM  testmybatis.student
    </select>


**name=“com.xzd.domain” 这样直接写包,会默认其包下的类名即为别名,而且不区别大小写。 **

注意:

  • 通过测试创建com.xzd.domain.test,这种方式可以让包名所在包之下的test包的类也可以启用默认别名,但是com.xzd.domain这个包下必须有类,也就是直接的在这个包下创建java类,不然会报错。

mappers以及其子标签mapper

这个可以导入映射配置文件,通过前面演示的例子可以看出其功能。不过有一个问题,那就是配置文件导入的一两个还好,如下:

    <mappers>
        <!--        <mapper resource="映射文件这个地方配置sql语句,后面具体演示"></mapper>-->
        <mapper resource="mappers/StudentMapper.xml"></mapper>
    </mappers>

但是如果是多个的话,那是需要输入很多行,所以其也支持包(应该说文件夹)导入,然后将其包下的配置文件,全部导入其中。

通过package包导入映射文件

而满足这种包导入需要,需要满足两个条件:

  • mapper接口和映射文件所在的包必须一致。

  • mapper接口和映射文件名字必须一致。

看图理解:

在这里插入图片描述

当然在创建配置文件的时候,没有package这个创建项目,需要通过创建directory,其中目录需要通过 **/**隔离:

在这里插入图片描述

如果中间使用 **. ** 或者 \ 的话,如果打开硬盘,就会发现其不是目录而是文件名。

然后配置文件如下:

 ....
<mappers>
  
    <package name="com.xzd.mapper" ></package>
</mappers>
....

是否好奇为什么,其实如果看编程的话,似乎是分开,但是打开其,编译后输出如下:

在这里插入图片描述

就会发现其会自动归档在一个路径下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值