Mybatis-Mapper映射

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Mybatis-Mapper映射

Mapper

本篇文档用图部分来自:java思维导图

  • cache – 给定命名空间的缓存配置。
  • cache-ref – 其他命名空间缓存配置的引用。
  • resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
  • parameterMap – 已废弃!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除,这里不会记录。
  • sql – 可被其他语句引用的可重用语句块。
  • insert – 映射插入语句
  • update – 映射更新语句
  • delete – 映射删除语句
  • select – 映射查询语句
  • cache-ref – 其他命名空间缓存配置的引用。

    parameterMap – 已废弃!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除,这里不会记录。

    insert – 映射插入语句

    delete – 映射删除语句

    mapper文件与mapper 接口的配置说明(重点:)

    针对Configuration中不同mapper映射器,这里的名称空间定义不同:

  • `当使用相对于类路径的资源引用和完全限定资源定位符(URL)映射器时,namespace=”valeu” value的值可以任意指定,并且mapper映射文件的位置可以任意指定.`
  • `当使用使用映射器接口实现类的完全限定类名和包内的映射器接口实现全部注册为映射器时, namespace=”valeu”` `value的值必须指定为mapper接口类型的权限名称且mapper映射文件必须和mapper接口在一个包中`
  • 元素说明

    
    mapper namespace="vallue "  这里是mapper的元素/mapper
    

    第一部分insert update delete

  • insert – 映射插入语句
  • update – 映射更新语句
  • delete – 映射删除语句
    Mybatis-Mapper映射
    img
  • 主键生成策略

    第二部分select

    第三部分sql 与字符串拼接

    Sql

    
    !-- 自定义条件查询用户列表 --
    sql id="sometable"
      ${prefix}Table
    /sql
    sql id="someinclude"
      from
        include refid="${include_target}"/
    /sql
    select id="select" resultType="map"
      select
       field1, field2, field3
        include refid="someinclude"
        property name="prefix" value="Some"/
        property name="include_target" value="sometable"/
      /include
    /select
    

    字符串拼接替换#{}和${}

    
    !-- 自定义条件查询用户列表 --
        select id=*"findUserByUsername"* parameterType=*"java.lang.String"*
               resultType=*"cn.itcast.mybatis.po.User"*
           select * from user where username like '%${value}%'
        /select
    

    #{}和${}的区别

    #{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称

    ${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。

    第四部分resultMap

    ResultMap的子元素

  • constructor - 用于在实例化类时,注入结果到构造方法中
  • idArg - ID 参数;标记出作为 ID 的结果可以帮助提高整体性能
  • arg - 将被注入到构造方法的一个普通结果
  • id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能
  • result – 注入到字段或 JavaBean 属性的普通结果
  • association – 一个复杂类型的关联;许多结果将包装成这种类型
  • 嵌套结果映射 – 关联可以指定为一个 resultMap 元素,或者引用一个
  • collection – 一个复杂类型的集合
  • 嵌套结果映射 – 集合可以指定为一个 resultMap 元素,或者引用一个
  • discriminator – 使用结果值来决定使用哪个 resultMap
  • case – 基于某些值的结果映射
    • 嵌套结果映射 – 一个 case 也是一个映射它本身的结果,因此可以包含很多相 同的元素,或者它可以参照一个外部的 resultMap。
    • idArg - ID 参数;标记出作为 ID 的结果可以帮助提高整体性能

      id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能

      association – 一个复杂类型的关联;许多结果将包装成这种类型

      collection – 一个复杂类型的集合

      discriminator – 使用结果值来决定使用哪个 resultMap

      嵌套结果映射 – 一个 case 也是一个映射它本身的结果,因此可以包含很多相 同的元素,或者它可以参照一个外部的 resultMap。

      id&result/constructor

      resultMap的解决问题:

      **1)      **po类字段与数据表中的列名不一致

      **2)      **一对一关系

      **3)      **一对多关系

      **4)      **多对多

      **5)      **根据条件封装不同结果

      一对一association
      一对多collection
      鉴别器discriminator
      
      resultMap id="vehicleResult" type="Vehicle"
        id property="id" column="id" /
        result property="vin" column="vin"/
        result property="year" column="year"/
        result property="make" column="make"/
        result property="model" column="model"/
        result property="color" column="color"/
        discriminator javaType="int" column="vehicle_type"
          case value="1" resultType="carResult"
            result property="doorCount" column="door_count" /
          /case
          case value="2" resultType="truckResult"
            result property="boxSize" column="box_size" /
            result property="extendedCab" column="extended_cab" /
          /case
          case value="3" resultType="vanResult"
            result property="powerSlidingDoor" column="power_sliding_door" /
          /case
          case value="4" resultType="suvResult"
            result property="allWheelDrive" column="all_wheel_drive" /
          /case
        /discriminator
      /resultMap
      

      文章如有错误,请您一定指出,感谢之至!
      如果你有不同的见解,欢迎留言,或者加我QQ986320270
      图片可能来源于网络,如有侵权请告知。
      最后:关注一下呗

      长按二维码识别关注

    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> Mybatis-Mapper映射


      转载请注明: 好好学java Mybatis-Mapper映射

     上一篇
    MyBatis-Configuration MyBatis-Configuration
    # Configuration学习了Mybatis的架构,接着就该学一下配置文件咯,Mybatis的配置文件一共分为两种: Configuration 核心配置文件 Mapper映射文件(与sql映射的文件) Mapper映射文件
    2021-04-05
    下一篇 
    MyBatis逆向工程 MyBatis逆向工程
    资料部分来自:传智播客与网络其他 MyBatis逆向工程什么是逆向工程MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybat
    2021-04-05