和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

MyBatis 配置

环境配置(environments)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。

不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。


事务管理器 (transctionManager)

MyBatis中事务管理器有JDBCMANAGED

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&amp;userUnicode=true&amp;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):

要求:

  1. 接口和 Mapper 配置文件必须同名
  2. 接口和 Mapper 配置文件必须在同一个包下
<mappers>
    <mapper class="com.klaus.dao.UserMapper"/>
</mappers>

方法三(包扫描):

要求:

  1. 接口和 Mapper 配置文件必须同名
  2. 接口和 Mapper 配置文件必须在同一个包下
<mappers>
    <package name="com.klaus.dao"/>
</mappers>

生命周期

SqlSessionFactoryBuilder

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

SqlSessionFactory

  • ~数据库连接池
  • SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。
  • 单例模式

SqlSession

  • 连接到连接池的请求

  • 每个线程都应该有它自己的 SqlSession 实例

  • 用完之后赶紧关闭,否则资源被占用。

posted @ 2021-07-25 19:11  klaus08  阅读(37)  评论(0编辑  收藏  举报