百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

MyBatis-XML配置教程,这也太详细了吧

ztj100 2024-12-04 17:13 11 浏览 0 评论


01主配置文件说明与细节配置

<environments>:环境集标签,就是用于配置数据库的环境,一个environments 中可以包含多个 environment,例如 测试/开发/上线, 这里默认是开发环境,default属性需要和environment的id属性保持一致,可以定义多个 environment 元素,通过default属性来切换不同的环境.

<environment>:用于配置具体环境参数,例如配置事务,连接池等.

<transactionManager>:配置使用的事务类型,JDBC表示默认事物,MANAGER表示没有事务

<dataSource>:配置数据源的参数,POOLED,具体参数参看PooledDataSource的set方法

<property>:配置属性,例如数据库四大连接参数

<mappers>:配置映射文件信息的

<mapper class|resource>:配置具体指定的mapper文件

class属性:配置使用注解时指定有注解的映射接口

resource属性:指定XML映射文件

<properties>:mybatis对propertis文件的支持

<typeAliases>:用于配置别名

<typeHandlers>:用于配置自定义类型处理器.

<settings>:配置Mybatis的默认设置的.


02总配置文件的标签顺序


如下所示是主配置文件的文档声明:

<!DOCTYPE configuration         
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"        
"http://mybatis.org/dtd/mybatis-3-config.dtd">

文档声明中指定了当前XML文件的XML约束,它是一个dtd文件,dtd约束指定了配置文件中标签的顺序,如下所示:

<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,

objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>

这句话的意思就是configuration 标签下的标签的顺序以及标签出现的个数的声明

根据这个声明可以看到顺序为:

1.properties

2.settings

3.typeAliases

4.typeHandlers

5.objectFactory

6.objectWrapperFactory

7.reflectorFactory

8.plugins

9.environments

10.databaseIdProvider

11.mappers

DTD规则文件标签的出现的次数说明

? , * , + 正则表达式的次数

如果声明的标签后?:表示出现0-1次

如果声明的标签后*:表示出现0-N次

如果声明的标签后+:表示出现1-N次

如果声明的标签后什么都没有:表示出现1次


03.typeAliases别名配置

在UserMapper.xml文件中User无论是作为参数还是作为查询返回数据类型,都需要写上全限定名,实际可以写上简单类名即可,但是需要配置别名.

MyBatis框架提供了两种别名机制,一种是自定义别名,一种是内置别名

3.1 自定义别名

<typeAliases>: 自定义别名配置

常见属性:

type: 要设置别名的数据类型(全限定名)

alias : 取的别名,一般都使用类的简单名称

代码示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration         
PUBLIC "-http://mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration>     
<!-- 别名配置 -->
<typeAliases>
<!--              配置单个类型的别名
type: 要设置别名的数据类型(全限定名)                  
alias : 取的别名,一般都使用类的简单名
-->          
<typeAlias type="com.xyr.domain.User" alias="user"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?
useUnicode=true&characterEncoding=utf8"/
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
 </environment>
</environments>
<mappers>         
<mapper resource="com/xyr/mapper/UserMapper.xml"/>
</mappers>
</configuration>

如果配置成功,在映射文件里面可以直接使用别名:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "http://mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xyr.mapper.UserMapper">
<select id="selectOne" parameterType="int" resultType="user">
 select * from user where id = #{id}
</select>
<select id="selectAll" resultType="user">
select * from user;
</select>
<insert id="saveUser" parameterType="user">
 insert into user values(null, #{name}, #{password}, #{age});     
</insert>
</mapper>

包扫描配置别名

<package name="com.xyr.domain"/>

name属性 : 对应要取别名的包,自动会为包下面的所有的类取别名,别名就是当前类名的简单名称

3.2 内置别名

所谓的内置别名,就是Mybatis框架自带别名.

Mybatis已经将常用的数据类型的别名内置声明了.所以这些内置的别名不需要配置就可以直接使用.

内置的别名就是,Mybatis框架默认已经设置的别名.

别名

映射的类型

_byte

byte

_long

long

_short

short

_int

int

_integer

int

_double

double

_float

float

_boolean

boolean

string

String

byte

Byte

long

Long

short

Short

int

Integer

integer

Integer

double

Double

float

Float

boolean

Boolean

date

Date

decimal

BigDecimal

bigdecimal

BigDecimal

object

Object

map

Map

hashmap

HashMap

list

List

arraylist

ArrayList

collection

Collection

iterator

Iterator


04properties 读取配置文件


一般开发会将单独的数据库连接字符串配置到一个独立的 以 .properties 的配置文件中

Mybaits框架中配置文件 的 <properties>标签可以读取配置文件中的内容。并可以使用${}的OGNL语法设置给框架的数据库连接操作代码

1. 在classpath下面创建一个db.properties数据库连接配置文件

mysql.driver=com.mysql.jdbc.Driver mysql.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8 
mysql.user=root mysql.password=root

2. 在mybatis-config.xml主配置文件中配置<properties>标签读取配置文件,位置是在configuration标签的第一个位置

<!-- 根标签,在内部配置MyBatis框架信息 
--> 
<configuration> 
<!-- 读取classpath下面的 数据库配置文件、 读取以后在下面连接数据库的配置中就可以使用 ${配置文件key} 获取对应的数据库连接相关信息  
--> 
<properties resource="db.properties"/>

3. 连接数据库的配置修改为 ${key}的方式

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration         
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"//mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>     
<!-- 配置properties标签用来引入数据库连接配置 -->
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.user}"/>
<property name="password" value="${mysql.password}"/>             </dataSource>         
</environment>     
</environments>     
<mappers>
<mapper resource="com/xyr/mapper/UserMapper.xml"/>     
</mappers>
</configuration>


05settings标签


Mybatis默认设置了很多默认配置.有时候,我们需求与默认的配置的参数不一样,

我们就需要修改这些默认配置的参数.

如:Mybatis已经对骆驼命名法的支持,但默认是不开启的.可以通过mapUnderscoreToCamelCase参数设置为true支持

表示Mybatis启动可以配置的设置

设置名

描述

有效值

默认值

cacheEnabled

全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。

true | false

true

lazyLoadingEnabled

延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。

true | false

false

aggressiveLazyLoading

开启时,任一方法的调用都会加载该对象的所有延迟加载属性。 否则,每个延迟加载属性会按需加载(参考 lazyLoadTriggerMethods)。

true | false

false (在 3.4.1 及之前的版本中默认为 true)

multipleResultSetsEnabled

是否允许单个语句返回多结果集(需要数据库驱动支持)。

true | false

true

useColumnLabel

使用列标签代替列名。实际表现依赖于数据库驱动,具体可参考数据库驱动的相关文档,或通过对比测试来观察。

true | false

true

useGeneratedKeys

允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。

true | false

False

autoMappingBehavior

指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示关闭自动映射;PARTIAL 只会自动映射没有定义嵌套结果映射的字段。 FULL 会自动映射任何复杂的结果集(无论是否嵌套)。

NONE, PARTIAL, FULL

PARTIAL

autoMappingUnknownColumnBehavior

指定发现自动映射目标未知列(或未知属性类型)的行为。 NONE: 不做任何反应 WARNING: 输出警告日志('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior' 的日志等级必须设置为 WARN) FAILING: 映射失败 (抛出 SqlSessionException)

NONE, WARNING, FAILING

NONE

defaultExecutorType

配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新。

SIMPLE REUSE BATCH

SIMPLE

defaultStatementTimeout

设置超时时间,它决定数据库驱动等待数据库响应的秒数。

任意正整数

未设置 (null)

defaultFetchSize

为驱动的结果集获取数量(fetchSize)设置一个建议值。此参数只可以在查询设置中被覆盖。

任意正整数

未设置 (null)

defaultResultSetType

指定语句默认的滚动策略。(新增于 3.5.2)

FORWARD_ONLY | SCROLL_SENSITIVE | SCROLL_INSENSITIVE | DEFAULT(等同于未设置)

未设置 (null)

safeRowBoundsEnabled

是否允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为 false。

true | false

False

safeResultHandlerEnabled

是否允许在嵌套语句中使用结果处理器(ResultHandler)。如果允许使用则设置为 false。

true | false

True

mapUnderscoreToCamelCase

是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。

true | false

False

localCacheScope

MyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。 默认值为 SESSION,会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地缓存将仅用于执行语句,对相同 SqlSession 的不同查询将不会进行缓存。

SESSION | STATEMENT

SESSION

jdbcTypeForNull

当没有为参数指定特定的 JDBC 类型时,空值的默认 JDBC 类型。 某些数据库驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。

JdbcType 常量,常用值:NULL、VARCHAR 或 OTHER。

OTHER

lazyLoadTriggerMethods

指定对象的哪些方法触发一次延迟加载。

用逗号分隔的方法列表。

equals,clone,hashCode,toString

defaultScriptingLanguage

指定动态 SQL 生成使用的默认脚本语言。

一个类型别名或全限定类名。

org.apache.ibatis.scripting.xmltags.XMLLanguageDriver

defaultEnumTypeHandler

指定 Enum 使用的默认 TypeHandler 。(新增于 3.4.5)

一个类型别名或全限定类名。

org.apache.ibatis.type.EnumTypeHandler

callSettersOnNulls

指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这在依赖于 Map.keySet() 或 null 值进行初始化时比较有用。注意基本类型(int、boolean 等)是不能设置成 null 的。

true | false

false

returnInstanceForEmptyRow

当返回行的所有列都是空时,MyBatis默认返回 null。 当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集(如集合或关联)。(新增于 3.4.2)

true | false

false

logPrefix

指定 MyBatis 增加到日志名称的前缀。

任何字符串

未设置

logImpl

指定 MyBatis 所用日志的具体实现,未指定时将自动查找。

SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING

未设置

proxyFactory

指定 Mybatis 创建可延迟加载对象所用到的代理工具。

CGLIB | JAVASSIST

JAVASSIST (MyBatis 3.3 以上)

vfsImpl

指定 VFS 的实现

自定义 VFS 的实现的类全限定名,以逗号分隔。

未设置

useActualParamName

允许使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的项目必须采用 Java 8 编译,并且加上 -parameters 选项。(新增于 3.4.1)

true | false

true

configurationFactory

指定一个提供 Configuration 实例的类。 这个被返回的 Configuration 实例用来加载被反序列化对象的延迟加载属性值。 这个类必须包含一个签名为static Configuration getConfiguration() 的方法。(新增于 3.2.3)

一个类型别名或完全限定类名。

未设置

shrinkWhitespacesInSql

Removes extra whitespace characters from the SQL. Note that this also affects literal strings in SQL. (Since 3.5.5)

true | false

false

1. 如支持驼峰命名法

<!-- 配置默认的参数 -->
<settings>     
<!-- 默认支持骆驼命名法 -->    <setting name="mapUnderscoreToCamelCase" value="true"/>     
// 把 u_id 转成 uId
</settings>
JavaBean如下所示:
public class User2 {    
private Integer uId;
private String uName;    
 private String uPwd;
 private String uAge;     
// 此处get/set/toString方法省略... }
UserMapper类如下所示:
/**  
* 测试驼峰命名法  
?* @param id  
* @return  
*/
User2 findOne(Integer id);
UserMapper.xml配置如下所示;
<select id="findOne" parameterType="int" resultType="user2">
select id u_id, name u_name, password u_pwd, age u_age from user where id = #{id}
</select>

测试类如下所示:

@Test public void testFindOne() {     
try(SqlSession sqlSession = MyBatisUtils.getSession()){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User2 user2 = userMapper.findOne(4);
System.out.println(user2);    
}
}

2. 日志配置

<settings>     
<setting name="logImpl" value="LOG4J"/>
</settings>

06mappers标签


?mappers标签中可以包含多个子mapper标签,每一个mapper标签对应的是一个映射配置,这个映射配置可以是XML配置,也可以是注解配置

mapper的属性如果是resource,那么表示使用XML文件配置,如果是class,表示使用注解配置

如下所示是XML配置:

<mappers>     
<mapper resource="com/xyr/mapper/UserMapper.xml"/> 
</mappers>

如下所示是注解配置:

<mapper class="com.xyr.mapper.UserMapper"/>

在实际开发中我们的Mapper类或者Mapper.xml文件很多,这个是配置比较繁琐,我们可以配置包扫描,包扫描会自动扫描某个包下所有的mapper,代码如下所示:

<package name="com.xyr.mapper"/>

相关推荐

电脑装系统用GHOST好,还是原装版本好?老司机都是这么装的

Hello大家好,我是兼容机之家的咖啡。安装Windows系统是原版ISO好还是ghost好呢?针对这个的问题,我们先来科普一下什么是ghost系统,和原版ISO镜像两者之间有哪些优缺点。如果是很了解...

苹果 iOS 14.5.1/iPadOS 14.5.1 正式版发布

IT之家5月4日消息今日凌晨,苹果发布了iOS14.5.1与iPadOS14.5.1正式版更新。这一更新距iOS14.5正式版发布过去了一周时间。IT之家了解到,苹果表示,...

iOS 13.1.3 正式版发布 包含错误修复和改进

苹果今天发布了iOS13.1.3和iPadOS13.1.3,这是iOS13发布之后第四个升级补丁。iOS13.1.2两周前发布。iOS13.1.3主要包括针对iPad和...

还不理解 Error 和 Exception 吗,看这篇就够了

在Java中的基本理念是结构不佳的代码不能运行,发现错误的理想时期是在编译期间,因为你不用运行程序,只是凭借着对Java基本理念的理解就能发现问题。但是编译期并不能找出所有的问题,有一些N...

Linux 开发人员发现了导致 MacBook“无法启动”的 macOS 错误

“多个严重”错误影响配备ProMotion显示屏的MacBookPro。...

启动系统时无法正常启动提示\windows\system32\winload.efi

启动系统时无法正常启动提示\windows\system32\winload.efi。该怎么解决?  最近有用户遇到了开机遇到的问题,是Windows未能启动。原因可能是最近更改了硬件或软件。虽然提...

离线部署之两种构建Ragflow镜像的方式,dify同理

在实际项目交付过程中,经常遇到要离线部署的问题,生产服务器无法连接外网,这时就需要先构建好ragflow镜像,然后再拷到U盘或刻盘,下面介绍两种构建ragflow镜像的方式。性能测试(网络情况好的情况...

Go语言 error 类型详解(go语言 异常)

Go语言的error类型是用于处理程序运行中错误情况的核心机制。它通过显式的返回值(而非异常抛出)来管理错误,强调代码的可控性和清晰性。以下是详细说明及示例:一、error类型的基本概念内置接口...

Mac上“闪烁的问号”错误提示如何修复?

现在Mac电脑的用户越来越多,Mac电脑在使用过程中也会出现系统故障。当苹果电脑无法找到系统软件时,Mac会给出一个“闪烁的问号”的标志。很多用户受到过闪烁问号这一常见的错误提示的影响,如何解决这个问...

python散装笔记——177 sys 模块(python sys模块详解)

sys模块提供了访问程序运行时环境的函数和值,例如命令行参数...

30天自制操作系统:第一天(30天自制操作系统电子书)

因为咱们的目的是为了研究操作系统的组成,所以直接从系统启动的第二阶段的主引导记录开始。前提是将编译工具放在该文件目录的同级目录下,该工具为日本人川合秀实自制的编译程序,优化过的nasm编译工具。...

五大原因建议您现在不要升级iOS 13或iPadOS

今天苹果放出了iPadOS和iOS13的公测版本,任何对新版功能感兴趣的用户都可以下载安装参与测试。除非你想要率先体验Dark模式,以及使用AppleID来登陆Facebook等服务,那么外媒CN...

Python安装包总报错?这篇解决指南让你告别pip烦恼!

在Python开发中,...

苹果提供了在M1 Mac上修复macOS重装错误的方案

#AppleM1芯片#在苹果新的M1Mac推出后不久,我们看到有报道称,在这些机器上恢复和重新安装macOS,可能会导致安装错误,使你的Mac无法使用。具体来说,错误信息如下:"An...

黑苹果卡代码篇三:常见卡代码问题,满满的干货

前言...

取消回复欢迎 发表评论: