Mybatis笔记(2)-SqlSession简介以及主配置文件

SqlSession简介

SqlSession对象是Mybatis中的一个主要接口,可以通过这个接口来执行命令,获取映射器示例和管理事务。

SqlSession提供了之间操作数据库的方法,如:session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101)。但一般不使用这些方法,而是通过配置Mapper(即dao接口)的映射文件,再通过SqlSession获取Mapper的代理对象。

SqlSession由SqlSessionFactory创建,SqlSessionFactory的openSession方法有一个重载形式:openSession(boolean autoCommit),autoCommit指定是否自动提交(即是否开启事务),默认是false,即开启事务。所以默认情况下执行update、delte和insert语句时需要提交事务,即执行SqlSession的commit()方法,否则将造成事务回滚。也可以通过openSession(true)来获取关闭事务的SqlSession。

另外,SqlSession 对象不是线程安全的,所以每个线程都应该有它自己的 SqlSession 对象,且每次执行完数据库操作后,应关闭SqlSession:session.close()

主配置文件

文件结构

主配置文件结构:(详细说明见官方文档:https://mybatis.org/mybatis-3/zh/configuration.html)

configuration(配置)

  • properties(属性)

  • settings(设置)

  • typeAliases(类型别名)

  • typeHandlers(类型处理器)

  • objectFactory(对象工厂)

  • plugins(插件)

  • environments(环境配置)

    • environment(环境变量)
      • transactionManager(事务管理器)
      • dataSource(数据源)
  • databaseIdProvider(数据库厂商标识)

  • mappers(映射器)

以下介绍几个常用标签。其他标签的具体使用见官方文档。

properties

该标签的作用是配置连接数据库的相关参数信息。可以通过<property>子标签配置,也可以使用resource属性引用外部配置文件,两种方式可以混合使用。在配置<dataSource>时,通过${paramName}的方式获取到配置的值

如快速入门中主配置文件可改为:

//...省略
<properties resource="jdbc.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>

//...省略

jdbc.properties:(该文件放在resource目录下

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC
username=root
password=admin

一般把属性信息都配置在properties文件中,不使用property标签配置

settings

<settings> 用来配置mybatis的一些全局变量,以开启延迟加载为例:

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

mybatis有很多全局变量,其他变量的详细介绍见:https://mybatis.org/mybatis-3/zh/configuration.html#settings

typeAliases

该标签的作用是为Java类指定一个缩写别名,就不用每次指定类时都使用其全限定名。

如:

type属性指定类的全限定名;alias属性指定别名

<typeAliases>
  <typeAlias alias="author" type="domain.blog.Author"/>
</typeAliases>

通过该配置,在任何使用 domain.blog.Autho 的地方,都可以用author代替,且不区分大小写。

也可以在<typeAliases> 标签中使用<package>标签指定一个包名,对该包下的所有类会使用 Bean 的首字母小写的非限定类名来作为它的别名。如domain.blog.Blog的别名为blog。这种方法更被推荐使用

例子:

<typeAliases>
  <package name="domain.blog"/>
</typeAliases>

environments

<environments>用于配置环境。可以配置多个数据库环境,但只能选择一种环境,通过default指定要使用的<environment> 的id每个 SqlSessionFactory 实例只能对应一种环境,如想要连接两个数据库,则需要两个SqlSessionFactory 。

<environments>通过<transactionManager> 来配置事务管理器。

以下来自官网:

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

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

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

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

<dataSource> 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。在<dataSource>通过type属性指定数据源类型,Mybatis提供了3种数据源类型:

  • UNPOOLED:每次请求数据库连接时打开一个连接,使用完时关闭连接。没有使用连接池的概念。适用那些对数据库连接可用性要求不高的简单应用程序。
  • POOLED:使用了连接池,避免了创建新的连接实例时所必需的初始化和认证时间。
  • JNDI:放置一个 JNDI 上下文的数据源引用。

示例:

<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>

mappers

该标签用于指定映射文件的位置,即告诉Mybatis要到哪里去找Mapper对应的映射文件

有多种配置方式:

  • 使用第一种方式时,是在resource目录下(类路径下)寻找映射文件。映射文件的目录结构要与其对应的Mapper的包结构一致,如org/mybatis/builder/UserMapper.xml对应org.mybatis.builder.UserMapper。**且要注意分隔符是 / 而不是 . **
<!-- 使用相对于类路径的资源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/UserMapper.xml"/>
</mappers>


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


<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>
posted @ 2020-09-18 14:12  bxxiao  阅读(1005)  评论(0)    收藏  举报