Mybatis使用之查询详解

Mybatis使用之查询详解

 

一:简介

 

        此篇主要知识点:

       1、sql语句块

       2、select标签属性

       3、ResultMap 标签配置

       4、一对一关联

       5、一对多关联

       6、多对多关联

       7、嵌套查询

 

二:SQL语句块

 

       2.1 作用

 

              SQL元素可以被用来定义可重用的SQL 代码段,可以包含在其他语句中。比如在项目中常常做的分页查询、分别需要两条SQL语句、一条是查询所有具体记录信息、另一条需要查询记录数、而两条语句的where条件是一样的。这种类似情况就可以使用SQL语句块来简化配置信息。

 

       2.2 实例


              2.2.1 SQL语句定义:

      

     id, username, password 

              2.2.2 使用:

 

    

三:select标签属性

 

       3.1 标签属性集合:


        SELECT
            t.id,
            t.username,
            t.password,
            t.email,
            t.bio,
            t.favourite_section favouriteSection
        FROM author t
    


        5.2 ResultMap类型返回值的表示方式:

             

              5.2.1 配置ResultMap

    
        
        
        
        
        
        
    

              5.2.2 将select标签的ResultMap属性值设置为上面ResultMap标签的id、达到映射效果

    

              5.2.3 当前ResultMap中 id result子表签作用及属性意义


             Mybatis使用之查询详解_第1张图片


六:一对一关联

      

      6.1 一对一场景

 

       以Blog为例、从《Mybatis使用之环境搭建》中知道Blog与Author是一对一关系、这里是在Blog中关联了Author信息。其他的先不管。如何查询Blog信息、要求是除基本信息外还包含作者完整信息

 

       6.1.1 ResultMap配置一:

 

    
        
        
        
        
    

       6.1.2 ResultMap配置二:

 

    
        
        
        
        
            
            
            
            
            
            
        
    

       6.1.3查询语句:

 

    

       6.1.4 association标签属性以及标签体

            属性:

      Mybatis使用之查询详解_第2张图片


七:一对多关联

      

      7.1 一对多场景

 

       以Blog为例、从《Mybatis使用之环境搭建》中知道Blog与Post是一对多关系、这里是在Blog中有一个集合存放类型为Post的List。


       7.1.1 ResultMap配置一:

    
        
        
        
            
            
        
    

       7.1.2 ResultMap配置二:

    
        
        
        
    

       7.1.3查询语句:

    
    
      
      7.1.4 collection标签属性:

       “ofType”属性。这个属性用来区分JavaBean(或字段)属性类型和集合包含的类型(类型明确下也可以省略)。比如:




读作: “在 Post 类型的 ArrayList 中的 posts 的集合。”

javaType 属性是不需要的,因为 MyBatis 在很多情况下会为你算出来。所以你可以缩短 写法:


八:多对多关联


        多对多关联可以简化为单方面一对多关联。可以参见一对多关联的方式实现。


九:嵌套关联

      9.1 一对多场景

 

       以Blog为例、从《Mybatis使用之环境搭建》中知道Blog与Post是一对多关系、Post与PostComment(文章评论)Tag(文章标签)是一对多、当在查询Blog属性时、关联的Post属性一并查出来、同时PostComment和Tag属性关联出来。



       9.1.1 ResultMap配置:

    
        
        
        
            
            
            
            
                
                
            
        
    

       9.1.2 查询语句:

    

十:缓存


       MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis 3中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。

默认情况下是没有开启缓存的,除了局部的 session 缓存,可以增强变现而且处理循环依赖也是必须的。要开启二级缓存,你需要在你的 SQL 映射文件中添加一行:


字面上看就是这样。这个简单语句的效果如下:

  • 映射语句文件中的所有 select 语句将会被缓存。
  • 映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
  • 缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
  • 根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
  • 缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
  • 缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

所有的这些属性都可以通过缓存元素的属性来修改。比如:


这个更高级的配置创建了一个 FIFO 缓存,并每隔 60 秒刷新,存数结果对象或列表的512 个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改它们会导致冲突。

可用的收回策略有:

  • LRU – 最近最少使用的:移除最长时间不被使用的对象。
  • FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
  • SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
  • WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

默认的是 LRU。

flushInterval(刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。

size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值是 1024。

readOnly(只读)属性可以被设置为 true 或 false。只读的缓存会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是 false。

这里暂时没有自定义缓存、后面会有专门关于缓存的记录。




补充:

 

        更多内容:Mybatis 目录

        github地址:https://github.com/andyChenHuaYing/scattered-items/tree/master/items-mybatis

        源码下载地址:http://download.csdn.net/detail/chenghuaying/8713311


       select标签属性对应意义:

       Mybatis使用之查询详解_第3张图片

Mybatis使用之查询详解_第4张图片

 

你可能感兴趣的:(Oscar_mybatis,Mybatis从入门到精通,mybatis,Mybatis关联查询,Mybatis,一对多,Mybatis一对一,Mybatis多对多)