老规矩,看着官方文档

首先,我们需要知道的是,在MyBatis 的xml配置文件中,这些影响 MyBatis 行为的属性之间的设置是有先后顺序的。配置的先后顺序依照properties, settings, typeAliases, typeHandlers, objectFactory, objectWrapperFactory, reflectorFactory, plugins, environments, databaseIdProvider, mappers进行排列。因为其中有部分是不常用的,这里只记录常用的几种,其他属性使用到了再添加吧。


1. properties

<properties>标签是在MyBatis配置文件中配置properties文件properties文件是一种属性文件,通过以key=value格式存储内容,Java中可以使用Properties类来读取这个文件。而在MyBatis配置文件中<properties>标签是通过引入properties文件来配置数据库连接信息。常用的properties文件配置数据库主要配置如下:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/*****?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=****

在MyBatis 的xml配置文件中,通过resource方式引入这个properties文件(如果这个properties文件在项目的resources目录下,则不需要全路径)。当然,<properties>标签内还有一个<property name="***" value="***"/>标签,这是也可以单独设置某个键值。简单的讲,就是可以在properties文件中设定某个键值,另外也可以在<properties>标签内加入一个键值;也可以同时在这两个地方设置同一个键值。

<properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>

虽然可以在properties文件和标签中同时设置,但是他们之间的优先级是不一样的。另外,根据官网我们可以知道也可以通过在 SqlSessionFactoryBuilder.build() 方法中传入属性值来进行设置。如果一个属性在不只一个地方进行了配置,那么,MyBatis 将先读取在 properties 元素体内指定的属性,再根据 properties 元素中的 resource 属性读取类路径下属性文件。最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。

已经有了上述方法来获得数据库连接信息,那么接下应该怎样去使用这些数据呢?———这些数据将会被用于配置MyBatis的environments属性。总结以下:

2. environments

MyBatis 可以配置成适应多种环境,比如开发和测试测试可以配置不同的环境;environments的配置包含若干个environment元素;通过default属性设置默认的环境,这里添加的参数为某一个environment的id。<environment>的配置由<transactionManager >dataSource 两个元素组成。transactionManager 是指事务管理器,在 MyBatis 中有两种类型的事务管理器(也就是 type=[JDBC|MANAGED];dataSource 是指数据源,有三种内建的数据源类型(也就是 type=[UNPOOLED|POOLED|JNDI]);

JDBC 和 MANAGED 区别:

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

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

如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

UNPOOLED|POOLED|JNDI的区别

UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。也就是不设置数据池

POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来

JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用

看似environment元素配置很繁琐,但是一般在使用中按如下方式配置就行了,其他需求参考官方文档即可。

<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>

这里property 元素就是用于配置数据库的连接信息,用到了properties元素中的driver、url、username、password值。通过value=${}的形式获取到这个值。

3. typeAliases

类型别名可为Java类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。比如我的User类,每次都在使用时写长长的一条包名。先来对比一下使用别名和不使用别名的区别吧。

<!--使用别名-->
<select id="getUserList" resultType="user">
select * from mybatis.user
</select>
<!--不使用别名-->
<select id="getUserList" resultType="com.th.pojo.User">
select * from mybatis.user
</select>

可以明显的对比说明别名确实很让代码更加简单。

有3种方式设置别名,第一可以通过typeAliases标签的typeAlias属性配置单个Java类型的别名。

<typeAliases>
<typeAlias alias="Author" type="domain.blog.Author"/>
</typeAliases>

第二种是利用typeAliasespackage 属性配置整个包下的所有Java类型的别名;通过配置整个包的别名,MyBatis 会在包名下面搜索需要的 Java Bean,会使用 Bean 的首字母小写的非限定类名来作为它的别名。当然前提条件是没有通过注解设置别名的情况下。

<typeAliases>
<package name="domain.blog"/>
</typeAliases>

第三种是通过给一个Java Bean添加一个注解@Alias("别名"),从而实现设置别名。这个注解是MyBatis的import org.apache.ibatis.type.Alias;切记不是其他包下的注解。需要注意的是,使用了注解的方式,那么所有使用了别名的地方都要使用这个注解设置的别名。

至于一些为常见的 Java 类型内建的类型别名,可以通过官方文档进行查询。

4. settings

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。但是现在我们并不需掌握太多。着重记住以下几条就好。



5. mappers

mapper用于SQL 映射。对于mapper我们早就不陌生了,在入门的时候我们就遇到了。MyBatis 的配置文件,也就是我们说的mybatis-config.xml文件就相当于整个MyBatis项目的总管家。当需要需要进行查询的时候首先是调用Dao层的接口方法,而接口中的方法只是定义,而没有实际操作;真正的SQL语句是在XXXMapper.xml文件中。很显然,我们需要把这个接口跟XXXMapper.xml对应起来。这时你可能会觉得这不是通过XXXMapper.xml文件的命名空间进行确定的嘛。这也没错,通过命名空间与这个接口绑定了,通过id属性与接口中的方法进行绑定。而配置文件的<mappers>标签,就是讲所有的XXXMapper.xml文件进行注册,使得所有XXXMapper.xml文件都具有与接口进行绑定的属性,而这些配置会告诉 MyBatis 去哪里找映射文件。只有这个总管家“备案”了,这个XXXMapper.xml文件才能合法正常地被使用。mappers地配置有以下4种情况。其中使用相对于类路径的资源引用和将包内的映射器接口实现全部注册为映射器的方式使用较多。

  1. 使用相对于类路径的资源引用
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
</mappers>

这种方式就是单个的注册映射文件,通过项目下的全包名方式找打映射文件,注意包与下级包之间使用/分开而不是.

  1. 将包内的映射器接口实现全部注册为映射器
<mappers>
<package name="org.mybatis.builder"/>
</mappers>

这种方式注册映射器的形式typeAliases的package的形式是一样的,都是使得整个包下所有的XXXMapper.xml自动注册。

  1. 使用映射器接口实现类的完全限定类名
<mappers>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
  1. 使用完全限定资源定位符(URL)
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>

Mybatis的xml配置(mybatis-config.xml)精简笔记的更多相关文章

  1. MyBatis学习(一)、MyBatis简介与配置MyBatis+Spring+MySql

    一.MyBatis简介与配置MyBatis+Spring+MySql 1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的J ...

  2. MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql

    目录(?)[-] 一MyBatis简介与配置MyBatisSpringMySql MyBatis简介 MyBatisSpringMySql简单配置 搭建Spring环境 建立MySql数据库 搭建My ...

  3. MyBatis简介与配置MyBatis+Spring+MySql

    MyBatis学习 之 一.MyBatis简介与配置MyBatis+Spring+MySql MyBatis学习 之 二.SQL语句映射文件(1)resultMap MyBatis学习 之 二.SQL ...

  4. MyBatis(2):config.xml文件

    前言 前一篇文章,讲了MyBatis入门,讲到了MyBatis有两个基本的配置文件,一个用来配置环境信息,一个用来写SQL语句.前者我把它命名为config.xml,config.xml的内容是: 1 ...

  5. 使用 XML 配置 MyBatis

    构建 SqlSessionFactory 最常见的方式是基于 XML 配置(的构造方式).下面的 mybatis-config.xml 展示了一个 典型的 MyBatis 配置文件的样子: XML C ...

  6. 02_MyBatis项目结构,所需jar包,ehcache.xml配置,log4j.properties,sqlMapConfig.xml配置,SqlMapGenerator.xml配置

     项目结构(所需jar包,配置文件) sqlMapConfig.xml的配置内容如下: <?xmlversion="1.0"encoding="UTF-8&qu ...

  7. SpringMVC、SpringMVC XML配置(纯XML方式)

    1.引入SrpingMVC所使用的Java包: cglib-nodep-2.1_3.jar.commons-logging.jar.spring-aspects-4.1.7.RELEASE.jar.s ...

  8. 一、MyBatis简介与配置MyBatis+Spring+MySql

    //备注:该博客引自:http://limingnihao.iteye.com/blog/106076 1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架 ...

  9. mybatis 学习二 MyBatis简介与配置MyBatis+Spring+MySql

    1.2.2建立MySql数据库 在C:\Program Files\MySQL\MySQL Server 5.7\bin下面: 首先连接MySQL:        mysql  -u root -p ...

  10. web.xml配置DispatcherServlet (***-servlert.xml)

    1. org.springframework.web.servlet.DispatcherServlet 所在jar包: <dependency> <groupId>org.s ...

随机推荐

  1. suse 12 二进制部署 Kubernetets 1.19.7 - 番外篇 - 增加node节点

    文章目录 0.前景提要 1.准备node节点环境 1.0.修改配置脚本参数 1.1.配置免密 1.2.添加hosts解析 1.3.修改主机名 1.4.更新PATH变量 1.5.安装依赖包 1.6.关闭 ...

  2. 攻防世界Web_ics_05

    题目: 题目描述:其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统 题目场景:   1.进入云平台设备中心界面,查看以下源码发现?page= ,(点下云平台设备维护中心url里也能出?page ...

  3. python https 无法访问 SSLError("Can\'t connect to HTTPS URL because the SSL module is not available

    1,需要检查python 安装的时候是否支持 https 进入python 环境,import ssl 如果正常导入就可以使用https,不能导入就需要进入下一步. 2,查看系统是否安装了openss ...

  4. Dashboard究竟是什么,它在数据展示上的优势何在?

    ​相信很多人在做数据分析工作的时候都遇到这种情况,辛辛苦苦做出来的数据报表老板看了嫌弃不够直观.生动,客户看了嫌弃不够高大上.这个时候不妨尝试一下使用Dashboard来展示报表数据,可能有些人对Da ...

  5. 案例八:shell自动化管理账本脚本

    该脚本目的帮助管理员创建账号.删除账号.锁定账号.解锁账号. #!/bin/bash #filename: #author: #date:2018-6-6 echo "用户管理程序" ...

  6. 【C# 线程】优先级反转与优先级继承

    什么是优先级反转(翻转)优先级反转,是指在使用信号量时,可能会出现的这样一种不合理的现象,即:    高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度.但其他中等优先级的任务却能抢到CP ...

  7. JAVA只要掌握内部类,多继承和单继承都不是问题

    摘要:如果实现java的多继承,其实很简单,关键是对于内部类的特征的掌握,内部类可以继承一个与外部类无关的类,保证了内部类天然独立性,根据这个特性从而实现一个类可以继承多个类的效果. 本文分享自华为云 ...

  8. Java -- List与数组转换

    list转数组 使用for循环 使用list.toArray(new String[]),不可以强制转换list.toArray(),因为数组在jvm是一个object表示的,是一个对象 数组转lis ...

  9. ScrollView垂直滚动和HrizontalScrollView水平滚动

    当我们在写一个页面,内容过多时我们需要滚动页面来查看,但是注意ScrollView下只能有一个元素,所以要把主页面改下,这样就只有一个LinearLayout元素: 1 <ScrollView ...

  10. WARN node unsupported "node@v6.11.2" is ......(windows系统更新node版本)

    问题: 使用npm下载文件时报错:WARN node unsupported "node@v6.11.2" is incompatible with electron@^7.1.9 ...