MyBatis 配置
环境配置(environments)
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
事务管理器 (transctionManager)
MyBatis中事务管理器有JDBC和MANAGED。
JDBC依赖从数据源获得的连接来管理事务作用域。
数据源(dataSource)
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。共有三种类型 [ UNPOOLED | POOLED | JNDI ] ,
-
UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。没有连接池,所以,用完之后不会被回收,下次使用重新创建。
-
POOLED– 和 UNPOOLED 相对,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。
-
JNDI– 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用。
MyBatis 默认的事务管理器是 JDBC,数据源是 POOLED。
属性(properties)
这些属性都是外部配置且可动态替换的,可以在典型的 Java 属性文件中配置,也可以在 properties 元素的子元素来传递。
编写一个配置文件db.properties:
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?userSSL=true&userUnicode=true&characterEncoding=UTF-8
username = root
password = 123456
此时可以使用
<!-- 引用外部配置文件 -->
<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>
替换
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?userSSL=true&userUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
如果一个属性既在 properties 中的外部资源被引用,又在 property 中声明,外部资源文件的优先级更高。
<properties resource="db.properties" >
<!-- 此时的密码仍是db.properties中的123456 -->
<property name="password" value="123321"/>
</properties>
别名( typeAliases )
1. 给指定POJO类取别名
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如:
在 mybatis-config.xml 中添加如下配置:
<typeAliases>
<typeAlias alias="user" type="com.klaus.pojo.User" />
</typeAliases>
在 UserMapper.xml 中就可以使用user
代替以前的com.klaus.pojo.User
<select id="getUser" resultType="user">
select *
from mybatis.user;
</select>
2. 给包中所有POJO类取别名
<typeAliases>
<package name="com.klaus.pojo"/>
</typeAliases>
这样,在没有注解的情况下,会使用 Bean的首字母小写的非限定类名来作为它的别名;
即:扫描 pojo 类的包,它的默认别名就是类的类名,首字母小写。
**注解:**使用@Alias()
可以自定义别名。注解只能在扫描包的情况下使用。
设置(settings)
settings 是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
设置名 | 描述 | 有效值 | 默认值 |
---|---|---|---|
logImpl 日志实现 | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | 未设置 |
映射器(Mapper)
告诉 MyBatis 到哪里去找映射文件。
方法一(xml):
<mappers>
<mapper resource="com/klaus/dao/UserMapper.xml"/>
</mappers>
方法二(class):
要求:
- 接口和 Mapper 配置文件必须同名
- 接口和 Mapper 配置文件必须在同一个包下
<mappers>
<mapper class="com.klaus.dao.UserMapper"/>
</mappers>
方法三(包扫描):
要求:
- 接口和 Mapper 配置文件必须同名
- 接口和 Mapper 配置文件必须在同一个包下
<mappers>
<package name="com.klaus.dao"/>
</mappers>
生命周期
SqlSessionFactoryBuilder
- 一旦创建了 SqlSessionFactory,就不再需要它了
- 局部变量
SqlSessionFactory
- ~数据库连接池
- SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。
- 单例模式
SqlSession
-
连接到连接池的请求
-
每个线程都应该有它自己的 SqlSession 实例
-
用完之后赶紧关闭,否则资源被占用。
本文来自博客园,作者:klaus08,转载请注明原文链接:https://www.cnblogs.com/klaus08/p/15104976.html