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

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

ztj100 2024-12-04 17:13 14 浏览 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"/>

相关推荐

Vue3非兼容变更——函数式组件(vue 兼容)

在Vue2.X中,函数式组件有两个主要应用场景:作为性能优化,因为它们的初始化速度比有状态组件快得多;返回多个根节点。然而在Vue3.X中,有状态组件的性能已经提高到可以忽略不计的程度。此外,有状态组...

利用vue.js进行组件化开发,一学就会(一)

组件原理/组成组件(Component)扩展HTML元素,封装可重用的代码,核心目标是为了可重用性高,减少重复性的开发。组件预先定义好行为的ViewModel类。代码按照template\styl...

Vue3 新趋势:10 个最强 X 操作!(vue.3)

Vue3为前端开发带来了诸多革新,它不仅提升了性能,还提供了...

总结 Vue3 组件管理 12 种高级写法,灵活使用才能提高效率

SFC单文件组件顾名思义,就是一个.vue文件只写一个组件...

前端流行框架Vue3教程:17. _组件数据传递

_组件数据传递我们之前讲解过了组件之间的数据传递,...

前端流行框架Vue3教程:14. 组件传递Props效验

组件传递Props效验Vue组件可以更细致地声明对传入的props的校验要求...

前端流行框架Vue3教程:25. 组件保持存活

25.组件保持存活当使用...

5 个被低估的 Vue3 实战技巧,让你的项目性能提升 300%?

前端圈最近都在卷性能优化和工程化,你还在用老一套的Vue3开发方法?作为摸爬滚打多年的老前端,今天就把私藏的几个Vue3实战技巧分享出来,帮你在开发效率、代码质量和项目性能上实现弯道超车!一、...

绝望!Vue3 组件频繁崩溃?7 个硬核技巧让性能暴涨 400%!

前端的兄弟姐妹们五一假期快乐,谁还没在Vue3项目上栽过跟头?满心欢喜写好的组件,一到实际场景就频频崩溃,页面加载慢得像蜗牛,操作卡顿到让人想砸电脑。用户疯狂吐槽,领导脸色难看,自己改代码改到怀疑...

前端流行框架Vue3教程:15. 组件事件

组件事件在组件的模板表达式中,可以直接使用...

Vue3,看这篇就够了(vue3 从入门到实战)

一、前言最近很多技术网站,讨论的最多的无非就是Vue3了,大多数都是CompositionAPI和基于Proxy的原理分析。但是今天想着跟大家聊聊,Vue3对于一个低代码平台的前端更深层次意味着什么...

前端流行框架Vue3教程:24.动态组件

24.动态组件有些场景会需要在两个组件间来回切换,比如Tab界面...

前端流行框架Vue3教程:12. 组件的注册方式

组件的注册方式一个Vue组件在使用前需要先被“注册”,这样Vue才能在渲染模板时找到其对应的实现。组件注册有两种方式:全局注册和局部注册...

焦虑!Vue3 组件频繁假死?6 个奇招让页面流畅度狂飙 500%!

前端圈的朋友们,谁还没在Vue3项目上踩过性能的坑?满心期待开发出的组件,一到高并发场景就频繁假死,用户反馈页面点不动,产品经理追着问进度,自己调试到心态炸裂!别以为这是个例,不少人在电商大促、数...

前端流行框架Vue3教程:26. 异步组件

根据上节课的代码,我们在切换到B组件的时候,发现并没有网络请求:异步组件:...

取消回复欢迎 发表评论: