zoukankan      html  css  js  c++  java
  • MyBatis

    1、SqlMapConfig.xml 配置文件的内容和配置顺序

    properties(读取配置文件):定义配置,配置的属性可以在整个配置文件中其他位置进行引用;settings(全局配置参数):用于指定MyBatis的一些全局配置属性,这些属性非常重要,它们会改变MyBatis的运行时行为;typeAliases(类型别名):用于配置多个数据源,每个数据源分为数据库源和事务的配置;typeHandlers(类型处理器):定义类型处理,也就是定义java类型与数据库中的数据类型之间的转换关系objectFactory(对象工厂):
    ⑥ plugins(插件):Mybatis的插件,插件可以修改Mybatis内部的运行规则environments(环境集合属性对象,与Spring框架整合后Say Good Bye):用于配置多个数据源,每个数据源分为数据库源和事务的配置;
      1、environment(环境子属性对象)
      2、transactionManager(事务管理)
      3、dataSource(数据源)
    ⑧ mappers(配置映射器位置):配置引入映射器的方法。

    2、properties属性

    作用将数据连接单独配置在 db.properties 中,只需要在 SqlMapConfig.xml 中加载 db.properties 的属性值,在SqlMapConfig.xml 中就不需要对数据库连接参数进行硬编码。

    数据库连接参数只配置在 db.properties 中,方便对参数进行统一管理,其它 xml 可以引用该 db.properties。

    1)db.properties 的内容

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/games_db?useUnicode=true&characterEncoding=UTF-8&useSSL=true
    jdbc.username=root
    jdbc.password=123456

    2)在 SqlMapConfig.xml 中加载 db.properties 

    <!-- 引入外部配置文件 -->
    <properties resource="db.properties"></properties>
    
    <!-- 配置mybatis运行环境 ; 在集成Spring是不用 -->
    <environments default="development">
        <environment id="development">
            <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
            <transactionManager type="JDBC" />
            <!-- 使用连接池连接数据库 - mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
            <!-- POOLED 表示支持JDBC数据源连接池 ; UNPOOLED 表示不支持数据源连接池 ; JNDI 表示支持外部数据源连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    
    <!--配置映射器的位置 -->
    <mappers>
        <!-- 单个配置 -->
        <!-- <mapper resource="com/sikiedu/mapper/UserMapper.xml" /> -->
        <!-- <mapper url="file:\D:JavaWorkSpaceJavaEE_SSM_Testssm_mybatissrccomsikiedumapperUserMapper.xml" /> -->
        <!-- <mapper class="com.sikiedu.mapper.UserMapper" /> -->
        <!-- 多配置-以包的形式;推荐使用 -->
        <package name="com.sikiedu.mapper" />
    </mappers>

    3)properties特性

     - 注意:

    在properties元素体内定义的属性优先读取。
    然后读取properties元素中resource或url加载的属性,它会覆盖已读取的同名属性。
    最后读取parameterType传递的属性,它会覆盖已读取的同名属性

     - 建议:

    不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。
    在properties文件中定义属性名要有一定的特殊性,如xxxx.xxxx(jdbc.driver)

    3、settings - 全局参数配置

    mybatis框架运行时可以调整一些运行参数。比如,开启二级缓存,开启延迟加载等等。全局参数会影响mybatis的运行行为。

     1 <!-- 参数设置 -->
     2 <settings>
     3 
     4     <!-- 这个配置使全局的映射器启用或禁用缓存 -->
     5     <setting name="cacheEnabled" value="true" />
     6     
     7     <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 -->
     8     <setting name="lazyLoadingEnabled" value="true" />
     9     
    10     <!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载 -->
    11     <setting name="aggressiveLazyLoading" value="true" />
    12     
    13     <!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动) -->
    14     <setting name="multipleResultSetsEnabled" value="true" />
    15     
    16     <!-- 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动 -->
    17     <setting name="useColumnLabel" value="true" />
    18     
    19     <!-- 允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby) -->
    20     <setting name="useGeneratedKeys" value="true" />
    21     
    22     <!-- 指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况) -->
    23     <setting name="autoMappingBehavior" value="PARTIAL" />
    24     
    25     <!--当检测出未知列(或未知属性)时,如何处理,默认情况下没有任何提示,这在测试的时候很不方便,不容易找到错误。 NONE : 不做任何处理 (默认值) WARNING : 警告日志形式的详细信息 FAILING : 映射失败,抛出异常和详细信息 -->
    26     <setting name="autoMappingUnknownColumnBehavior" value="WARNING" />
    27     
    28     <!-- 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新 -->
    29     <setting name="defaultExecutorType" value="SIMPLE" />
    30     
    31     <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 -->
    32     <setting name="defaultStatementTimeout" value="25000" />
    33     
    34     <!--设置查询返回值数量,可以被查询数值覆盖 -->
    35     <setting name="defaultFetchSize" value="100" />
    36     
    37     <!-- 允许在嵌套语句中使用分页 -->
    38     <setting name="safeRowBoundsEnabled" value="false" />
    39     
    40     <!--是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 -->
    41     <setting name="mapUnderscoreToCamelCase" value="false" />
    42     
    43     <!--MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。 -->
    44     <setting name="localCacheScope" value="SESSION" />
    45     
    46     <!-- 当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR OTHER。 -->
    47     <setting name="jdbcTypeForNull" value="OTHER" />
    48     
    49     <!-- 指定哪个对象的方法触发一次延迟加载。 -->
    50     <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />
    51     
    52 </settings>
    View Code

    4、typeAiases - 别名

    在 mapper.xml 中,定义很多的 statement,statement 需要 parameterType 指定输入参数的类型、需要 resultType 指定输出结果的映射类型。

    如果在指定类型时输入类型全路径,不方便进行开发,可以针对 parameterType 或 resultType 指定的类型定义一些别名,在 mapper.xml 中通过别名定义,方便开发。

    1)mybatis默认支持的别名

    别名 映射的类型          别名 映射的类型          别名 映射的类型
    _byte  byte  _boolean boolean double Double
    _long long  string String float Float
    _short  short  byte Byte boolean Boolean
    _int  int  long Long date Date
    _integer  int  short Short decimal BigDecimal
    _double double int Integer bigdecimal Bigdecimal
    _float float integer Integer    

    2)自定义别名

     - 单个别名定义

    <typeAliases>
        <typeAlias type="com.sikiedu.beans.User" alias="user" />
    </typeAliases>

     - 批量定义别名:推荐

    使用package包形式来配置别名,包的形式会扫描主包及子包中所有文件;

    以对象类名为别名,大小写不限,推荐使用小写。

    <typeAliases>
        <package name="com.sikiedu.beans" />
    </typeAliases>

     - UserMapper.xml引用别名

    <select id="findUserById" parameterType="int" resultType="user" >
          select * from t_user where id=#{id}
    </select>

    5、typeHandlers - 类型处理器

    mybatis 中通过 typeHandlers 完成 jdbc 类型和 java 类型的转换。

    通常情况下,mybatis 提供的类型处理器满足日常需要,不需要自定义。

    1)mybatis 支持类型处理器

    类型处理器

    Java类型

    JDBC类型

    BooleanTypeHandler 

    Boolean,boolean 

    任何兼容的布尔值

    ByteTypeHandler 

    Byte,byte 

    任何兼容的数字或字节类型

    ShortTypeHandler 

    Short,short 

    任何兼容的数字或短整型

    IntegerTypeHandler 

    Integer,int 

    任何兼容的数字和整型

    LongTypeHandler 

    Long,long 

    任何兼容的数字或长整型

    FloatTypeHandler 

    Float,float 

    任何兼容的数字或单精度浮点型

    DoubleTypeHandler 

    Double,double 

    任何兼容的数字或双精度浮点型

    BigDecimalTypeHandler 

    BigDecimal 

    任何兼容的数字或十进制小数类型

    StringTypeHandler 

    String 

    CHAR和VARCHAR类型

    ClobTypeHandler 

    String 

    CLOB和LONGVARCHAR类型

    NStringTypeHandler 

    String 

    NVARCHAR和NCHAR类型

    NClobTypeHandler 

    String 

    NCLOB类型

    ByteArrayTypeHandler 

    byte[] 

    任何兼容的字节流类型

    BlobTypeHandler 

    byte[] 

    BLOB和LONGVARBINARY类型

    DateTypeHandler 

    Date(java.util)

    TIMESTAMP类型

    DateOnlyTypeHandler 

    Date(java.util)

    DATE类型

    TimeOnlyTypeHandler 

    Date(java.util)

    TIME类型

    SqlTimestampTypeHandler 

    Timestamp(java.sql)

    TIMESTAMP类型

    SqlDateTypeHandler 

    Date(java.sql)

    DATE类型

    SqlTimeTypeHandler 

    Time(java.sql)

    TIME类型

    ObjectTypeHandler 

    任意

    其他或未指定类型

    EnumTypeHandler 

    Enumeration类型

    VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。

    6、environments - 环境集合属性对象

    ① environment 元素是配置一个数据源的开始,属性id是它的唯一标识

    transactionManager 元素配置数据库事务,其中type属性有三种配置方式

    • jdbc,采用jdbc的方式管理事务;
    • managed,采用容器的方式管理事务,在JNDI数据源中使用;
    • 自定义,自定义数据库事务管理办法;

    dataSource 元素配置数据源连接信息,type属性是连接数据库的方式配置,有四种配置方式

    • UNPOOLED 非连接池方式连接
    • POOLED 使用连接池连接
    • JNDI 使用JNDI数据源

    7、mappers - 映射配置

    1)加载单个映射文件

     - resource、url方法一次加载一个映射文件

     - class属性:mapper接口加载单个映射配置文件;遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;

       上边规范的前提是:使用的是mapper代理方法;

    <mappers>
        <!-- 单个配置 -->
        <mapper resource="com/sikiedu/mapper/UserMapper.xml" />
        <mapper url="file:\D:JavaWorkSpaceJavaEE_SSM_Testssm_mybatissrccomsikiedumapperUserMapper.xml" />
        <mapper class="com.sikiedu.mapper.UserMapper" />
    </mappers>

    2)批量加载mapper - 推荐使用

       批量加载映射配置文件,mybatis自动扫描包下面的mapper接口进行加载;

       遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;

    <!--配置映射器的位置 -->
    <mappers>
        <package name="com.sikiedu.mapper" />
    </mappers>

    3)另外,还可以通过自定义注解。当然,系统已经为我们提供了扫码工具【mybatis与spring集成】。

    <bean id="mapperSanner" class="org.mybatis.spring.mapper.MapperSannerConfigurer">
      <property name="basePackage" value="com.xxx.mapper"></property>
    </bean>

    还有一种情况,当我们不使用spring只使用mybatis时,那么我们就需要自定义注解来扫描mapper文件,通过mybatis的配置来使用了。

  • 相关阅读:
    Kotlin调用lambda表达式时,lambda中的参数名字省略问题
    Kotlin读取控制台输入
    安卓P(9)及以上Cleartext HTTP traffic to xxx not permitted错误,无法HTTP明文连接错误解决方法
    AS4.0以上查看R.id
    Kotlin Standard.kt解析(also,apply,let.run...)
    ext4文件解包打包
    Kotlin中的var、val和const
    Kotlin的构造方法探究
    Markdown语法
    uniapp遇到的小问题
  • 原文地址:https://www.cnblogs.com/Dm920/p/12048570.html
Copyright © 2011-2022 走看看