MyBatis 配置文件详解
根元素<configuration>,子元素:
- <properties>
- <setttings>
- <typeAliases>
- <typeHandlers>
- <objectFactory>
- <plugins>
- <environments>
- <databaseIdProvider>
- <mappers>
这些子元素的配置是有顺序的,只能按照上面的顺序配置。
可缺省部分子元素。
<properties>
用于将内部的配置外在化,在<properties>中引入外部配置即可。
比如数据库的连接信息,我们可以直接写在全局配置文件中:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT"/>
<property name="username" value="chy"/>
<property name="password" value="abcd"/>
</dataSource>
</environment>
</environments>
考虑到更换数据库时,运维从一大堆代码不好找数据库的连接信息,我们可以把数据库的连接信息拿出来,单独写在一个配置文件中。
sql.properties:
mysql_driver=com.mysql.cj.jdbc.Driver
mysql_url=jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT
mysql_username=chy
mysql_password=abcd
#oracle_driver=.....
#oracle_url=.....
#oracle_username=.....
#oracle_password=.....
mybatis-config.xml:
<properties resource="sql.properties"></properties> <environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${mysql_driver}"/>
<property name="url" value="${mysql_url}"/>
<property name="username" value="${mysql_username}"/>
<property name="password" value="${mysql_password}"/>
</dataSource>
</environment>
</environments>
<settings>
用于设置mybatis运行时的参数。常用的项有:
- cacheEnabled:是否使用缓存,boolean值,默认为false
- lazyLoadingEnabled :是否使用懒加载,boolean值,默认为false
- defaultStatementTimeout:设置超时时间,默认单位秒
- mapUnderscoreToCamelCase:是否启用camel命名规则的映射,boolean值,默认为false
- logImpl:使用的日志框架
一般只需配置logImpl:
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
如果不使用日志框架,可以缺省此配置。
<typeAlias>
用于配置pojo类别名。
在映射文件中,如果parameterType、 resultType是自己写的pojo类,必须使用全限定类名:
resultType="com.chy.pojo.Student"
又臭又长,很麻烦。可以使用别名。
配置pojo类的别名:
<typeAliases>
<typeAlias type="com.chy.pojo.Student" alias="Student"/>
<typeAlias type="com.chy.pojo.Teacher" alias="Teacher"/>
</typeAliases>
resultType="Student"
直接写别名即可。
如果缺省alias属性,默认为类名的camel写法,比如Student => student。
也可以使用注解来配置pojo类的别名:
@Alias(value = "Student")
public class Student {
//......
}
可以缺省属性名,简写为
@Alias("Student")
如果觉得一个一个地配置pojo类很麻烦,可以使用包自动扫描:
<typeAliases>
<package name="com.chy.pojo"/>
</typeAliases>
这个包下所有的pojo类都使用camel命名方式的别名。
在映射文件中使用别名有一个缺点:Ctrl+左键不会转到定义处。
<typeHandlers>
将参数传给预处理语句时,需要将数据从javaType(java类型)转换为jdbcType(jdbc类型);
将结果集中的数据转换为指定类型时,需要将数据从jdbcType转换为javaType。
这2个过程都要用到typeHandler(类型转换器)。一般我们使用mybatis自带的类型转换器即可,也可以在<typeHandlers>中引用自定义的类型转换器。
<objectFactory>
ObjectFactory负责创建结果实例。
将查询结果映射为指定对象时,默认的ObjectFactory先调用无参的构造器创建pojo类的实例,再调用setter方法注入值。
一般我们使用默认的ObjectFactory即可,也可以在<objectFactory>中引用自定义的ObjectFactory类。
<plugins>
mybatis允许在将查询结果映射为指定类型的过程中,以插件形式执行自定义的代码。
<environments>
环境配置,mybatis是持久层框架,它的环境自然是数据库,即数据库的配置。
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${mysql_driver}"/>
<property name="url" value="${mysql_url}"/>
<property name="username" value="${mysql_username}"/>
<property name="password" value="${mysql_password}"/>
</dataSource>
</environment>
</environments>
一般要配置多个环境,开发一个环境,正式使用一个环境。default指定要使用哪个<environment>。
一个<environment>即一个环境(数据库配置)。
<transactionManager>指定使用哪种事务管理,通常使用JDBC的事务管理。如果搭配Spring使用,一般使用Spring的事务管理(在spring中配置事务管理),不在mybatis中配置事务。
<dataSource>配置数据源,mybatis提供了三种数据源:
- UNPOOLED 不使用连接池
- POOLED 使用连接池
- JNDI 适合在在EJB或应用服务器等容器中使用
type指定使用哪种数据源,<property>子元素设置具体选项。
UNPOOLED
不使用连接池,适合对性能没有要求的、简单的应用程序。
常用属性:
- driver、url、username、password
- defaultTransactionlsolationLevel 设置默认的事务隔离级别
POOLED
操作数据库速度更快,适合高并发的程序,很常用。
常用属性:
- driver、url、username、password
- defaultTransactionlsolationLevel 设置默认的事务隔离级别
- poolMaximumActiveConnections 最大活跃连接数
- poolMaximumIdleConnections 最大闲置连接数
<mapper>
用于引入映射文件。写法很多,常用的有3种:
- 通过映射文件的路径引入
<mappers>
<mapper resource="com/chy/mapper/StudentMapper.xml"/>
<mapper resource="com/chy/mapper/TeacherMapper.xml"/>
</mappers>
- 通过mapper接口类引入
<mappers>
<mapper class="com.chy.mapper.StudentMapper"/>
</mappers>
- 通过包名引入
<mappers>
<package name="com.chy.mapper"/>
</mappers>
这种最常用,可以一次性引入mapper包下所有的映射文件。
MyBatis 配置文件详解的更多相关文章
- ORM框架对比以及Mybatis配置文件详解
ORM框架对比以及Mybatis配置文件详解 0.数据库操作框架的历程 (1) JDBC JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句 ...
- 02.MyBatis配置文件详解
MyBatis入参考文档:http://mybatis.org/mybatis-3/zh/ 1.properties 属性 1.在MyBatis配置文件中引用属性文件 MyBatis ...
- mybatis配置文件详解
这是我看到的博文中最全的一篇了 参见:https://www.cnblogs.com/black-spike/p/7765732.html
- mybatis代码生成器配置文件详解
mybatis代码生成器配置文件详解 更多详见 http://generator.sturgeon.mopaas.com/index.html http://generator.sturgeon.mo ...
- MyBatis核心配置文件详解
------------------------siwuxie095 MyBatis 核心配置文件详解 1.核心 ...
- 2017.2.9 深入浅出MyBatis技术原理与实践-第八章 MyBatis-Spring(二)-----配置文件详解
深入浅出MyBatis技术原理与实践-第八章 MyBatis-Spring(二) ------配置文件详解 8.2 MyBatis-Spring应用 8.2.1 概述 本文主要讲述通过注解配置MyBa ...
- MyBatis 全局配置文件详解(七)
MyBatis 配置文件作用 MyBatis配置文件包含影响 MyBatis 框架正常使用的功能设置和属性信息.它的作用好比手机里的设置图标,点击这个图标就可以帮助我们查看手机的属性信息和设置功能.其 ...
- 【JAVAEE学习笔记】hibernate01:简介、搭建、配置文件详解、API详解和CRM练习:保存客户
今日学习:hibernate是什么 一.hibernate是什么 框架是什么: 1.框架是用来提高开发效率的 2.封装了好了一些功能.我们需要使用这些功能时,调用即可.不需要再手动实现. 3.所以框架 ...
- Mybatis配置详解
一.SqlSession的使用范围说明 1.SQLSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory, ...
随机推荐
- wordpress Error establishing a database connection问题
最近这场大雨,快把帝都给淹了,我也快被这不定向问题折磨疯了,本来把项目放在A服务器,nginx ,php7,mysql,然后换到了B服务器,环境一模一样,结果呢,传上去就出现了 哎,话说我的配置也没啥 ...
- SharePoint 获取服务器场管理员密码
前言 这还是很久以前发生的故事(你也可以说事故),公司新来的小朋友帮客户运维,然后,因为客户要改场管理员密码,这个很简单啊,我们有密码变更的文档.小朋友分分钟就帮客户把密码更新了,然后,就去干别的了. ...
- 【PAT甲级】1097 Deduplication on a Linked List (25 分)
题意: 输入一个地址和一个正整数N(<=100000),接着输入N行每行包括一个五位数的地址和一个结点的值以及下一个结点的地址.输出除去具有相同绝对值的结点的链表以及被除去的链表(由被除去的结点 ...
- selenium+python实现自动化登录
工作需要实现一个微博自动登录的操作,在网上差了一些资料,决定使用selenium+python实现 selenium 是一个web的自动化测试工具,主流一般配合java或者python使用,我这里使用 ...
- echart 重新加载
myechart2.clear(); myechart2.setOption(options[1]);
- python时间模块time,datetime
时间模块time.datetime 模块(module)是 Python 中非常重要的东西,你可以把它理解为 Python 的扩展工具.换言之,Python 默认情况下提供了一些可用的东西,但是这些默 ...
- C语言:从p所指字符串中找出ASCII码最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。-使字符串的前导*号不得多于n个,若多余n个,则删除多余的*号,
//fun函数:从p所指字符串中找出ASCII码最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动. #include <stdio.h> void fun( char * ...
- Linux - 软硬链接,hard link and symbolic link
- VBA 学习笔记 - 输入框
学习资料 https://www.yiibai.com/vba/vba_input_box.html 输入框 InputBox 函数说明 提示用户输入值.当输入值后,如果用户单击确定 按钮或按下键盘上 ...
- 基于SLAM的移动机器人硬件设备参数
1.移动机器人底盘 移动底盘有多大 长宽高:35*35*40cm 移动底盘有多重 17kg 底盘最大载重是多少 40kg 底盘最大速度是多少 1.2m/s 底盘的电池是多大 24V/7.8A 锂离子电 ...