configuration 配置文件解析

对于核心配置文件的讲解主要是参考Mybatis3
首先是我们看到的configuration(配置),因为这些都是写在xml中的所以这些标签的顺序是固定的。红框内的暂时不需要了解。
在这里插入图片描述

properties属性

这个属性我们是在数据源进行连接时用到了,其实我们还可以把它的一些相关信息添加到资源文件中properties。然后我们通过properties标签来进行引入。在这里插入图片描述

我们在mybatis-config.xml中进行引入,注意他的位置,他的位置是第一个。

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

引入后我们的使用就直接使用${}来写。
在这里插入图片描述
其实还可以在Properties中添加标签,我们可以添加相同的标签,也可以添加不同的标签。
如果添加相同的标签,他的优先级会小于引入的资源当中的。

<properties resource="dp.properties">
        <property name="password"   value="111111"/>
    </properties>

引用官方的话

如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:

首先读取在 properties 元素体内指定的属性。
然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。

从 MyBatis 3.4.2 开始,你可以为占位符指定一个默认值。
实例

<dataSource type="POOLED">
  <!-- ... -->
  <property name="username" value="${username:ut_user}"/> <!-- 如果属性 'username' 没有被配置,'username' 属性的值将为 'ut_user' -->
</dataSource>

我们再使用之前需要开启这个默认的属性

<properties resource="org/mybatis/example/config.properties">
  <!-- ... -->
  <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- 启用默认值特性 -->
</properties>

一开始没弄动这是怎末弄得,查看了一些博客也没是啥用都是直接粘贴官网的。我们需要先在properties配置中删除所需要分配默认值的属性。在这里插入图片描述
然后在按照官方的方式走。
在这里插入图片描述
下面他又说了一种特殊的情况

如果你在属性名中使用了 ":" 字符(如:db:username),
或者在 SQL 映射中使用了 OGNL 表达式的三元运算符(如: ${tableName != null ? tableName : 'global_constants'}),
就需要设置特定的属性来修改分隔属性名和默认值的字符

遇到这种情况我们需要单独在开启这个特性

<properties resource="org/mybatis/example/config.properties">
  <!-- ... -->
  <property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/> <!-- 修改默认值的分隔符 -->
</properties>

实例代码

<dataSource type="POOLED">
  <!-- ... -->
  <property name="username" value="${db:username?:ut_user}"/>
</dataSource>

setting设置

他的主要作用是
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值

setting中的设置有很多我们这次只需要了解三个就够了

cacheEnabled	全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。	true | false	true
lazyLoadingEnabled	延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。	true | false	false
logImpl	指定 MyBatis 所用日志的具体实现,未指定时将自动查找。	SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING	未设置

官方没有给出log的配置自己可以根据情况进行配置

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  </settings>

typeAliases类型别名

类型别名单独设置,type设置别名的类型,alias设置他的别名。
这种情况下适用于当前包下面类比较少的情况下。

 <typeAliases>
        <typeAlias type="pojo.User" alias="uu"/>
    </typeAliases>

在这里插入图片描述
给中包中类起别名,name直接写包名就行。我们在使用的时候直接使用这个类的首字母缩写后的名字就行。

<typeAliases>
        <package name="pojo"/>
    </typeAliases>

在这里插入图片描述
这是 java自己建好的我们只需要拿他的别名来用就行。

下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。

别名	映射的类型
_byte	byte
_long	long
_short	short
_int	int
_integer	int
_double	double
_float	float
_boolean	boolean
string	String
byte	Byte
long	Long
short	Short
int	Integer
integer	Integer
double	Double
float	Float
boolean	Boolean
date	Date
decimal	BigDecimal
bigdecimal	BigDecimal
object	Object
map	Map
hashmap	HashMap
list	List
arraylist	ArrayList
collection	Collection
iterator	Iterator

environments环境配置

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
我们可能设置多个环境,但是最后运行的只有一个那就是默认的。根据id值进行判断的。
在这里插入图片描述
transactionManage事务管理
我们现在先作为一个了解,我们只需要知道他有两个类型就行。等学完Spring之后在仔细了解。

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

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

MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,
而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,
 因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为

dataSource数据源

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

大多数 MyBatis 应用程序会按示例中的例子来配置数据源。虽然数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。
有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):

同样我们只知道他有三种类型,每种类型是干什么的。具体的配置情况参考官网。

  1. UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。
  2. POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。
  3. JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。

mapper映射器

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。

官方给了四种类型,我们学习三种相对比较好用的。
使用路径来来引用,你的资源不论在那只要路径对就能引用。(推荐使用)

<!-- 使用相对于类路径的资源引用 -->
<mappers>
 <mapper resource="dao/UserMapper.xml"/>
</mappers>

使用接口映射,这里需要注意的是接口和他的Mapper配置文件名相同且在统一个包下。
在这里插入图片描述

<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="dao.UserMapper"/>
</mappers>

使用包内的映射器接口,这种方法同样需要注意接口和他的Mapper配置文件名相同且在统一个包下。

<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="dao"/>
</mappers>

生命周期和作用域

理解我们之前讨论过的不同作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题

SqlSessionFactoryBuilder
这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量

SqlSessionFactory
SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。因此 SqlSessionFactory 的最佳作用域是应用作用域。最简单的就是使用单例模式或者静态单例模式。

SqlSession
每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域

try (SqlSession session = sqlSessionFactory.openSession()) {
  // 你的应用逻辑代码
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值