Mybatis Settings

1.cacheEnabled
 要不要用一级二级缓存?
 默认值true.
     * 一级缓存: 也就 Session 级的缓存(默认开启)
    */
    @Test
    public void testCache1() {
    SqlSession session = MybatisUtils.getSession();
    String statement = "com.atguigu.mybatis.test8.userMapper.getUser";
    User user = session.selectOne(statement, 1);
    System.out.println(user);
    /*
    * 一级缓存默认就会被使用
    */
    /*
    user = session.selectOne(statement, 1);
    System.out.println(user);
    */
    /*
    1. 必须是同一个 Session,如果 session 对象已经 close()过了就不可能用了
    */
    /*
    session = MybatisUtils.getSession();
    user = session.selectOne(statement, 1);
    System.out.println(user);
    */
    /*
    2. 查询条件是一样的
    */
    /*
    user = session.selectOne(statement, 2);
    System.out.println(user);
    */
    /*
    3. 没有执行过 session.clearCache()清理缓存
    */
    /*
    session.clearCache();
    user = session.selectOne(statement, 2);
    System.out.println(user);
    */
    /*
    4. 没有执行过增删改的操作(这些操作都会清理缓存)
    */
    /*
    session.update("com.atguigu.mybatis.test8.userMapper.updateUser",
    new User(2, "user", 23));
    user = session.selectOne(statement, 2);
    System.out.println(user);
    */
    }
    
    二级缓存 要在mapper.xml 文件里定义<cache>,如果设置为true cache 则生效。
    
2.lazyLoadingEnabled
 延迟加载的全局开关。
 当开启时,所有关联对象都会延迟加载。
 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。
 默认值false.
 实体类 学生 系部,系部是学生的一个关联对象?
 如果设置成延迟加载,服务器压力小但是展现速度慢?
 
3.aggressiveLazyLoading
 如果开启,任何方法调用将加载对象所有的lazy属性。
 否则只加载那些必要的
 默认false.
 什么鬼?要用@lazy标注在对象的属性上吗?
 method call是指调用mapper里面的一个<select>吗?
 
4. multipleResultSetsEnabled
  是否允许单一语句返回多结果集(需要兼容驱动)
  默认true.
  类似getUsers()这种,返回List的?
 
5.useColumnLabel
  是否可以使用列的别名 (取决于驱动的兼容性)
  default:true.
 
6.useGeneratedKeys
 允许 JDBC 支持自动生成主键,需要驱动兼容。
 如果设置为 true 则这个设置强制使用自动生成主键,
 尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。
 默认值false.
 到底要不要允许?强制使用自动生成主键?
 如果建表的时候没有设置自增长主键呢?
 
7.autoMappingBehavior
 指定 MyBatis 应如何自动映射列到字段或属性。
 NONE 表示取消自动映射;
 PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。(级联的不映射是这个意思么?)
 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。
 默认partial.
 
8.autoMappingUnknownColumnBehavior

9.defaultExecutorType
 配置默认的执行器。SIMPLE 就是普通的执行器;
 REUSE 执行器会重用预处理语句(prepared statements);
 BATCH 执行器将重用语句并执行批量更新。
 默认SIMPLE
 选默认的SIMPLE应该就OK了~
 
10.defaultStatementTimeout
 设置超时时间,它决定驱动等待数据库响应的秒数。
 默认没有设置(意思是可以无限制等待?)
 一般配25秒。
 
11.defaultFetchSize
 返回记录数的上限值。
 默认没有设置。
 设置成100?每次最多能查100条。
 
12.safeRowBoundsEnabled
 允许在嵌套语句中使用分页(RowBounds)
 默认值False(允许,官网说的)
 嵌套语句是什么?
 
13.safeResultHandlerEnabled
 允许在嵌套语句中使用结果处理器?自己翻的,不懂意思
 默认True(不允许)
 
14.mapUnderscoreToCamelCase
    是否开启自动驼峰命名规则(camel case)映射,
    即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。
    默认false。
    这要看我们建表字段的时候用的什么名字!
    
15.localCacheScope
    MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)
    和加速重复嵌套查询。  
    默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。  
    若设置值为 STATEMENT,本地会话仅用在语句执行上,
    对相同 SqlSession 的不同调用将不会共享数据。
    ??不懂什么意思!
    
16.jdbcTypeForNull
    当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。
    某些驱动需要指定列的 JDBC 类型,
    多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。
    默认Other。
    这个应该默认就可以了。
    
17.lazyLoadTriggerMethods
  指定哪个对象的方法触发一次延迟加载。
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
  默认:equals,clone,hashCode,toString
 
---------------以下设置貌似不常用,除非特殊需求,用默认值就好--------------  
18.defaultScriptingLanguage
    动态生成SQL默认使用什么语言?
    默认:org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
    jeesite中sql都是写在xml中的,如果用注解此处就要改
    
19.callSettersOnNulls
   Specifies if setters or map's put method will be called when a retrieved value is null.
   It is useful when you rely on Map.keySet() or null value initialization.
   Note primitives such as (int,boolean,etc.) will not be set to null.
    ??
   默认:false
   
20.returnInstanceForEmptyRow
  默认情况下,当查询结果的一行row,每列都是控制,java将会得到一个null结果。如果设置成
  true,java将得到一个空的实例。
  默认:false。
 
21.logPrefix
  给logger name 加个前缀字符串
  默认: 没设置
 
22.logImpl
    Specifies which logging implementation MyBatis should use.
    If this setting is not present logging implementation will be autodiscovered.
    
23.proxyFactory :默认
    Specifies the proxy tool that MyBatis will use for creating lazy loading
    capable objects.
    指定 Mybatis 创建延迟加载需要的代理工具?
    可选值:CGLIB | JAVASSIST
    默认值:JAVASSIST (MyBatis 3.3 or above)
     CGLib创建的动态代理对象性能比JDK创建的动态代理对象的性能高不少,
     但是CGLib在创建代理对象时所花费的时间却比JDK多得多,所以对于单例的对象,
     因为无需频繁创建对象,用CGLib合适,反之,使用JDK方式要更为合适一些。
     同时,由于CGLib由于是采用动态创建子类的方法,对于final方法,无法进行代理。
    
24.vfsImpl :默认
    Specifies VFS implementations
    制定VFS实现
    VFS 是什么:Virtual File System虚拟文件系统,也称为虚拟文件系统开关(Virtual Filesystem Switch).
这是Linux文件系统对外的接口。任何要使用文件系统的程序都必须经由这层接口来使用它。
我们用的是Windows系统,所以用不着这个设置。

    默认:没有设置
25.useActualParamName :默认
    Allow referencing statement parameters by their actual names declared in
    the method signature. To use this feature, your project must be compiled
    in Java 8 with -parameters option. (Since: 3.4.1)
    这个应该用不到,我们的java版本没这么高~
    默认:true
---------------------------官网上的full configuration------------------    
<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"/>true
    <setting name="localCacheScope" value="SESSION"/>
    <setting name="jdbcTypeForNull" value="OTHER"/>NULL
    <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>!!!!!!!!!!
</settings>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值