【狂神Mybatis笔记】配置解析

核心配置文件:mybatis-config.xml

Mybatis的配置文件包含了会影响Mybatis行为的设置和属性信息

环境配置(environments)

要求:学会使用配置多套运行环境

MyBatis可以适应多种环境。尽管可以配置多个环境,但是每个SqlSessionFactory只能选择一种环境。

 如果要切换环境,修改default的值即可

 transactionManager:事务管理器

在MyBatis中有两种类型的事务管理器(了解)

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

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

数据源:datesource

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

有三种内建的数据源类型

UNPOOLED:(没有连接池)

每次被请求时打开和关闭连接。虽然有点慢,但对于在数据库连接可用性方面没有太高要求的简单应用程序来说,是一个很好的选择。

不同的数据库在性能方面的表现也是不一样的,对于某些数据库来说,使用连接池并不重要

,这个配置就很适合这种情形。

UNPOOLED属性:

 POOLED:(默认)

这种数据源的实现利用池的概念将JDBC连接对象组织起来,避免了创建新的连接实例时所必需的

初始化和认证时间,这是一种使得并发web应用快速响应请求的流行处理方式。

除了上述提到UNPOOLED下的属性外,还有更多属性来配置POOLED的数据源

properties属性:

可以通过properties属性来实现引用配置文件

这些属性都是可外部配置且可动态替换的,既可以再典型的java属性文件中配置,也可通过properties元素的子元素来传递

编写一个配置文件:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?userSSL=true&userUnicode=true&characterEncoding=UTF-8
username=root
password=

在核心配置文件中引入:

 若冲突,优先使用外部配置文件

类型别名(typeAliases):

类型别名是为java类型设置一个短的名字,它只和xml配置有关,存在的意义仅在于用来减少完全限定名的冗余。

<typeAliases>
   <typeAlias type="包名.类名" alias="类名">
</typeAliases>
<typeAliases>
   <package="包名"/>
</typeAliases>

 

 在实体类比较少的时候,使用第一种;实体类比较多使用第二种;第一种可以自定义别名,第二种不能自定义别名。

但是扫描包的情况下可以在类的上面写注解起别名可以实现自定义别名:

 

设置settings

cacheEnabled(true|false)       全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存。

lazyLoadingEnabled(true|false)  延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。

logImpl:指定MyBatis所用日志的具体实现,未指定时将自动查找

SLF4J|LOG4J|LOG4J2|JDK_LOGGING|
COMMONS_LOGGING|
STDOUT_LOGGING|
NO_LOGGING

映射器mappers:

MapperRegistry:注册绑定Mapper文件

使用相对于类路径的资源引用

 使用class文件绑定注册:

注意: 使用class注册,接口和Mapper配置文件必须同名;接口和Mapper配置文件必须在同一个包下

使用package绑定注册:

注意:使用package注册绑定,和class注册注意事项相同。

推荐使用resource绑定 

作用域和声明周期:

生命周期和作用域是至关重要的,因为错误的使用会导致严重的并发问题。

● 一旦创建SqlSessionFactory,就不再需要它了。SqlSessionFactory为局部变量

●SqlSessionFactory:

可以理解为数据库连接池。

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

有很多方法可以做到,最简单的就是使用单例模式或者静态模式。

●SqlSession:

可以理解为连接到连接池的一个请求,需要开启和关闭,否则资源被占用。每个线程都应该有它自己的SqlSession实例。SqlSession实例不是线程安全的,因此是不能被共享的,所以它的最佳作用域是请求或方法作用域。

 每一个mapper,代表一个具体的业务

猜你喜欢

转载自blog.csdn.net/m0_52043808/article/details/124351043
今日推荐