SQL映射文件

SQL映射文件的常用元素

  sql映射文件的几个顶级元素(按照定义的顺序)

mapper      -namespace

  --namespace(命名空间)

  --绑定Dao接口

  --namespace的命名必须跟某个接口同名

  --接口中的方法与映射文件中的语句id一一对应

  cache          -配置给定命名空间的缓存

  cache-ref   -从其他命名空间引用缓存配置

  resultMap -用来描述数据库结果集和对象的对应关系

  sql               -可以重用的SQL,也可以被其他语句引用

  insert         -映射插入语句

  id:命名空间中唯一的标识符

  parameterType:传入sql语句的参数类型的完全限定名或别名

  提供开启了事务控制,一定要进行conmit提交事务.

update              -映射更新语句

  id:命名空间中唯一的标识符

  parameterType:传入sql语句的参数类型的完全限定名或别名

  提供开启了事务控制,一定要进行conmit提交事务.

  如果只是更新单个值,每次都传入对象影响速度,可以传两个参数

  但是参数必须使用注解 @Param

  映射SQL中的参数:#{注解名称}

超过4个以上的参数最好使用封装成对象入参

  参数固定的业务方法,最好直接使用多参数入参.

delete        -映射删除语句

  id:命名空间中唯一的标识符

  parameterType:传入sql语句的参数类型的完全限定名或别名

  提供开启了事务控制,一定要进行conmit提交事务.

select         -映射查询语句

  -select属性详细配置

  -id

  命名空间中唯一的标识符

  接口中的方法与映射文件中的sql语句id一一对应

  -parameterType

    传入sql语句的参数类型的完全限定名或别名

    基础数据类型

      -int String Date等

      -只能传入一个,通过#{参数名}即可获取传入的值

    复杂数据类型

      -Java实体类,Map等

      -通过#{属性名}或者#{Map的key}即可获取传入的值

  -resultType

    sql语句返回值类型的完整类名或别名

    返回基本数据类型

    复杂数据类型(对象等)

  -resultMap:对外部redultMap的引用

    设置resultMap为返回值:

    在mapper文件里面创建resultMap标签, 设置type为返回值类型,设置id的值跟查询表设置的值相同

  格式:

    <resultMap type="User" id="userList">

          <result property="类属性名" column="数据库查询的属性名"/>  

    </resultMap>

  应用场景:

    数据库字段信息与对象属性不一致

    负责的联合查询,自由控制映射效果

    连表查询:参考内连接查询

  自动映射:

    自动映射的前提:字段名与属性名一致

    自动映射级别:PARTIAI(默认),自动匹配所有属性

resultMap实现高级结果映射

  

    

  语法:

    <association property=”实体类对面名”  javaType=”对象所对应的类名或别名” 或引用外部resultMap>

      <id  property=”实体类的属性”  column=”数据库列名或别名” />

      <result property=”...”  column=”...” />

      <result property=”...”  column=”...” />

      ......

    </association>

  

  语法:

    <collection property=”集合类对面名”  ofType=”对象所对应的类名或别名” 或引用外部resultMap>

      <id  property=”实体类的属性”  column=”数据库列名或别名” />

      <result property=”...”  column=”...” />

      <result property=”...”  column=”...” />

      ......

    </collection>

    提高association/collection的可重用性,则提取成一个resultMap标签对象出来即可.

reslultMap自动映射(autoMappingBehavior)三个级别 

  如果存在内部嵌套(association/collection),那么就不会自动映射所有字段,如果存在内部嵌套要实现自动映射所有字段,那么必须根据条件设计全局属性: 

  <settings>

    <!-- 禁止自动匹配 -->

    <setting  name=”autoMappingBehavior” value=”NONE”/>

    <!-- 自动匹配所有属性 内部嵌套除外 -->

    <setting  name=”autoMappingBehavior” value=”PARTIAL”/>(默认)

    <!-- 自动匹配所有属性 -->

    <setting  name=”autoMappingBehavior” value=”FULL”/>

  </settings>

MyBatis缓存-性能较低(常用第三方缓存)

  一级缓存:基于MyBatis自带的HashMap本地缓存,作用范围为session域内,当session flush或者close之后,该session中所有的cache都会被清空.

  二级缓存(全局缓存):超出session范围之外,可以被所有SqlSession共享,开启它只需要在MyBatis的核心配置文件中设置即可,     

    二级缓存配置:

     1.MyBatis的全局cache配置

        <settings>

          <!-- 设置全局缓存 -->

          <setting  name=”cacheEnabled” value=”true”/>

        </settings>

     2.在mapper文件中设置缓存,默认情况下是没有开启缓存的,二级缓存的作用域只针对mapper的namespace而言,即,只有在此namespace下的查询才能共享cache,

    mapper内配置信息

        <cache eviction=”FIFO” flushInyerval=”60000” size=”512” readOnly=”true” />

    3.在查询语句标签内添加属性

      <select useCache=”true”>

      </select>

  总结:MyBatis对于缓存并不是擅长的,它只专心做的是SQL映射,所以采用OSCache,Merncachaed,Redis,Ehcache等专门的缓存服务器来做更合理

.  

原文地址:https://www.cnblogs.com/it-xiaoBai/p/10815271.html