Spring+SpringMVC+MyBatis深入学习及搭建(三)之MyBatis全局配置文件解析
作者:Joanna.Yan 发布时间:2022-03-21 05:25:23
前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发
MyBatis的全局配置文件SqlMapConfig.xml,配置内容和顺序如下:
properties(属性)
setting(全局配置参数)
typeAliases(类名别名)
typeHandlers(类名处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transationManager(事务管理)
dataSource(数据源)
mappers(映射器)
1.properties(属性)
需求:
将数据库连接参数单独配置在db.properties中,只需要在SqlMapConfig.xml中加载db.properties的属性值。在SqlMapConfig.xml中就不需要对数据库连接参数硬编码。
将数据库连接参数只配置在db.properties中,原因:方便对参数进行统一管理,其它xml可以引用该db.properties。
在classpath下定义db.properties文件:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/mybatisdemo
jdbc.username=root
jdbc.password=
在SqlMapConfig.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>
<!-- 加载数据库文件db.properties -->
<properties resource="db.properties">
<!-- properties中陪可以配置一些属性名和属性值,此处的优先加载 -->
<!-- <property name="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>
</configuration>
properties特性:
注意:MyBatis将按照下面的顺序来加载属性:
(1)在properties元素体内定义的属性首先被读取。
(2)然后会读取properties元素中resourse或url加载的属性,它会覆盖已读取的同名属性。
(3)最后读取parameterType传递的属性,它会覆盖已读取的同名属性。
所以这里可能就会存在一个问题:假如UserMapper.xml中的有一个statement的入参名为name,
而db.properties中也有一个参数名叫name。
那最终UserMapper.xml中的select会读取到name=root,而不是用户传入的值。
建议:
不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。
在properties文件中定义属性名要有一定的特殊性,如:xxx.xxx.xxx,jdbc.url,jbdc.username。
2.settings(全局参数配置)
MyBatis框架在运行时可以调整一些运行参数。
比如:开启二级缓存、开启延迟加载......
全局参数将会影响MyBatis的运行行为。
3.typeAliases(别名)重点
3.1需求
在mapper.xml中,定义很多的statement,而statement需要parameterType指定输入参数的类型,需要resultType指定输出结果的映射类型。
如果在指定类型时输入类型全路径,不方便进行开发。可以针对parameterType或resultType指定的类型定义一些别名,在mapper.xml中通过别名定义,方便开发。
3.2mybatis默认支持别名
3.3自定义别名
3.3.1单个别名定义
<!-- 单个别名定义: -->
<typeAliases>
<typeAlias type="joanna.yan.mybatis.entity.User" alias="user"/>
</typeAliases>
引用别名:
<select id="findUserById" parameterType="int" resultType="user">
select * from user where id=#{id}
</select>
3.3.2批量定义别名(常用)
<!--
批量别名的定义:
package:指定包名,mybatis会自动扫描包中的pojo类,自定义别名,别名就是类名(首字母大写或小写都可以) -->
<typeAliases>
<package name="joanna.yan.mybatis.entity"/>
<!-- <package name="其它包名"/> -->
</typeAliases>
4.typeHandlers(类型处理器)
MyBatis中通过typeHandlers完成jbdc类型和java类型的转换。通常情况下,MyBatis提供的类型处理器满足日常需要,不需要自定义。
5.mappers(映射配置)
5.1通过resource加载单个文件
<!-- 加载映射文件 -->
<mappers>
<!-- 通过resource方法一次加载一个映射文件 -->
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
5.2通过mapper接口加载单个mapper
<!-- 加载映射文件 -->
<mappers>
<!--
通过mapper接口加载单个映射配置文件
遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;
以上规范的前提是:使用的是mapper代理方法;
-->
<mapper class="joanna.yan.mybatis.mapper.UserMapper"/>
</mappers>
按照上边的规范,将mapper.java和mapper.xml放在一个目录,且同名。
5.3批量加载mapper(推荐使用)
<mappers>
<!-- 批量加载映射配置文件,mybatis自动扫描包下的mapper接口进行加载;
遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;
以上规范的前提是:使用的是mapper代理方法;
-->
<package name="joanna.yan.mybatis.mapper"/>
</mappers>
以上所述是小编给大家介绍的Spring+SpringMVC+MyBatis深入学习及搭建(三)之MyBatis全局配置文件解析网站的支持!
来源:http://www.cnblogs.com/Joanna-Yan/p/6874672.html


猜你喜欢
- 使用java制作一款简单的扫雷游戏,供大家参考,具体内容如下import java.util.*;public class nephelok
- 一、什么是稀疏数组当一个数组a中大部分元素为0,或者为同一个值,那么可以用稀疏数组b来保存数组a。首先,稀疏数组是一个数组,然后以一种特定的
- 前言:在 Java 语言中,并发编程都是依靠线程池完成的,而线程池的创建方式又有很多,但从大的分类来说,线程池的创建总共分为两大类:手动方式
- 第1部分 List概括List的框架图List 是一个接口,它继承于Collection的接口。它代表着有序的队列。AbstractList
- 前言 GMap.NET是一个强大、免费、跨平台、开源的.NET控件。分为WPF和winform版。GMap.NET的基本知识不做过
- 一、TPHTable Per Hierarchy (默认,每个层次一个表)每个层次结构共用一个表,类的每一个属性都必须是可空的。1、默认行为
- SmartArt其实就是一个文字的可视化工具,用户可在PowerPoint,Word,Excel中使用该特性创建各种图形图表。SmartAr
- 在《阿里巴巴java开发手册》中指出了线程资源必须通过线程池提供,不允许在应用中自行显示的创建线程,这样一方面是线程的创建更加规范,可以合理
- SpringBoot在annotation的层面实现了数据缓存的功能,基于Spring的AOP技术。所有的缓存配置只是在annotation
- 本文实例讲述了Android内容提供者ContentProvider用法。分享给大家供大家参考,具体如下:PersonContentProv
- 本文实例讲述了C#实现的三种模拟自动登录和提交POST信息的方法。分享给大家供大家参考,具体如下:网页自动登录(提交Post内容)的用途很多
- 前言:想象一下,有一个服务提供个多个客户端调用,但不是所有客户端都需要全部的返回参数:比如商品列表服务返回商品的所有信息,而订单服务调用商品
- C# 获取硬件参数的实现方法示例代码:private static string GetIdentifier(string wmiClass
- private void button2_Click(object sender, EventArgs e) &nbs
- 在文本框中输入一个数字,点击开始累加按钮,程序计算从1开始累计到该数字的结果。因为该累加过程比较耗时,如果直接在UI线程中进行,那么当前窗口
- 前言小小知识,不值一提,了解了也不能让你提高身价,但是不了解你就是比别人少知道点!事儿就是这么个事儿,直接正题吧! 直接看代码演示优先级当方
- 给组件加上 * 定义一个类,这个类继承ActionListenerpubulic class ButListener implements
- 传感器简单的介绍一下传感器: 就是设备用来感知周边环境变化的硬件。Android中的传感器包含在传感器框架中,属于android.hardw
- 前言将Chart的X轴设置为时间轴是一个说简单不简单的问题,说难也不难的问题,你用过之后呢就感觉很容易,你没用过呢,就比较难,所以这个是很值
- 面试的时候被问到,如何遍历System.drawing.Color下面的所有颜色以及名称以查看,当时答得不好,现将方案记录如下:View C