当前位置: 首页 > news >正文

Spring+SpringMVC+MyBatis深入学习及搭建(三)——MyBatis全局配置文件解析

转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6874672.html 

前面有写到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>

如果此文对您有帮助,微信打赏我一下吧~ 

转载于:https://www.cnblogs.com/Joanna-Yan/p/6874672.html

相关文章:

  • 硬链接和软链接
  • 【python自制】让大白成为你的个人助手!
  • java RabbitMQ
  • linux 21的用法
  • shell脚本编程30分钟入门上手
  • 跟着实例学习ZooKeeper的用法: Leader选举
  • R语言数据可视化2—ggplot2各种维度的业务量统计根据类型统计不同月份的业务量...
  • 使用InteliJ IDEA导出jar包执行报错:找不到主清单属性
  • Ubuntu14.04下sogou输入法的输入框只显示英文不显示中文的问题
  • CentOS 7 更新源 – 使用国内 163 yum 源
  • Linux 的五个重启命令及具体说明
  • 蓝桥杯练习
  • C# 单元测试,带你快速入门
  • 大数据学习系列----python写MapReduce
  • Centos7下Gitlab迁移数据库mysql过程
  • [译] 怎样写一个基础的编译器
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • canvas绘制圆角头像
  • gitlab-ci配置详解(一)
  • HTTP 简介
  • Javascript 原型链
  • Java多线程(4):使用线程池执行定时任务
  • Java-详解HashMap
  • js
  • JSONP原理
  • JS专题之继承
  • python3 使用 asyncio 代替线程
  • redis学习笔记(三):列表、集合、有序集合
  • SpiderData 2019年2月16日 DApp数据排行榜
  • tensorflow学习笔记3——MNIST应用篇
  • 读懂package.json -- 依赖管理
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 力扣(LeetCode)56
  • 一、python与pycharm的安装
  • 应用生命周期终极 DevOps 工具包
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​secrets --- 生成管理密码的安全随机数​
  • #QT(智能家居界面-界面切换)
  • #stm32驱动外设模块总结w5500模块
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (4)(4.6) Triducer
  • (pojstep1.3.1)1017(构造法模拟)
  • (ros//EnvironmentVariables)ros环境变量
  • (第一天)包装对象、作用域、创建对象
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (实战篇)如何缓存数据
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)Neo4j下载安装以及初次使用
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在