icode icode
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

iqqcode

保持对技术的探索实践与热爱
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • JavaSE

  • JavaWeb

  • JavaEE

    • MyBaties

      • MyBatis01
      • MyBatis02
      • MyBatis03
      • MyBatis04-注解开发
      • Spring

      • SpringBoot

    • JavaTopic

    • 设计模式

    • 计算机基础

    • Java后端
    • JavaEE
    • MyBaties
    iqqcode
    2021-06-17
    目录

    MyBatis04-注解开发

    # 1. 注解开发使用事项

    为什么注解一句话等同于映射配置文件

    修饰的谁

    • 注解:修饰findAll()
    • XML:修饰id为findAll()

    执行的SQL语句

    • 注解、XML都相同

    封装的结果

    • 注解:方法的返回类型
    • XML:resultType中的类型

    # 2. 如果注解和XML同时存在

    使用注解开发,映射配置IUserDao.xml文件存在但不使用——运行出错

    SqlMapConfig主配置文件

    报错信息

    org.apache.ibatis.exceptions.PersistenceException: 
    ### Error building SqlSession.
    ### The error may exist in org/iqqcode/dao/IUserDao.xml
    ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for org.iqqcode.dao.IUserDao.findAll. please check org/iqqcode/dao/IUserDao.xml and org/iqqcode/dao/IUserDao.java (best guess)
    
    1
    2
    3
    4

    只要使用注解开发,如果在配置文件路径下同时包含了映射配置文件,无论使用与否,都会报错

    所以,如果使用注解开发,只需要添加主配置文件即可!

    # 3. 复杂关系映射的注解说明

    @Results注解 代替的是标签<resultMap>

    • 该注解中可以使用单个@Result注解,也可以使用@Result集合
    @Results({@Result(),@Result()}) 或 @Results(@Result())
    
    1

    **@Result注解 代替了<id>标签和<result>标签 **

    @Result中属性介绍:

    • id 是否是主键字段(boolen)
    • column 数据库的列名

    • property需要装配的属性名

    • one 需要使用的@One注解

    • many 需要使用的@Many注解


    @One注解(一对一) 代替了<assocation>标签,是多表查询的关键,在注解中用来指定子查询返回单一对象

    @One注解属性介绍:

    • select 指定用来多表查询的 sqlmapper

    • fetchType 会覆盖全局的配置参数 lazyLoadingEnabled (延迟加载)


    @Many注解(一对多) 代替了<collection>标签,是多表查询的关键,在注解中用来指定子查询返回对象集合

    注意:聚集元素用来处理 “一对多” 的关系。需要指定映射的Java实体类的属性,属性的 javaType(一般为ArrayList)但是注解中可以不定义;

    # 实体类属性与数据库表字段不对应

    当实体类属性与数据库表字段不对应时,XML配置会在映射配置文件中添加<resultMap>来重新映射关系结构,在注解开发中我们使用@Results集合来重新映射表字段

    # @ResultMap

    XML配置:

    resultMap可以用来描述从数据库结果集中来加载对象,有的时候映射过于复杂,我们可以在Mapper中定义resultMap来解决映射问题,可以在IUserDao这样来定义一个resultMap:

    注解配置对比:

    @Results中id是resultMap的唯一标识符,我们在后面引用这个@Results的时候就是通过这个id来引用,然后还定义了type属性,type属性指明了这个resultMap它对应的是哪个JavaBean。

    在@Result节点中,id为true表示主键,Result节点定义了普通的映射关系,这里的property表示JavaBean中的属性名称,column表示数据库中的字段名称,javaType代表JavaBean中该属性的类型,jdbcType则表示数据库中该字段的类型

    @ResultMap与XML中的resultMap等价,在select查询的时候指定@Resultsid即可

    更多相关resultMap映射器配置细则

    mybatis映射器配置 (opens new window)

    mybatis中resultMap配置细则 (opens new window)

    # fetchType

    配置延迟加载策略:

    fetchType = FetchType.LAZY
    fetchType = FetchType.EAGER
    fetchType = FetchType.DEFAULT
    
    1
    2
    3
    • 当映射关系为一对一时:选择EAGER加载
    • 当映射关系为一对多或者多对多时:选择LAZY加载
    编辑 (opens new window)
    上次更新: 2021/06/27, 10:49:09
    MyBatis03
    初识Spring

    ← MyBatis03 初识Spring→

    最近更新
    01
    匿名内部类
    10-08
    02
    函数式接口
    10-08
    03
    ARouter-Kotlin踩坑
    10-05
    更多文章>
    Theme by Vdoing | Copyright © 2021-2023 iqqcode | MIT License | 备案号-京ICP备2021028793号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×