zoukankan      html  css  js  c++  java
  • 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则是请求或方法作用域。

     

     

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 校门外的树
    Java实现 蓝桥杯VIP 算法训练 统计单词个数
    Java实现 蓝桥杯VIP 算法训练 统计单词个数
    Java实现 蓝桥杯VIP 算法训练 开心的金明
    Java实现 蓝桥杯VIP 算法训练 开心的金明
    Java实现 蓝桥杯 算法训练 纪念品分组
    Java实现 蓝桥杯 算法训练 纪念品分组
    Java实现 蓝桥杯VIP 算法训练 校门外的树
    Java实现 蓝桥杯VIP 算法训练 统计单词个数
    Java实现 蓝桥杯VIP 算法训练 开心的金明
  • 原文地址:https://www.cnblogs.com/Charles-H/p/Mybatis-04.html
Copyright © 2011-2022 走看看