美文网首页
Mybatis配置说明

Mybatis配置说明

作者: 风吟空城 | 来源:发表于2018-09-17 17:28 被阅读0次

    有理解不到位的欢迎指正

    配置 描述 默认值
    cacheEnabled 二级缓存,全局开启/关闭缓存,如果配置为false,会覆盖各个Mapper文件中的cache配置 true/false true
    lazyLoadingEnabled 主要是级联时使用,全局开启/关闭懒加载,如果配置为true,所有关联对象都会被加载。fetchType配置会覆盖全局配置 true/false alse
    aggressiveLazyLoading 和lazyLoadingEnabled配合使用。lazyLoadingEnabled为true时,aggressiveLazyLoading为true则加载所有懒加载对象,为false则按需加载懒加载对象 true/false false (true in ≤3.4.1)
    multipleResultSetsEnabled 允许/不允许一条SQL返回多个结果集,具体情形请查看附录1 true/false true
    useColumnLabel 使用列索引号代替列名称 true/false true
    useGeneratedKeys 允许JDBC 生成主键。需要可兼容的驱动器。如果配置为true,将强制使用被生成的主键,不兼容的驱动器仍然执行。 true/false false
    autoMappingBehavior 指定如何自动映射到对象的字段、属性。NONE,不映射。PARTIAL,除了内嵌属性其余的进行映射。FULL ,全映射,包含内嵌属性。 NONE, PARTIAL, FULL PARTIAL
    autoMappingUnknownColumnBehavior 当检测到无法匹配的属性时,如何执行。NONE,什么也不做。WARNING,打印警告日志。FAILING,失败抛异常 NONE, WARNING, FAILING NONE
    defaultExecutorType 执行器类型,SIMPLE是普通的执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新,注意事项请查看附录3 SIMPLE REUSE BATCH SIMPLE
    defaultStatementTimeout SQL执行超时时间 Any positive integer Not Set
    defaultFetchSize 设置最大的抓取数量,会被query方法上设置的覆盖 Any positive integer Not Set
    safeRowBoundsEnabled 允许在嵌套语句中使用分页(RowBounds) true/false false
    safeResultHandlerEnabled 允许在嵌套语句中使用分页(ResultHandler) true/false true
    mapUnderscoreToCamelCase 是否开启自动驼峰命名规则 true/false false
    localCacheScope 一级缓存,mybatis利用本地缓存来防止重复查询、加速重复的内嵌查询。默认的作用域是Session,一次回话中的所有查询都会被缓存。当作用域是STATEMENT时,本地缓存仅作用域语句执行上,即便是同一会话的不同的调用,也不会有任何数据会共享 SESSION/STATEMENT SESSION
    jdbcTypeForNull 没有指定jdbcType的参数,其返回值为NULL时,指定 jdbcType。 某些驱动需要指定jdbcType,其他驱动直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。 JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER OTHER
    lazyLoadTriggerMethods 指定某些方法懒加载 方法名组成的列表,方法名之间中逗号分隔 equals,clone,hashCode,toString
    defaultScriptingLanguage 指定动态 SQL 生成的默认语言 类名或者类的全路径 org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
    defaultEnumTypeHandler 执行枚举类的处理方法 类名或者类的全路径 org.apache.ibatis.type.EnumTypeHandler
    callSettersOnNulls 当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这对于有 Map.keySet() 依赖或 null 值初始化的时候是有用的。注意基本类型(int、boolean等)是不能设置成 null 的 true/false false
    returnInstanceForEmptyRow Mybatis,当结果集为NULL的时候返回null。如果设置为true,Mybatis会返回一个空的实例。内置的集合(collection、association)也会返回空的对象实例(3.4.2+) true/false false
    logPrefix 指定 MyBatis 增加到日志名称的前缀 自定义字符串 Not set
    proxyFactory 创建懒加载对象时用到的代理工具类 CGLIB/JAVASSIST JAVASSIST(3.3+)
    vfsImpl 指定VFS的实现类 自定义类的全路径,用逗号分隔。 Not set
    useActualParamName 允许SQL语句中使用mapper接口声明的变量名称,前提是你的项目是用Java编译的,并且在mapper接口的方法上使用@param true/false true
    configurationFactory 自定义生成Configuration的类,返回的Configuration的实例用于加载反序列化对象的懒加载属性,该类必须有static Configuration getConfiguration()方法 类名或者类的全路径 Not set

    附录1 multipleResultSetsEnabled

    <resultMap id="adminCashBalance" type="AdminCashBalance">
    ...
    </resultMap>
    
    <resultMap id="adminCashMovement" type="AdminCashMovement">
    ...
    </resultMap>
    
    <resultMap id="adminCashTrx" type="AdminCashTrx">
    ...
    </resultMap>
    
    <select id="findCashItems" parameterType="map" resultMap="adminCashBalance, adminCashMovement, adminCashTrx">
        exec RequestActualAdministrativeData #{portfolioId}
    </select>
    

    附录2 autoMappingBehavior

    主要针对<resultMap>中没有配置<result>情形使用:
    设置为NONE,则不会映射,设置为PARTIAL,则feelingComments不会被映射,设置为FULL,则全部映射,这样就无需写<result>了

    <resultMap id="FeelingCommentResult" type="Feeling">
        <id property="feeling_id" column="feeling_id" />
        <!-- <result property="content" column="content" /> -->
        <collection property="feelingComments" ofType="FeelingComment">
            <id property="feeling_comment_id" column="feeling_comment_id" />
            <!-- <result property="commentContent" column="commentContent" /> -->
        </collection>
    </resultMap>
    <select id="selectFeelingComment" parameterType="map" resultMap="FeelingCommentResult">
        select * from feeling 
            left outer join feeling_comment on feeling.feeling_id=feeling_comment.feeling_id
           where feeling.id =#{id}
    </select>
    

    【转】https://blog.csdn.net/qq_1017097573/article/details/70942800

    附录3

    • 设为"SIMPLE", 在执行xxxDao.save(xxx)时,就相当于JDBC的stmt.execute(sql);
    • 设为"REUSE", 在执行xxxDao.save(xxx)时,相当于JDBC重用一条sql,再通过stmt传入多项参数值,然后执行stmt.executeUpdate()或stmt.executeBatch();
    • 设为"BATCH", 在执行xxxDao.save(xxx)时,相当于JDBC语句的 stmt.addBatch(sql),即仅仅是将执行SQL加入到批量计划。

    如果执行器设为BATCH,发生主键冲突时,只会在该方法调用结束后、在事务提交前才抛出异常。
    因为设为BATCH时,仅仅是将执行SQL加入到批量计划。所以此时不会抛出主键冲突等运行时异常,而只有临近commit前执行stmt.execteBatch()后才会抛出异常。

    具体请查看博客:【转】https://blog.csdn.net/liuxiao723846/article/details/52195378

    相关文章

      网友评论

          本文标题:Mybatis配置说明

          本文链接:https://www.haomeiwen.com/subject/iemlnftx.html