玩转MyBatis03——配置解析

本文介绍了MyBatis的核心配置文件mybatis-config.xml的使用方法,包括如何通过properties文件动态替换数据库连接信息,直接在配置文件中配置信息以及通过方法参数传入属性值的方式。此外还介绍了如何配置多环境以及mappers和typeAliases的使用。

1 核心配置文件

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。因此,我们有必要学习一下配置文件的编写与设置,知其然并知其所以然。mybatis-config.xml 为系统核心配置文件,常用配置如下所示。注意元素节点的顺序!顺序不对会报错

在这里插入图片描述

2 properties

数据库的属性可以在外部配置并进行动态替换,该外部既可以是典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。下面将分别展示通过不同动态配置的具体操作:

2.1 利用properties文件动态替换

  1. 首先在 resources 包下建立 jdbc.properties 配置文件,并在文件中填写 jdbc 的连接配置信息
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
jdbc.username=root
jdbc.password=******
  1. 然后在 mybatis-config.xml 文件中新建以下配置,其中 properties 标签中的 resource 代表使用哪个文件下的配置属性, dataSource 标签下的各个 property 的 value 取前述配置文件中的 key
<configuration>
    <properties resource="jdbc.properties"></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>

</configuration>

2.2 直接在 mybatis-config.xml 中配置

直接在 mybatis-config.xml 中对应的 property 的 value 处填写
xml 文件中的 & 符号需要替换为 &amp;

<configuration>
<!--    <properties resource="jdbc.properties"></properties>-->

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT"/>
                <property name="username" value="root"/>
                <property name="password" value="zs123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--每一个Mapper.xml都需要在此注册-->
    <mappers>
        <mapper resource="com/jason/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

2.3 利用方法传入

具体地,我们可以使用 SqlSessionFactoryBuilder.build() 方法中传入属性值

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);

// ... 或者 ...

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);

!!!优先级:方法传入 > 直接配置 > peoperties 文件设置
!!!优先级高的会覆盖优先级低的配置

environments

配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,必须指定其中一个为默认运行环境(通过default指定)。比如下面的配置创建了 development 和 test 两个套环境,且默认选择使用 development 环境。

<environments default="test">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT"/>
            <property name="username" value="root"/>
            <property name="password" value="zs123456"/>
        </dataSource>
    </environment>

    <environment id="test">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
        </dataSource>
    </environment>
</environments>

除此之外,还有 事务管理器(transactionManager)和 数据源(dataSource)两个属性,详细的内容可以查看官方文档,这里不做过多赘述。

mappers

typeAliases

可以给某个 Java 类取别名,我们在使用特定类时不用再加上长长的限定名了。共有两种形式:

  1. 直接给某个类起别名
<typeAliases>
    <typeAlias type="com.jason.pojo.User" alias="User"/>
</typeAliases>
  1. 给某个包下的所有类起别名(在没有注解的情况下,使用 Bean 的首字母小写的非限定类名作为别名;若有注解,则别名为其注解值)
<typeAliases>
    <package name="com.jason.pojo"/>
</typeAliases>

在通过任意一种方式起了别名之后,在 mapper.xml 文件中就直接使用别名 User

<!--select查询语句, resultType 写集合的范型的类型-->
<select id="getUserList" resultType="User">
    select *
    from mybatis.user
</select>

Java 类型内建的类型别名入下图所示:
在这里插入图片描述

参考

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值