Mybatis 的配置文件,有两种:

一、Mybatis 全局配置文件(主配置文件):

起名:不固定,但一般起名要见名知意 ——> mybatis-config.xml

路径:classpath 的根路径

配置内容:

0、全局的配置信息;

1、属性配置信息;

2、插件配置信息;

3、环境配置信息(连接池 + 事务);

4、关联映射文件;

二、Mybatis 映射文件(Mapper 文件)

起名:不固定,但一般也要见名知意 ——> XxxMapper.xml,是哪一个对象的映射文件,如 StudentMapper.xml;

配置内容:

0、编写增删改查的 SQL,把 SQL 存放到配置文件中的 insert | update | delete | select 元素中去;

1、结果集映射:解决表中的列和对象中属性不匹配的问题;

2、缓存配置;

从 XML 中构建 SqlSessionFactory

MyBatis 的官方文档有说到:

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。

而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。

接下来,在项目的根路径(resources 目录)下新建 mybatis-config.xml 文件。

XML 需要导入 dtd 约束,约束指向网络路径:

在电脑联网的情况下,会自动缓存路径文件到本地,提供提示功能;

不联网的情况下,需要在 XML Catalog 中配置 dtd 文件位置;

从官方文档中拷贝 dtd 约束文件:

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

mybatis-config.xml 配置文件是对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(dataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。

环境配置(environments):

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;

事务管理器(transactionManager):

在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):

JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。

MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期。

事务管理器(transactionManager)中的 type 如果使用的是 JDBC,其实底层用的是 JdbcTransactionFactory 这个类(JDBC 事务工厂)。

通过 Configuration 这个类可以看出:

从配置文件中可以看到,这两种事务管理器类型都不需要设置任何属性。

因为它们其实是类型别名,换句话说,我们可以使用 TransactionFactory 接口的实现类的完全限定名或类型别名代替它们。(JdbcTransactionFactory 实现了TransactionFactory 接口)

数据源(dataSource):

dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象。

有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):

UNPOOLED– 这个数据源没有使用连接池,实现只是每次被请求时打开和关闭连接。

POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。

JNDI – 我们不是很熟悉,一般是在 EJB 环境或这类容器中使用的。

连接池还需要配置子元素,property 属性,如下图:

<!-- 数据源 -->
<dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis-demo"/><property name="username" value="root"/><property name="password" value="123456"/>
</dataSource>

为什么要配置 driver、url 等这些属性呢?

数据源中使用的类型 type 是 "POOLED",从 Configuration 类中,我们知道,它是 PooledDataSourceFactory.class 这个类的别名。

它里边需要 new 一个连接池对象:

public class PooledDataSourceFactory extends UnpooledDataSourceFactory {public PooledDataSourceFactory() {this.dataSource = new PooledDataSource();}}

查看 PooledDataSource 连接池这个类,发现里边有 setDriver、setUrl 等方法。

需要注意的是:后面使用 Spring 框架的时候,事务管理器和连接池都是交给 Spring 来管理的,所以在 Mybatis 中就不需要配置这两个东西了。

配好连接池后,接下来,我们需要配置映射器 Mapper。

Mapper.xml 文件是用来写 SQL 语句的,我们需要告诉 Mybatis 到哪里去找到这些语句。

所以,我们需要在 Mybatis 主配置文件中配置 <mappers></mappers> 标签:

<!-- 关联 Mapper 映射文件 -->
<mappers><mapper resource="com/mxz/mybatis/mapper/StudentMapper.xml"/>
</mappers>

配置前,我们需要在 Sources Root 目录下创建 mapper 包,并新建 StudentMapper.xml 文件。那映射文件该怎么写呢?

首先,跟主配置文件一样,我们需要先引入 dtd 约束文件。

其次,后面所写的所有 SQL 语句都需要放到 <mapper></mapper> 标签下,并且用对应的标签括起来,如 <select></select> 等。

select 元素:专门用做写查询的 SQL,类似的 insert、update、delete 元素分别表示做插入、更新、删除的 SQL(其实这些元素标签写哪一个并不影响结果,影响结果的只是通过 namespace + id 来索引到的所写的 SQL 语句,但为了专业,还是建议写成对应的标签)。

id 属性:做唯一标识,用来表示某一条 SQL 语句,id 属性和 mapper 的namespace 唯一的表示了应用中的某一条 SQL 语句。

parameterType 属性:表示执行该 SQL 语句需要的参数的类型,建议不写, MyBatis 可以通过类型处理器(TypeHandler) 推断出来。

resultType 属性:把结果集中的每一行数据封装成什么类型的对象。

到此,Mybatis 的两种配置文件就介绍完了。

tips:查看官方文档是学习一门新语言最有效的方法。

系列预告:Mybatis 系列 3:第一个测试用例

关注「阿泽学长」,解锁更多干货:

Destoon数据库配置文件在哪_Mybatis 系列 2:Mybatis 的两种配置文件相关推荐

  1. springboot 的两种配置文件语法||配置文件占位符||@Value 读取配置文件及验证处理

    [掌握]springboot 的两种配置文件语法 导入配置文件自动提示的包 创建 Student 类 创建修改 application.properties 配置文件占位符 ${random.int} ...

  2. MVCC如何实现数据库读已提交和可重复读这两种隔离级别?

    文章目录 隐藏列 undo log ReadView 读已提交和可重复读的实现 我们都知道Mysql有四种事务隔离级别: 读未提交 读已提交 可重复读 串行化 这四个隔离级别的特点就不多赘述了,这次主 ...

  3. Android保存配置文件内容到本地(txt、xml两种)

    在做项目的时候难免需要保存一下配置文件,我们经常使用的就是SharedPreferences,但是当我们清除掉缓存或者卸载后重新安装这些配置文件内容就不存在了,当我们想卸载后重新安装这些配置文件还在, ...

  4. 【SpringBoot零基础案例05】【IEDA 2021.1】若SpringBoot项目两种配置文件同时存在,哪种文件配置起作用?

    新建模块,并创建IndexController类 package com.zx.springboot.web;import org.springframework.stereotype.Control ...

  5. 11-【数据库】定义表结构的时间字段的两种方式

    1.方式一:定义时间字段默认值为NULL 若定义表结构的时间字段(eg:created_on.updated_on)是NULL.那在代码中连接数据库时要增加如下配置(红框中的配置):   来使得: 通 ...

  6. Kafka两种配置文件方式

    1.yml配置文件(简单配置) spring:kafka:bootstrap-servers: ip:端口consumer:group-id: group-testenable-auto-commit ...

  7. [013操作系统原理系列] | SELinux关闭的两种方法

    背景 SELinux是Security-Enhanced Linux的简称,一种内核强制访问控制(MAC)安全系统,目前SELinux已经集成到了Linux2.6内核的主线和大多数Linux发行版上. ...

  8. android数据库侵入,Android中实现侵入式状态栏的两种方式

    最近对"爸比讲故事"Android版本进行代码重构的时候,对之前版本的大部分界面的头部侵入式效果,作了一个总结和梳理,在期间查阅了thinkcool的博客和结合亲身实践,总结了2种 ...

  9. MyBatis架构设计及源代码分析系列(一):MyBatis架构

    一.概述 MyBatis并不是一个完整的ORM框架,其官方首页是这么介绍自己 The MyBatis data mapper framework makes it easier to use a re ...

最新文章

  1. 基于YOLO的目标检测界面化部署实现(支持yolov1-yolov5、yolop、yolox)
  2. URL解析-URLComponents
  3. 【Python】 linux中python命令的命令行参数
  4. VTK:可视化之FlatShading
  5. linux命令 重定向%3e,linux输出信息调试信息重定向
  6. i春秋DMZ大型靶场实验(四)Hash基础
  7. 数组c语言与指针,浅析C语言数组与指针
  8. 为什么很多公司只给博士发安家费,却不给研究生和本科生发?
  9. mysql数据库导入操作_mysql 导入数据库 命令操作
  10. 蓝懿iOS培训日志5 正反向传值及学习心得
  11. WordPress Exploit Scanner插件安全绕过漏洞
  12. VAssistX + VS2017 常用快捷键
  13. java毕设查重,已经毕业的给毕设查重的人一点建议
  14. 朱兰的质量观(转载)
  15. python图像分割算法_SLIC算法分割超像素原理及Python实现
  16. poscms统计数据调用
  17. 看图说话!这个 AI 商品识别系统开源了!
  18. 长沙计算机学院王进,王进教授
  19. 100个Python实战练手项目(附源码+素材),学习必备
  20. backtrader回测框架实例

热门文章

  1. git提交异常 fatal: LF would be replaced by..
  2. SpringBoot-Web原生组件的注入
  3. 常用web服务列表(三)
  4. jQuery学习笔记之jQuery的DOM操作
  5. 《深度学习》图像超分初识
  6. 漫步最优化二十七——二次插值法
  7. spring-boot中使用druid连接池
  8. jsoup html转义处理,jsoup解析网页出现转义符问题
  9. Unity5 Sprite 图集打包 AssetBundle 更新探索
  10. C++学习心得总结【20181128】