zoukankan      html  css  js  c++  java
  • mybatis使用要点(2019.5.19)

    接口入参

    • 只有一个参数,叫啥都没问题
    • 有两个参数以上,需使用@Param,否则名字依次为0、1、2和param1、param2、param3
    • 一般用#,防sql注入;偶尔用$,比如需要动态表名等

    接口返回结果

    • 有resultMap和resultType
    • resultMap需要定义一个resultMap元素,然后在元素里面把下划线转为驼峰
    • resultType一般对应一个实体类,又或者HashMap(不是map),要写类的全路径,这样就需要在select里把下划线转驼峰
    • 但下划线转驼峰最好用mapUnderscoreToCamelCase=true配置

    underscore是下划线,和underline一样,但计算机一般用underscore

    mybatis缓存

    • 分一级缓存和二级缓存

    • 一级

      • 一级缓存默认打开,在同一个sqlSession里生效
      • 如果结合了spring,那就是在同一个事务里
      • 如果不同sqlSession、不同的事务、没有事务、或者执行了insert/update/delete操作,则一级缓存起不了作用
    • 二级

      • 二级缓存全局开关默认打开,但同时需要每个mapper里配置打开,mapper里的开关默认关闭
      • 二级缓存可以跨sqlSession,也就是在同一个sqlSessionFactory里生效
      • 但只对同一个mapper生效,如果别的mapper insert了,希望这个mapper select出来是新数据,可以配置cache-ref=别的mapper
      • 二级缓存是在sqlSession关闭时写入,如果关闭前会一直使用一级,不会使用二级
      • 二级缓存也是写入主机的内存里,使用map实现
      • 如果不想用默认的内存map,可选择第三方的ehcache、redis等,mybatis支持好几种
      • echcache除了内存还可以使用磁盘,redis可以多个主机内存共享
      • 二级缓存有四种回收策略,默认是LRU最近最少使用策略
    • 适用场景注意

      • 一级缓存一般没bug,但如果取出后set了属性,没保存到数据库,又select取,则与数据库不一致,可关闭一级缓存解决:flushCache=true
      • 二级缓存一般用在只有查询操作、或者单表操作、脏读没什么关系等场景

    动态SQL-foreach-字段名和字段值

    • foreach一般collection网上都是list
    • 其实可以map,这样就可以实现动态字段名
    • 比如map.put("fieldName", "fieldValue")
    • 然后接口入参里map前加@Param mapName
    • 然后动态sql里collection="mapName",就可以用了,动态拼接where 字段名=字段值
    • 多个字段分隔符用" and "

    2019.5.19

  • 相关阅读:
    平易近人、兼容并蓄——Spark SQL 1.3.0概览
    System.getProperty
    Apache Commons CLI 简介
    The declared package does not match the expected package
    Maven常用命令
    使用SBT构建Scala应用(转自git)
    Area Under roc Curve(AUC)
    用特征来实现混入(mix-in)式的多重继承
    暗时间
    SVN如何commit(提交)项目代码
  • 原文地址:https://www.cnblogs.com/ouyida3/p/10889770.html
Copyright © 2011-2022 走看看