MyBatis---全局配置文件

添加dtd约束

  • 通过Mybatis的jar包中org\apache\ibatis\builder\xml 目录下可以发现两个dtd文件

    1. mybatis-3-config.dtd
    2. mybatis-3-mapper.dtd
  • 在IDEA中编写mybatis的全局配置文件时可以通过以下的方式配置全局文件的dtd约束

  • 复制红色框中的URI路径

在这里插入图片描述

  • 打开IDEA的[file]—>[settings]—>[schemas and DTDS]
  • 选择右侧的"+"号

在这里插入图片描述

  • uri就是全局配置文件中的路径
  • file为本地的dtd所在位置

在这里插入图片描述

  • 配置好之后,在全局配置文件中编写标签时会有提示信息

在这里插入图片描述

引入外部配置文件

在这里插入图片描述

  • 示例:定义datasource.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatisdb
jdbc.user=root
jdbc.password=mysqladmin
  • 修改全局配置文件

    <!--配置外部资源文件路径
        resource表示类路径下
        usl表示磁盘或者外部资源文件

        使用${key} 的形式读取资源文件的内容
    -->
<properties resource="properties/datasource.properties"/>

    <environments default="development">
        <environment id="development">
            <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>

运行时行为设置

在这里插入图片描述

  • 示例:设置启用驼峰命名
  • 配置全局配置文件,<settings>标签的位置必须在<environments>标签之上
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

类别名

  • 用typeAliases 起的类别名默认为类名第一个字母小写,例如"Employee"类,那么默认为"employee"

在这里插入图片描述

在这里插入图片描述

  • 示例:通过全局配置文件定义类别名
<!--
        为java程序类取别名
        为单个java类取别名,使用\<typeAlias\> 标签指定
        如果要为一个包下所有的类取别名,则可以使用\<package\> 标签指定
        默认的别名为 类的第一个字母小写
    -->
    <typeAliases>
        <typeAlias type="mao.shu.mybatis.entity.Employee" alias="employee"/>
        <package name="mao.shu.mybatis.entity"/>
    </typeAliases>
  • 示例:通过@Alias注解的方式设置类别名
@Alias("employee")
public class Employee {
...

}

类型处理器

在这里插入图片描述

在这里插入图片描述

plugins插件简介

在这里插入图片描述

environments(配置环境)

在这里插入图片描述

  • 每个<enviroment>标签代表一个环境设置,每个环境设置中必须要有
  1. <transactionManager>标签:事务管理器,取值共有两种:JDBC|MANAGED

    • JDBC:使用JDBC原生的事务设置,使用得到的Connection链接控制提交或回滚
    • MANAGER:由容器来控制事务(例如web容器)
  2. <dataSource>标签:数据库连接,控制数据库的链接,不同的环境可以连接不同的数据库

    • <dataSource>标签的type有四种取值:
      1. UNPOOLED:不使用数据库连接池,每次操作都创建一个新的数据库连接对象
      2. POOLED:使用数据库连接池概念
      3. JNDI – 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
  • 示例:配置环境
    <environments default="development">
        <!--定义开发时的环境配置-->
        <environment id="development">
            <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>

        <!--定义测试时的环境设置-->
        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="UNPOOLED">
                <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>
  • 虽然能够配置多个环境,但是只有一个SqlSessionFactory实例,在获取SqlSessionFactory的时候,可以通过以下的方法,获取指定环境的SqlSessionFactory
  • 其中environment参数为配置的<environment>环境的id值
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);

多数据库配置databaseIdProvider

在这里插入图片描述

在这里插入图片描述

  • 示例:配置多个数据库
  • 在环建设之中,配置两个数据库链接
    1. mysql
    2. Oracle
 <environments default="test">
        <!--定义开发时的环境配置
            链接mysql数据库
        -->
        <environment id="development">
            <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>

        <!--定义测试时的环境设置
            链接Oracle数据库
        -->
        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="UNPOOLED">
                <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:mldn "/>
                <property name="username" value="scott"/>
                <property name="password" value="tiger"/>
            </dataSource>
        </environment>
    </environments>
  • 为两个数据库标识符取别名
    <databaseIdProvider type="DB_VENDOR">
        <property name="MySql" value="mysql"/>
        <property name="Oracle" value="oracle"/>
    </databaseIdProvider>
  • 编写sql映射文件
  • 为同一个查询方法定义两条查询语句
<!-- 链接mysql时使用的查询语句-->
    <select id="getEmp" resultType="mao.shu.mybatis.entity.Employee" databaseId="mysql">
        select id, ename, age, job
        from employee
        where id = #{id}
    </select>

<!-- 连接oracle时查询的语句-->
    <select id="getEmp" resultType="mao.shu.mybatis.entity.Employee" databaseId="oracle">
        select EMPNO id, ENAME, JOB
        from EMP
        where EMPNO = #{id}
    </select>
  • 测试:
    @Test
    public void testInterface(){
        EmployeeMapper employeeMapper = this.session.getMapper(EmployeeMapper.class);
        Employee employee = employeeMapper.getEmp(7369);
        System.out.println(employee);
    }
  • 链接Oracle时
    在这里插入图片描述

链接MySQL时

在这里插入图片描述

mappers映射器

在这里插入图片描述

  • 示例:使用接口名称注册
  • 使用"class"属性注解接口,但是要保证对应的sql映射文件必须与接口在同一个路径下
    <mappers>
        <!--单个注册-->
        <mapper class="mao.shu.mybatis.dao.EmployeeMapper"/>
    </mappers>
  • 示例:使用@Select 注解的方式注册
  • 定义一个新的接口
  • 接口的方法上使用@Select注解修饰,将查询的sql语句,写在@Select注解中
public interface EmployeeAnnotation {
    @Select(" select id, ename, age, job from employee where id = #{id}")
    public Employee getEmp(Integer id);
}
  • 在全局配置文件中注册这个接口,
  • 此时不需要在写sql映射文件了
<!--注册带有@Select注解的接口-->
        <mapper class="mao.shu.mybatis.dao.EmployeeAnnotation"/>
  • 示例:进行批量注册
  • name属性填写的是类路径下的包名称,此时这个包下的所有带有注解的接口都会被自动注册,但是如果是使用sql配置文件的接口,需要将配置文件和接口放在同一个路径下才能够生效
<!--注册sql-->
    <mappers>
       <!--进行批量注册-->
        <package name="mao.shu.mybatis.dao"/>
    </mappers>

小结

  • MyBatis的全局配置文件中的标签位置是有顺序安排的,可以不明确写出来,但是不能够更换前后关系
  1. properties
  2. settings
  3. typeAliases
  4. typeHandlers
  5. objectFactory
  6. objectWrapperFactory
  7. reflectorFactory
  8. plugins
  9. environments
  10. databaseIdProvider
  11. mappers
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值