Mybatis-04

Mybatis

  学会了使用Mybatis来调用数据库后,我们来了解并使用Mybatis的配置

  首先,先展示Mybatis的主要配置属性

configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)

环境配置

  虽然在展示Mybatis的配置时,只有一个环境,实则不然,其实Mybatis可以配置多套环境。不过Mybatis虽然可以配置多套环境,但是每个SqlSessionFactory 实例只能调用一个环境。

  事务管理器:一般事务管理器只有两个可以用:JDBC或者MANAGED (JDBC是使用JDBC管理事务机制,而MANAGED是使用web容器管理事务)

  数据源:一般数据源分三种:POOLED/UNPOOLED/JNDI (默认是POOLED[使用连接池的数据源]、JNDI[使用JNDI实现的数据源])

属性Properties

  我们可以通过properties属性来引用配置文件,这样我们就可以实现动态替换数据,而不是在配置文件里重复写。

  例子:db.properties

我们可以自己写一个数据库的配置文件,再调入到配置文件中。

  代码演示:

db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///customs?useSSL=true&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
username=root
password=1234

配置文件

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

  从上面的代码可以看出,我们在写完数据库的配置文件后,可以在配置文件中,调用properties的属性引用外面的数据库配置文件。

别名

  在配置文件中,有个叫typeAliases(类型别名)的属性,我们可以使用这个来解决一些名字比较长的类名等。

  例子:

    <!-- 使用别名后,我们可以在核心配置和SQL语句的参数类型中可以使用,第一个是比较详细的别名,第二个则是MyBatis 会在包名下面搜索需要的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 -->
    <typeAliases>
        <typeAlias type="com.charles.pojo.UserInfo" alias="User"/>
        <package name="com.charles.pojo"/>
    </typeAliases>

一般情况下:

在实体类比较少的时候,使用第一种方式

实体类多的时候使用第二种方式

设置

  用来改变Mybatis的运行行为

完整的setting配置

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

映射器

  所谓的映射器就是我们配置文件中的mapper属性,它是用来绑定我们的SQL语句文件的。

  他有两个方法进行绑定,一个是class,另一个是resource。

生命周期和作用域

  生命周期和作用域是最为重要的,如果错误使用,则会导致严重的并发问题。

生命周期

  首先我们先用流程图来了解生命周期

  SqlSessionFactoryBuilder在创建SqlSessionFactory后就结束了。

  而SqlSessionFactory则会一直存在于运行期间,可以想象成一个数据库连接池,它起很大的作用。

  SqlSession 可以理解为一个连接池的请求,我们从测试类中就可以看出,我们利用它来获得业务。[调用后一定要关闭,防止资源被占用]

作用域

  这里面SqlSessionFactory的作用域是一个应用作用域,SqlSession则是请求或方法作用域。

 

 

原文地址:https://www.cnblogs.com/Charles-H/p/Mybatis-04.html