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

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

yuyutoo 2024-10-12 00:49 2 浏览 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;
    }
}

相关推荐

jQuery VS AngularJS 你更钟爱哪个?

在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...

Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0

在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...

如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例

要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...

编程技巧:Jquery实时验证,指定长度的「负小数」

为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...

一篇文章带你用jquery mobile设计颜色拾取器

【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...

编程技巧:Jquery实时验证,指定长度的「正小数」

为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...

jquery.validate检查数组全部验证

问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...

Vue进阶(幺叁肆):npm查看包版本信息

第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...

layui中使用lay-verify进行条件校验

一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...

jQuery是什么?如何使用? jquery是什么功能组件

jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...

django框架的表单form的理解和用法-9

表单呈现...

jquery对上传文件的检测判断 jquery实现文件上传

总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...

Nodejs之MEAN栈开发(四)-- form验证及图片上传

这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...

大数据开发基础之JAVA jquery 大数据java实战

上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...

推荐四个开源的jQuery可视化表单设计器

jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...

取消回复欢迎 发表评论: