zoukankan      html  css  js  c++  java
  • 互联网轻量级框架SSM-查缺补漏第五天

      简言:这个地方我就草草过了,NBA圣诞大战,偷偷看比赛,真香~

    第五章映射器

    5.2select元素

      自动映射驼峰映射:MyBatis提供了自动映射功能,在默认的情况下自动映射功能是开启的。

      在setting元素中,

      autoMappingBehavior控制自动映射,取值范围:

    • NONE:不进行自动映射。
    • PARTIAL:默认值,只对没有嵌套结果集进行自动映射。
    • FULL:对所有的结果集进行自动映射,包括嵌套结果集。

    mapUnderscoreToCamelCase控制驼峰映射,驼峰映射是按照驼峰命名的方式自动映射,例如数据库字段为role_name,则POJO属性名为roleName。

      传递多个参数的方式:

    • 使用map接口传递参数。
    • 使用注解传递参数:在接口类方法形参前加入注解@Param("roleName")
    • 通过JavaBean传递参数
    • 混合使用

      resultMap映射结果集:

    为了支持复杂映射,select元素提供了resultMap属性。先定义resultMap属性。

    <resultMap type="role" id="roleMap">
        <id property="id" column="id"/>
        <result property="roleName" column="role_name"/>
    </resultMap>
    <select id="getRole" parameterType="Long" resultMap="roleMap">
        select id,role_name  from t_role where id = #{id}
    </select>

    resultMap的子元素id代表组件,而result代表其属性,id和result元素的属性property代表POJO的属性名称,而column代表SQL的列名。

      5.3insert元素

      主键回填,JDBC中的Statement对象在执行插入的SQL后,可以通过getGennerateKeys方法获得数据库生成的主键(需要数据库驱动支持),还要配置其属性keyProperty或keyColumn,告诉系统把生成的组件放入哪个属性中。

    <insert id="insertRole" parameterType="role" useGeneratedKeys="true" keyProperty="id">
        insert into t_role(role_name,note) values(#{roleName},#{note})
    </insert>

      自定义主键:

      

    <insert id="insertRole" parameterType="role" >
        <selectKey keyProperty="id" resultType="long" order="BEFORE">
               select if(max(id)=null,1,max(id)+3) from t_role
        </selectKey>
        insert into t_role(role_name,note) values(#{roleName},#{note})
    </insert>

    order设置为BEFORE,说明它将于当前定义的SQL前执行,这样就可以自定义主键的规则了,也可以设置为AFTER这样它就会在插入语句之后执行了。

      5.7 resultMap元素

      resultMap的作用是定义映射规则、级联的更新、定制类型转换器等。(有一些子元素,用到说的时候再说把)

      5.9 缓存

      缓存一般都放置在高速读/写的存储器上,比如服务器的内存,它能够有效提高系统的性能。从硬件的角度分析,索引磁盘是一个较为缓慢的过程,读取内存或者高速缓存处理器的速度要比读取磁盘快得多,其速度是读取硬盘的几十倍到上百倍,但是内存和高速缓存处理器的空间有限,所以一般只会把那些常用且命中率高的数据缓存起来,一以便将来使用。

      MyBatis分一级缓存二级缓存。同时也可以配置关于缓存的设置。一级缓存是在SqlSession上的缓存,二级缓存实在SqlSessionFactory上的缓存

      一级:

      当一个SqlSession第一次通过SQL和参数获取对象后,它就会将其缓存起来。不同的SqlSession是不共享的。

      二级:

      在映射文件(Mapper)上加上

    <cache/>

      这个时候MyBatis会序列化和反序列化对应的POJO,也就要求POJO是一个可序列化的对象,那么它就必须实现java.io.Serializable接口。如果没有实现Serializable接口,那么MyBatis会抛出异常。

      一切配置好后,不同的SqlSession在获取同一条记录,只是发送过一次SQL获取数据。因为这个时候MyBatis将其保存在SqlSessionFactory层面,可以提供给各个SqlSession使用。(注:在二级缓存中,当第一次查询执行后也需要进行提交,commit后数据才会进入缓存

  • 相关阅读:
    零基础转IT,我推荐你学习这三门技术
    蜗牛学院行内人分析:参加IT培训,大家一定要注意这五点!
    蜗牛学院分析:Web前端开发的就业前景怎么样,薪资待遇如何?
    软件测试和测试开发有什么区别?
    转行者越来越多,程序员是不是不值钱了呢?
    蜗牛学院卿老师:Python中几个比较容易混淆的概念解释
    webpack4.x的css单独打包、合并、自动添加前缀、压缩
    webpack4的splitChunksPlugin配置参数详解---代码分割 、懒加载以及prefetching 和 preloading
    vue列表页进入详情页,返回列表项不刷新
    js数组去重
  • 原文地址:https://www.cnblogs.com/shiboinfo/p/10178896.html
Copyright © 2011-2022 走看看