文章目录
4、配置解析
4.1、核心配置文件(mybatis-config.xml)
- MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。
4.2、属性(properties)
-
在传统的JDBC中,我们通过流读取db.properties的文件,获取驱动、url、username、password。
-
创建db.properties文件
-
driver="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8"" username="root" password="123456"
-
-
在mybatis-config.xml文件中添加子标签
- 在添加标签时,xml存在的注意事项:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 自闭和标签--> <properties resource="db.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <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> <!-- 核心配置文件需要注册Mapeer--> <mappers> <mapper resource="zhang/Dao/UserMapper.xml"/> </mappers> </configuration>
- 注:在xml中通过properties标签绑定数据源,可以配置多个数据源。
4.3、MyBatis设置(settings)
-
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。
-
当中主要设置:(关于其他设置自行查看MyBatis官方参考文档)
设置名 | 描述 | 有效值 | 默认值 |
---|---|---|---|
cacheEnabled(缓存开启) | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true |false | true |
lazyLoadingEnabled(懒加载) | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 | true|false | true |
logImpl(日志打印) | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找 | SLF4J |LOG4J |JDK_LOGGING | 未设置 |
思考:什么是懒加载?为什么要加日志(loj4)?
4.4、类型别名(typeAliases)
-
作用:类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写
-
-
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean(别名默认以类名小写书写)。
4.5、环境配置(environments)
-
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。
-
注意事项:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
-
每个数据库对应一个 SqlSessionFactory 实例>
-
注意一些关键点:
-
默认使用的环境 ID(比如:default=“development”)。
-
每个 environment 元素定义的环境 ID(比如:id=“development”)。
-
事务管理器的配置(比如:type=“JDBC”)。
-
数据源的配置(比如:type=“POOLED”)。
默认环境和环境 ID 顾名思义。 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。
-
-
事务管理器(transactionManager)
- MyBatis 中有两种类型的事务管理器(也就是 type=“[JDBC|MANAGED]”):
- JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
- MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。
-
数据源(dataSource)
-
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
-
大多数 MyBatis 应用程序会按示例中的例子来配置数据源。虽然数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。
-
有三种内建的数据源类型(也就是 type=“[UNPOOLED|POOLED|JNDI]”)–自行查询官网。
-
4.6、映射器(mappers)
-
方式一: 使用相对于类路径的资源引用(推荐使用)
-
<mappers> <mapper resource="zhang/Dao/UserMapper.xml"/> </mappers>
-
-
方式二:使用映射器接口实现类的完全限定类名
-
<mappers> <mapper class="xiaoqi.dao.UserMapper"/> </mappers>
-
接口和mapper配置文件必须同名
-
接口和mappper配置文件必须在同一个包下
-
-
方式三:使用包名进行注册绑定
-
<mappers> <package name="xiaoqi.dao"/> </mappers>
-
接口和mapper配置文件必须同名
-
接口和mappper配置文件必须在同一个包下
-
4.7、生命周期和作用域
-
生命周期和作用域是至关重要的,,因为错误的使用会导致非常严重的并发问题
-
SqlSessionFactoryBulider:
- 一旦创建SqlSessionFactory,就不需要它了
- 局部变量
-
SqlSessionFactory
- 可以想象为:数据库连接池
- 一旦创建就一直存在,没有任何理由丢弃它或创建新的实例
- 因为SqlSessionFactory的最佳作用域是应用作用域
- 最简单的就是使用单例模式或者静态单例模式
-
SqlSeesion
- 每个线程都应该有自己的SqlSession实例;连接到连接池的一个请求
- 需要开始和关闭
- SqlSession线程是不安全的,所以不能被共享,最佳的作用域是放到一个方法里,用完就关闭,否则资源被占用