MyBatis全局配置文件详解
作者:程序dunk 发布时间:2021-09-19 10:13:32
MyBatis全局配置文件
MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings
)和属性(properties
)信息。文档的
顶层结构如下:
configuration
配置properties
属性settings
设置typeAliases
类型命名typeHandlers
类型处理器objectFactory
对象工厂plugins
插件environments
环境environment
环境变量transactionManager
事务管理器dataSource
数据源databaseIdProvide
r 数据库厂商标识mappers
映射器
properties 属性
mybatis
可以使用properties来引入外部properties配置文件的内容
resource
:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源
<properties resource="dbconfig.properties"></properties>
如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:
在 properties 元素体内指定的属性首先被读取。
然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。 – 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
settings 设置
这是 MyBatis 中极为重要的调整设置,它们会改变MyBatis 的运行时行为。
setting包含很多重要的设置项
setting
:用来设置每一个设置项
name
:设置项名
value
:设置项的取值
mapUnderscoreToCamelCase
:驼峰命名 last_name -> lastName
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
typeAliases 类型命名
typeAliases
:可以批量设置别名这个包下的每一个类
别名不区分大小写
创建一个默认的别名,就是简单类名小写
typeAlias
:为某个java类型起别名
type
:指定要起别名的类型全类名;默认别名就是类名小写:employee
alias
:指定新的别名
package
:为某个包下的所有类批量起别名
name
:指定包名(为当前包下以及下面所有的后代包的每一个类都起一个默认的别名(类名小写))
存在的问题:
假设bean包下有一个类Employee,同时在bean包下有一个子包也有一个类叫Employee,此时这两个包的类名就会冲突,因此还可以使用注解的放上为类创建别名
@Alias("")
public class Employee{}
值得注意的是,MyBatis已经为许多常见的 Java 类型内建了相应的类型别名。它们都是大小写不敏感的,我们在起别名的时候千万不要占用已有的别名。
environments 环境
mybatis可以配置多种环境 default指定使用某种环境,可以达到快速切换
environments
:配置一个具体的环境信息;必须有两个标签,id代表当前环境的唯一标识
transactionManager 事务管理器
type
:事务管理器的类型 [JDBC(使用了 JDBC 的提交和回滚设置,依赖于从数据源得到的连接来管理事务范围。)|MANAGED
(不提交或回滚一个连接、让容器来管理事务的整个生命周期(比如 JEE应用服务器的上下文))]
JDBC:JdbcTransactionFactory
自定义事务管理器 实现TransactionFactory接口即可
dataSource 数据源
type
:数据源的类型 [UNPOOLED
(不使用连接池)|POOLED
(使用连接池)|JNDI
(在EJB 或应用服务器这类容器中查找指定的数据源)]
自定义数据源 实现DataSourceFactory接口
实际开发中我们使用Spring管理数据源,并进行事务控制的配置来覆盖上述配置
databaseIdProvider 数据库厂商标识
databaseIdProvider: 可以根据不同的数据库厂商执行不同的语句。
type
:数据库类型 DB_VENDOR
作用就是得到数据库厂商标识(驱动自带的),mybatis就能根据数据库厂商标识来执行不同的sql
MYSQL Oracle SQL Server
value:为标识起一个别名,方便SQL语句使用databaseId属性引用
DB_VENDOR
会通过 DatabaseMetaData#getDatabaseProductName() 返回的字符串进行设置。由于通常情况下这个字符串都非常长而且相同产品的不同版本会返回不同的值,所以最好通过设置属性别名来使其
变短
MyBatis匹配规则如下:
如果没有配置databaseIdProvider标签,那么databaseId=null
如果配置了databaseIdProvider标签,使用标签配置的name去匹配数据库信息,匹配上设置databaseId=配置指定的值,否则依旧为null
如果databaseId不为null,他只会找到配置databaseId的sql语句
MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库databaseId 属性的所有语句。如果同时找到带有 databaseId 和不带databaseId 的相同语句,则后者会被舍弃。
mappers 映射器
mapper:注册一个sql映射
注册配置文件
resource
:引用类路径下的sql映射文件
url:用网路路径下的或者磁盘路径下的sql映射文件
注册接口
class:引应用接口
接口映射文件,映射文件名必须和接口同名,并且放在同一个目录下
没有sql映射文件,所有的sql利用注解写在接口上
注解写在接口上
推荐:比较重要和复杂额Dao接口写sql映射文件,不重要的简单的为了开发快速可以使用注解
package:批量注册
sql映射文件
namespace
:名称空间;指定为接口的全类名
id
:唯一标识
resultType
:返回值类型
#{id}
:从传递过来的参数中取出id值
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="school.xauat.mybatis.dao.EmployeeMapper">
<select id="getEmpById" resultType="employee" >
select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="employee" databaseId="mysql">
select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="employee" databaseId="oracle">
select * from tbl_employee where id = #{id}
</select>
</mapper>
来源:https://blog.csdn.net/qq_45796208/article/details/110508432


猜你喜欢
- 自定义类:using System;using System.Collections.Generic;using System.Linq;u
- springboot 中各种配置项纪录1. @Value最早获取配置文件中的配置的时候,使用的就是这个注解,SpEL表达式语言。// 使用起
- 前言本文基于itext7实现pdf加水印和合并的操作。实际上在我们实际项目应用中,对于pdf的操作也是比较常见的,我上一个项目中就有将结果转
- Android 消息机制1.概述Android应用启动时,会默认有一个主线程(UI线程),在这个线程中会关联一个消息队列(MessageQu
- 工作需求,要播放一张gif图片,又不想转成视频播放,就开始研究怎样解析gif,在网上也看了不少教程,最后根据自己需求写了个脚本。首先,Uni
- 开发 Web 应用的思路实现一个简单的 JSP/Servlet。搭建创建 Web 应用工程的环境。创建 Web 应用工程。Web 应用工程的
- 以下代码可以获得已安装应用(包)的信息:// 包管理器PackageManager pm = getPackageManager();//获
- 前言现在很多应用都会用到地图,但是我们肯定不想自己的app中还要弄个导航神马的,所以第三方的地图也为我们开辟了一条捷径,直接将数据传输到地图
- 由于公司同是使用.NET和JAVA,而且各个服务集使用接口来进行通信,因此某些例如清算系统、收银台之类的安全性比较高的系统会使用RSA进行加
- 示例代码:<%@ Page Language="C#" AutoEventWireup="true&qu
- 项目中有个要求,对上传服务器的图片大小进行判断,大于500k的图片要进行压缩处理,让其小于500k后在上传。可以通过java api的Ima
- 之前做过cookie实现记住密码,这次换成session记住密码又做了一遍,有很多收获。本次博客分为两部分。一部分是cookie和sessi
- Android 实现全屏显示的几种方法整理A、设置主题实现全屏直接在AndroidManifest.xml文件中设定Activity主题为全
- 本文实例为大家分享了android自定义WaveView水波纹控件的使用方法,供大家参考,具体内容如下Github Repository a
- 什么是响应式简单来说当数据发生变化时,对数据有依赖的代码会重新执行。例如在Vue中,当我们的数据发生改变,界面上对该数据的引用组件会重新渲染
- 本文实例展示了C#实现Datatable排序的方法,分享给大家供大家参考之用。具体方法如下:一般来说,在C#中要对Datatable排序,可
- C#实现MD5加密,具体如下:方法一首先,先简单介绍一下MD5MD5的全称是message-digest algorithm 5(信息-摘要
- Java类的加载说明Java类的编译代码都存在于它自己的独立文件中(class),该文件只在需要使用程序代码时才会被加载。类加载在创建类的第
- java 中http请求为了防止乱码解决方案今天做一个与地图有关的项目,需要发起http请求地图数据 写了一个工具类,希望大家都能用上吧pa
- JAVA用于开发图形界面应用的 SWING 组件包功能强大,使用方便。接下来我们就使用其写一个简单的图形界面小程序:加法计算器。第一步:首先