• mybatis--mapper配置总结


    1. mapper介绍
      1. mapper使用规则:按业务划分,一个业务模块相关的sql均定义在一个mapper文件
      2. mapper的xml格式:
        1. doctype:
          • <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
            
        2. 使用mapper标签包含:
          • <mapper namespace="com.pro.dao.UserDao"></mapper>
            
    2. mapper概览
      • cache:指定名称的缓存
      • cache-ref:引用其他文件的命名配置
      • resultMap:描述如何加载数据库结果的对象
      • sql:可重用的sql块,也可以被其他语句使用
      • insert:插入
      • update:更新
      • delete:删除
      • select:查询  
    3. 使用介绍
      1. select标签
        <select
          id="selectPerson" //唯一标识sql语句,与接口中的标识一致。
          parameterType="int"//入参类型
          resultType="hashmap"//期望返回类型的类名或别名,集合时,应该是集合可以包含的类型,而不能是集合本身
          resultMap="personResultMap"//引用resultMap标签定义
          flushCache="false"//设置为true,清空缓存
          useCache="true"//使用cache:本条结果将被缓存
          timeout="10000"
          fetchSize="256"
          statementType="PREPARED"//Statement,PreparedStatement 或 CallableStatement。 默认值:PREPARED
          resultSetType="FORWARD_ONLY">//FORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE 中的一种。默认是不设置(驱动自行处理)。

        多表查询:
        <!-- Very Complex Statement -->
        <select id="selectBlogDetails" resultMap="detailedBlogResultMap">
          select
               B.id as blog_id,
               B.title as blog_title,
               B.author_id as blog_author_id,
               A.id as author_id,
               A.username as author_username,
               A.password as author_password,
               A.email as author_email,
               A.bio as author_bio,
               A.favourite_section as author_favourite_section,
               P.id as post_id,
               P.blog_id as post_blog_id,
               P.author_id as post_author_id,
               P.created_on as post_created_on,
               P.section as post_section,
               P.subject as post_subject,
               P.draft as draft,
               P.body as post_body,
               C.id as comment_id,
               C.post_id as comment_post_id,
               C.name as comment_name,
               C.comment as comment_text,
               T.id as tag_id,
               T.name as tag_name
          from Blog B
               left outer join Author A on B.author_id = A.id
               left outer join Post P on B.id = P.blog_id
               left outer join Comment C on P.id = C.post_id
               left outer join Post_Tag PT on PT.post_id = P.id
               left outer join Tag T on PT.tag_id = T.id
          where B.id = #{id}
        </select>
      2. insert、update、delete标签
        • <insert id="insertAuthor"//唯一标签,与接口中的方法名称一致 parameterType="domain.blog.Author"//参数类型,限定名 flushCache="true" statementType="PREPARED" keyProperty="" keyColumn="" useGeneratedKeys="" timeout="20">
        • selectKey:selectKey 元素将会首先运行, id 会被设置,然后插入语句 会被调用
          <insert id="insertAuthor">
            <selectKey keyProperty="id" resultType="int" order="BEFORE">
              select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
            </selectKey>
            insert into Author
              (id, username, password, email,bio, favourite_section)
            values
              (#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
          </insert>
          
      3. sql标签
        • 这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中
        • <sql id="userColumns"> id,username,password </sql>
          <select id="selectUsers" resultType="map">
            select <include refid="userColumns"/>
            from some_table
            where id = #{id}
          </select>
          <insert id="insertUser" parameterType="User">
            insert into users (id, username, password) values (#{id}, #{username}, #{password})
          </insert>
      4. resultMap标签
        • 结果映射定义:
        • constructor - 类在实例化时,用来注入结果到构造方法中
          • idArg - ID 参数;标记结果作为 ID 可以帮助提高整体效能
          • arg - 注入到构造方法的一个普通结果
        • id – 一个 ID 结果;标记结果作为 ID 可以帮助提高整体效能
        • result – 注入到字段或 JavaBean 属性的普通结果
        • association – 一个复杂的类型关联;许多结果将包成这种类型
          • 嵌入结果映射 – 结果映射自身的关联,或者参考一个
          • has a关系:
          • 关联元素处理“有一个”类型的关系。
            
          • <resultMap id="blogResult" type="Blog">
              <id property="id" column="blog_id" />
              <result property="title" column="blog_title"/>
              <association property="author" column="blog_author_id" javaType="Author" resultMap="authorResult"/>
            </resultMap>
            
            <resultMap id="authorResult" type="Author">
              <id property="id" column="author_id"/>
              <result property="username" column="author_username"/>
              <result property="password" column="author_password"/>
              <result property="email" column="author_email"/>
              <result property="bio" column="author_bio"/>
            </resultMap>
            
            <select id="selectBlog" resultMap="blogResult">
              select
                B.id            as blog_id,
                B.title         as blog_title,
                B.author_id     as blog_author_id,
                A.id            as author_id,
                A.username      as author_username,
                A.password      as author_password,
                A.email         as author_email,
                A.bio           as author_bio
              from Blog B left outer join Author A on B.author_id = A.id
              where B.id = #{id}
            </select>
            
        • collection – 复杂类型的集
          • 嵌入结果映射 – 结果映射自身的集,或者参考一个
        • discriminator – 使用结果值来决定使用哪个结果映射case – 基于某些值的结果映射
          • 嵌入结果映射 – 这种情形结果也映射它本身,因此可以包含很多相 同的元素,或者它可以参照一个外部的结果映射。
      5. Cache标签
        • <cache/>

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

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

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

          <cache
            eviction="FIFO"
            flushInterval="60000"
            size="512"
            readOnly="true"/>
  • 相关阅读:
    [知乎]20世纪初的军阀.
    Clover的简单使用
    影像工作站的数据库安装错误之Win7系统下pg服务无法启动
    屏蔽各大视频网站播放前15秒30秒广告
    电脑双显示器主分屏,巨鲨显示器不亮
    move 和 CopyMemory的区别
    The CompilerVersion constant identifies the internal version number of the Delphi compiler.
    Firemonkey的旁门左道[六]
    电够动力足——认识主板上的CPU供电模块
    delphi 枚举类型
  • 原文地址:https://www.cnblogs.com/leeying/p/3577431.html
Copyright © 2020-2023  润新知