Java

重学MyBatis(三):一文带你玩转MyBatis的xml配置

2021-07-16  本文已影响0人  废柴程序员

一、环境配置( environments)

image.png
<?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文件一般我们放在resources目录下 -->
    <properties resource="application.properties">
    </properties>

    <environments default="prod">
        <!--设置默认的环境为开发环境  -->
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${dev.driver}"/>
                <property name="url" value="${dev.url}"/>
                <property name="username" value="${dev.username}"/>
                <property name="password" value="${dev.password}"/>
            </dataSource>
        </environment>
        <!--测试环境用  -->
        <environment id="pre">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${pre.driver}"/>
                <property name="url" value="${pre.url}"/>
                <property name="username" value="${pre.username}"/>
                <property name="password" value="${pre.password}"/>
            </dataSource>
        </environment>
        <!--生产环境用  -->
        <environment id="prod">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${prod.driver}"/>
                <property name="url" value="${prod.url}"/>
                <property name="username" value="${prod.username}"/>
                <property name="password" value="${prod.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/dy/mapper/UserMapper.xml"/>
    </mappers>
</configuration>
dev.driver = com.mysql.jdbc.Driver
dev.url = jdbc:mysql://IP地址:3306/master?useSSL=false&amp;jeuc_2_1?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;failOverReadOnly=false&amp;testOnBorrow=true
dev.username = root
dev.password = 123456

pre.driver = com.mysql.jdbc.Driver
pre.url = jdbc:mysql://IP地址:3306/master?useSSL=false&amp;jeuc_2_1?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;failOverReadOnly=false&amp;testOnBorrow=true
pre.username = root
pre.password = 123456

prod.driver = com.mysql.jdbc.Driver
prod.url = jdbc:mysql://IP地址:3306/master?useSSL=false&amp;jeuc_2_1?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;failOverReadOnly=false&amp;testOnBorrow=true
prod.username = root
prod.password = 123456

这个也是根据实际开发的需求来的,一般我们都是三套环境

整体目录结构如图:

image.png

二、属性(properties)

①、外部动态替换

image.png
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://IP地址:3306/master?useSSL=false&amp;jeuc_2_1?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;failOverReadOnly=false&amp;testOnBorrow=true
username = root
password = 123456
image.png

ContextAplication.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="application.properties">
    </properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/dy/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

对应关系:

image.png

好处:多环境配置可以ContextAplication.xml无需修改只需要配置application.properties文件,在实际开发中我们也是这样做的!方便测试和开发!

image.png

②、内部动态替换

image.png image.png

③、方法中传入替换

image.png image.png

可以看出来,可以传入inputStrem、envirnoment、properties等参数值。

具体案例如下:

Properties properties=new Properties();
           //用的是磁盘符的绝对路径
           InputStream input = new BufferedInputStream(new FileInputStream("D:\\workSpace\\dyj-MyBatis-Project\\MyBatis-01-properties\\src\\main\\resources\\application.properties"));
           //加载到properties中
           properties.load(input);
           String resource = "ContextAplication.xml";
           InputStream inputStream = Resources.getResourceAsStream(resource);
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"prod",properties);
image.png

如果三种动态替换同时存在呢?顺序如下:

④、占位符

<properties resource="application.properties">
        <!-- 启用默认值特性 -->
        <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/>
    </properties>
 <!-- 如果属性 'username' 没有被配置,'username' 属性的值将为 '123456' -->
        <environment id="prod">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${prod.driver}"/>
                <property name="url" value="${prod.url}"/>
                <property name="username" value="${prod.username}"/>
                <property name="password" value="${prod.password:123456}"/>
            </dataSource>
        </environment>

测试看看结果:

image.png image.png

三、设置(settings)

image.png image.png image.png image.png
image.png

四、别名(typeAliases)

①、typeAlias

    <typeAliases>
        <typeAlias type="com.dy.pojo.User" alias="hello"></typeAlias>
    </typeAliases>
<select id="getUserInfo" resultType="hello">
   select * from user
</select>
image.png

②、package

    <typeAliases>
        <package name="com.dy.pojo"/>
    </typeAliases>
    <select id="getUserInfo" resultType="User">
        select * from user
    </select>
image.png

③、注解

@Alias("dayu")
    <select id="getUserInfo" resultType="dayu">
        select * from user
    </select>
image.png image.png image.png

五、映射器(mappers)

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。 但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。

①、resource(使用相对于类路径的资源引用)

<mappers>
    <mapper resource="com/dy/mapper/UserMapper.xml"/>
</mappers>
image.png

②、url(使用完全限定资源定位符)

    <mappers>
        <mapper url="file:D:\workSpace\dyj-MyBatis-Project\MyBatis-01-properties\src\main\java\com\dy\mapper\UserMapper.xml"/>
    </mappers>
image.png

③、class(使用映射器接口实现类的完全限定类名)

<mappers>
    <mapper class="com.dy.mapper.UserMapper"/>
</mappers>
image.png image.png

④、name(将包内的映射器接口实现全部注册为映射器)

    <mappers>
        <package name="com.dy.mapper"/>
    </mappers>
image.png

六、事务管理器(transactionManager)

<transactionManager type="MANAGED">
  <property name="closeConnection" value="false"/>
</transactionManager>

七、配置的顺序(补充知识点)

image.png

报错,看提示:

image.png

总结顺序如下:

必须按照MyBatis规定的顺序来哦~否则会报错的哟!

作者:大鱼丶
原文链接:https://juejin.cn/post/6983847807656394760

上一篇 下一篇

猜你喜欢

热点阅读