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

MyBatis框架 - 全局配置文件概览 mybatis的全局配置文件名和映射文件名

yuyutoo 2024-10-12 00:49 8 浏览 0 评论

3.1 全局配置文件简介

1) The MyBatis configuration contains settings and properties that have a dramatic effect on how MyBatis behaves.

MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息。

2) 文件结构如下:

configuration 配置

properties 属性

settings 设置

typeAliases 类型命名

typeHandlers 类型处理器

objectFactory 对象工厂

plugins 插件

environments 环境

environment 环境变量

transactionManager 事务管理器

dataSource 数据源

databaseIdProvider 数据库厂商标识

mappers 映射器


3.2 properties属性

1) 可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来配置

<properties>

<property name="driver" value="com.mysql.jdbc.Driver" />

<property name="url"

value="jdbc:mysql://localhost:3306/test_mybatis" />

<property name="username" value="root" />

<property name="password" value="1234" />

</properties>



2) 然而properties的作用并不单单是这样,你可以创建一个资源文件,名为jdbc.properties的文件,将四个连接字符串的数据在资源文件中通过键值 对(key=value)的方式放置,不要任何符号,一条占一行

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/mybatis_1129

jdbc.username=root

jdbc.password=1234


<!--

properties: 引入外部的属性文件

resource: 从类路径下引入属性文件

url: 引入网络路径或者是磁盘路径下的属性文件

-->

<properties resource="db.properties" ></properties>


3)在environment元素的dataSource元素中为其动态设置

<environments default="oracle">

<environment id="mysql">

<transactionManager type="JDBC" />

<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>


3.3 settings设置


1) 这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。

2) 包含如下的setting设置:

<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods"

value="equals,clone,hashCode,toString"/>
</settings>


3.4 typeAliases 别名处理

1) 类型别名是为 Java 类型设置一个短的名字,可以方便我们引用某个类。

<typeAliases>

<typeAlias type="com.java.learn.mybatis.beans.Employee"

alias="emp"/>

</typeAliases>

2) 类很多的情况下,可以批量设置别名这个包下的每一个类创建一个默认的别名,就是简单类名小写

<typeAliases>

<package name="com.java.learn.mybatis.beans"/>

</typeAliases>

3) MyBatis已经取好的别名


3.5 typeHandlers 类型处理器

1) 无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型

2) MyBatis中提供的类型处理器:


3) 日期和时间的处理,JDK1.8以前一直是个头疼的问题。我们通常使用JSR310规范领导者Stephen Colebourne创建的Joda-Time来操作。1.8已经实现全部的JSR310规范了

4) 日期时间处理上,我们可以使用MyBatis基于JSR310(Date and Time API)编写的各种日期时间类型处理器。

5) MyBatis3.4以前的版本需要我们手动注册这些处理器,以后的版本都是自动注册的,如需注册,需要下载mybatistypehandlers-jsr310,并通过如下方式注册


6) 自定义类型转换器

① 我们可以重写类型处理器或创建自己的类型处理器来处理不支持的或非标准的类 型

② 步骤

l 实现org.apache.ibatis.type.TypeHandler接口或者继承org.apache.ibatis.type.BaseTypeHandler

l 指定其映射某个JDBC类型(可选操作)

l 在mybatis全局配置文件中注册

3.6 plugins 插件机制

1) 插件是MyBatis提供的一个非常强大的机制,我们可以通过插件来修改MyBatis的一些核心行为。插件通过动态代理机制,可以介入四大对象的任何一个方法的执行

2) 四大对象:

Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)


ParameterHandler (getParameterObject, setParameters)


ResultSetHandler (handleResultSets, handleOutputParameters)


StatementHandler (prepare, parameterize, batch, update, query)

3.7 environments 环境配置

1) MyBatis可以配置多种环境,比如开发、测试和生产环境需要有不同的配置

2) 每种环境使用一个environment标签进行配置并指定唯一标识符

3) 可以通过environments标签中的default属性指定一个环境的标识符来快速的切换环境

4) environment-指定具体环境

id:指定当前环境的唯一标识

transactionManager、和dataSource都必须有

<environments default="oracle">

<environment id="mysql">

<transactionManager type="JDBC" />

<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>

<environment id="oracle">

<transactionManager type="JDBC"/>

<dataSource type="POOLED">

<property name="driver" value="${orcl.driver}" />

<property name="url" value="${orcl.url}" />

<property name="username" value="${orcl.username}" />

<property name="password" value="${orcl.password}" />

</dataSource>

</environment>


</environments>

5) transactionManager

type: JDBC | MANAGED | 自定义

JDBC:使用了 JDBC 的提交和回滚设置,依赖于从数据源得到的连接来管理事务范 围。 JdbcTransactionFactory

MANAGED:不提交或回滚一个连接、让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 ManagedTransactionFactory

自定义:实现TransactionFactory接口,type=全类名/别名

6) dataSource

type: UNPOOLED | POOLED | JNDI | 自定义

UNPOOLED:不使用连接池, UnpooledDataSourceFactory

POOLED:使用连接池, PooledDataSourceFactory

JNDI: 在EJB 或应用服务器这类容器中查找指定的数据源

自定义:实现DataSourceFactory接口,定义数据源的获取方式。

7) 实际开发中我们使用Spring管理数据源,并进行事务控制的配置来覆盖上述配置

3.8 databaseIdProvider数据库厂商标识

1) MyBatis 可以根据不同的数据库厂商执行不同的语句

<databaseIdProvider type="DB_VENDOR">

<property name="MySQL" value="mysql"/>

<property name="Oracle" value="oracle"/>

</databaseIdProvider>

2) Type: DB_VENDOR, 使用MyBatis提供的VendorDatabaseIdProvider解析数据库厂商标识。也可以实现DatabaseIdProvider接口来自定义.

会通过 DatabaseMetaData#getDatabaseProductName() 返回的字符串进行设置。由于通常情况下这个字符串都非常长而且相同产品的不同版本会返回不同的值,所以最好通过设置属性别名来使其变短.

Property-name:数据库厂商标识

Property-value:为标识起一个别名,方便SQL语句使用databaseId属性引用

3) 配置了databaseIdProvider后,在SQL映射文件中的增删改查标签中使用databaseId

来指定数据库标识的别名

<select id="getEmployeeById"

resultType="com.java.learn.mybatis.beans.Employee"

databaseId="mysql">

select * from tbl_employee where id = #{id}

</select>

4) MyBatis匹配规则如下:

① 如果没有配置databaseIdProvider标签,那么databaseId=null

② 如果配置了databaseIdProvider标签,使用标签配置的name去匹配数据库信息,匹配上设置databaseId=配置指定的值,否则依旧为null

③ 如果databaseId不为null,他只会找到配置databaseId的sql语句

④ MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库databaseId 属性的所有语句。如果同时找到带有 databaseId 和不带databaseId 的相同语句,则后者会被舍弃。

3.9 mappers 映射器

1) 用来在mybatis初始化的时候,告诉mybatis需要引入哪些Mapper映射文件

2) mapper逐个注册SQL映射文件

resource : 引入类路径下的文件

url : 引入网络路径或者是磁盘路径下的文件

class : 引入Mapper接口.

有SQL映射文件 , 要求Mapper接口与 SQL映射文件同名同位置.

没有SQL映射文件 , 使用注解在接口的方法上写SQL语句.

<mappers>

<mapper resource="EmployeeMapper.xml" />

<mapper class="com.java.learn.mybatis.dao.EmployeeMapper"/>

<package name="com.java.learn.mybatis.dao"/>

</mappers>

3.10 mappers分页数据量限制示例

@Configuration
@MapperScan("cn.com.demo.mapper")
public class MybatisPlusConfig extends DefaultMyBatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor(List<SqlSessionFactory> sqlSessionFactoryList) {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) {
            sqlSessionFactory.getConfiguration().addInterceptor(likeInterceptor());
            //最大限制数量改为1000
            paginationInterceptor.setLimit(1000);
            sqlSessionFactory.getConfiguration().addInterceptor(paginationInterceptor);
        }
        return paginationInterceptor;
    }
}

相关推荐

Python操作Word文档神器:python-docx库从入门到精通

Python操作Word文档神器:python-docx库从入门到精通动动小手,点击关注...

Python 函数调用从入门到精通:超详细定义解析与实战指南 附案例

一、函数基础:定义与调用的核心逻辑定义:函数是将重复或相关的代码块封装成可复用的单元,通过函数名和参数实现特定功能。它是Python模块化编程的基础,能提高代码复用性和可读性。定义语法:...

等这么长时间Python背记手册终于来了,入门到精通(视频400集)

本文毫无套路!真诚分享!前言:无论是学习任何一门语言,基础知识一定要扎实,基础功非常的重要,找一个有丰富编程经验的老师或者师兄带着你会少走很多弯路,你的进步速度也会快很多,无论我们学习的目的是什么,...

图解Python编程:从入门到精通系列教程(附全套速查表)

引言本系列教程展开讲解Python编程语言,Python是一门开源免费、通用型的脚本编程语言,它上手简单,功能强大,它也是互联网最热门的编程语言之一。Python生态丰富,库(模块)极其丰富,这使...

Python入门教程(非常详细)从零基础入门到精通,看完这一篇就够

本书是Python经典实例解析,采用基于实例的方法编写,每个实例都会解决具体的问题和难题。主要内容有:数字、字符串和元组,语句与语法,函数定义,列表、集、字典,用户输入和输出等内置数据结构,类和对象,...

Python函数全解析:从入门到精通,一文搞定!

1.为什么要用函数?函数的作用:封装代码,提高复用性,减少重复,提高可读性。...

Python中的单例模式:从入门到精通

Python中的单例模式:从入门到精通引言单例模式是一种常用的软件设计模式,它保证了一个类只有一个实例,并提供一个全局访问点。这种模式通常用于那些需要频繁创建和销毁的对象,比如日志对象、线程池、缓存等...

【Python王者归来】手把手教你,Python从入门到精通!

用800个程序实例、5万行代码手把手教你,Python从入门到精通!...

Python从零基础入门到精通:一个月就够了

如果想从零基础到入门,能够全职学习(自学),那么一个月足够了。...

Python 从入门到精通:一个月就够了

要知道,一个月是一段很长的时间。如果每天坚持用6-7小时来做一件事,你会有意想不到的收获。作为初学者,第一个月的月目标应该是这样的:熟悉基本概念(变量,条件,列表,循环,函数)练习超过30个编...

Python零基础到精通,这8个入门技巧让你少走弯路,7天速通编程!

Python学习就像玩积木,从最基础的块开始,一步步搭建出复杂的作品。我记得刚开始学Python时也是一头雾水,走了不少弯路。现在回头看,其实掌握几个核心概念,就能快速入门这门编程语言。来聊聊怎么用最...

神仙级python入门教程(非常详细),从0到精通,从看这篇开始!

python入门虽然简单,很多新手依然卡在基础安装阶段,大部分教程对一些基础内容都是一带而过,好多新手朋友,对一些基础知识常常一知半解,需要在网上查询很久。...

Python类从入门到精通,一篇就够!

一、Python类是什么?大家在生活中应该都见过汽车吧,每一辆真实存在、能在路上跑的汽车,都可以看作是一个“对象”。那这些汽车是怎么生产出来的呢?其实,在生产之前,汽车公司都会先设计一个详细的蓝图...

学习Python从入门到精通:30天足够了,这才是python基础的天花板

当年2w买的全套python教程用不着了,现在送给有缘人,不要钱,一个月教你从入门到精通1、本套视频共487集,本套视频共分4季...

30天Python 入门到精通(3天学会python)

以下是一个为期30天的Python入门到精通学习课程,专为零基础新手设计。课程从基础语法开始,逐步深入到面向对象编程、数据处理,最后实现运行简单的大语言模型(如基于HuggingFace...

取消回复欢迎 发表评论: