EchoDemo's Blogs

mybatis学习笔记(5)-配置文件

野有蔓草,零露漙兮。有美一人,清扬婉兮。邂逅相遇,适我愿兮。

野有蔓草,零露瀼瀼。有美一人,婉如清扬。邂逅相遇,与子偕臧。

—-先秦·佚名《国风·郑风·野有蔓草》

SqlMapConfig.xml中配置的内容和顺序

1、properties(属性)

2、settings(全局配置参数)

3、typeAliases(类型别名)

4、typeHandlers(类型处理器)

5、objectFactory(对象工厂)

6、plugins(插件)

7、environments(环境集合属性对象) 
    >environment(环境子属性对象) 
        >transactionManager(事务管理)
        >dataSource(数据源)

8、mappers(映射器)

其中typeAliases(类型别名)和mappers(映射器)是重点。


properties(属性)

将数据库连接参数单独配置在db.properties中,只需要在SqlMapConfig.xml中加载db.properties的属性值。在SqlMapConfig.xml中就不需要对数据库连接参数硬编码。原因:方便对参数进行统一管理,其它xml也可以引用该db.properties。

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://120.25.162.238:3306/mybatis?characterEncoding=utf-8&serverTimezone
jdbc.username=root
jdbc.password=

在sqlMapConfig.xml加载属性文件:

<properties resource="db.properties">
        <!--properties中还可以配置一些属性名和属性值  -->
        <!-- <property name="jdbc.driver" value=""/> -->
</properties>

<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
    <environment id="development">
        <!-- 使用jdbc事务管理,事务控制由mybatis-->
        <transactionManager type="JDBC" />
        <!-- 数据库连接池,由mybatis管理-->
        <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>

注意: MyBatis 将按照下面的顺序(优先级)来加载属性:

1、在properties元素体内定义的属性首先被读取。

2、然后会读取properties元素中resource或url加载的属性,它会覆盖已读取的同名属性。

3、最后读取parameterType传递的属性,它会覆盖已读取的同名属性。

建议:

1、不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。

2、在properties文件中定义属性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX


settings(全局参数配置)

mybatis框架在运行时可以调整一些运行参数,比如:开启二级缓存、开启延迟加载…
全局参数将会影响mybatis的运行行为。具体参考官网:

MyBatis-settings


typeAliases(类型别名)

在mapper.xml中,定义很多的statement,statement需要parameterType指定输入参数的类型、需要resultType指定输出结果的映射类型。

如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterType或resultType指定的类型定义一些别名,在mapper.xml中通过别名定义,方便开发。

(1)mybatis默认支持别名

MyBatis-typeAliases

(2)自定义别名

1、单个别名定义

2、批量定义别名(常用)

<!-- 别名定义 -->
<typeAliases>

    <!-- 针对单个别名定义
    type:类型的路径
    alias:别名
     -->
    <!-- <typeAlias type="com.echodemo.mybatislearning.bean.User" alias="user"/> -->
    <!-- 批量别名定义
    指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名
    (首字母大写或小写都可以)
    -->
    <package name="com.echodemo.mybatislearning.bean"/>

</typeAliases>

typeHandlers(类型处理器)

mybatis中通过typeHandlers完成jdbc类型和java类型的转换。例如:

<select id="findUserById" parameterType="int" resultType="user">
        select * from user where id = #{id}
</select>

mybatis自带的类型处理器基本上满足日常需求,不需要单独定义。

http://www.mybatis.org/mybatis-3/configuration.html#typeHandlers

mappers(映射配置)

(1)通过resource加载单个映射文件:

<mappers>
    <!--通过resource方法一次加载一个映射文件 -->
    <mapper resource="UserMapper.xml"></mapper>
</mappers>

<!--在pom文件中的build标签里面加入相应的路径指引-->
<resources>
    <!-- mapper中通过resource方法一次加载一个映射文件的路径依赖指引 -->
    <resource>
        <directory>src/main/java/com/echodemo/mybatislearning/mapper</directory>
        <includes>
            <include>**/*.xml</include>
        </includes>
    </resource>
</resources>

(2)通过mapper接口加载单个mapper:

<!-- 通过mapper接口加载单个映射文件
        遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,
        且在一个目录中上边规范的前提是:使用的是mapper代理方法
         -->
<mapper class="com.echodemo.mybatislearning.mapper.UserMapper"/>

(3)目录示例:

com.iot.mybatis.mapper------------------package包
   |----UserMapper.java
   |----UserMapper.xml

(4)批量加载mapper(推荐使用)

<mappers>
    <!-- 批量加载mapper
    指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
    遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,
    且在一个目录中上边规范的前提是:使用的是mapper代理方法
     -->
    <package name="com.echodemo.mybatislearning.mapper"/>
</mappers>

<!--在pom文件中的build标签里面加入相应的路径指引-->
<resources>
    <!-- 批量加载mapper指定mapper接口的包名的路径依赖指引 -->
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.xml</include>
        </includes>
    </resource>
</resources>

改文章转载自:mybatis学习笔记(5)-配置文件

🐶 您的支持将鼓励我继续创作 🐶
-------------本文结束感谢您的阅读-------------