• (Java)Mybatis学习笔记(四)


    前言

    继续学习自定义映射,今天便是mybatis初步学完的最后一天了,加油,奥里给~

    搭建MyBatis框架

    步骤说明

    创建表时把email打成了eamil,导致报了下错

    1️⃣在mybatis下创建一个module

    2️⃣配置pom.xml文件,导入相关依赖及配置打包类型

    3️⃣创建mybatis核心配置文件并配置

    4️⃣创建日志文件及properties文件

    5️⃣创建工具类

    6️⃣创建相关数据库表(不管是多对一还是一对多,都需要在多的一方设置一的主键

    7️⃣ 创建实体类

    8️⃣创建mapper接口及映射文件

    9️⃣为了保证IDEA快速启动,对于不常用的module设置为不加载也就是打开时对其索引不进行扫描(可做可不做)

    步骤实现

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    映射关系

    字段别名

    通过字段别名解决字段名和属性名的映射关系

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'mybatis.t_emp' doesn't exist

    原因:数据库中表为t__emp而映射文件写的表名为t_emp,粗心导致

    在这里插入图片描述

    发现字段名与属性名不一致查询为null

    解决办法:通过字段别名解决字段名和属性名不一致

    在这里插入图片描述

    全局配置mapUnderscoreToCamelCase

    将_自动映射为驼峰,emp_name:empName

    <settings>
            <setting name="mapUnderscoreToCamelCase" value=""/>
    </settings>
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在这里插入图片描述

    resultMap

    通过resultMap解决字段名和属性名的映射关系

    在这里插入图片描述
    在这里插入图片描述

    • resultMap:设置自定义映射关系

    • id:唯一标识,不能重复

    • type:设置映射关系中的实体类类型

    • id设置主键映射关系,result设置普通字段映射关系

    • property:设置映射关系中的属性名,必须是type属性所设置的实体类类型中的属性名

    • column:设置映射关系中的字段名,必须是sql语句查询出的字段名

    多对一映射

    级联方式

    通过级联属性赋值解决多对一的映射关系

    左连接查询以查询左表为主,右连接查询以查询右表为主

    在这里插入图片描述
    关于mysql级联查询,可参考这篇文章

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    使用association

    在这里插入图片描述

    在这里插入图片描述

    分步查询

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    • select:设置分步查询的sql的唯一标识(namespace.SQLId或mapper接口的全类名.方法名)
    • column:设置分布查询的条件

    延迟加载

    • 分步查询的优点:可以实现延迟加载,但必须在核心配置文件中设置全局配置信息

    • LazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载

    • aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载

    • 此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。此时可通过association和collection中的fetchType属性设置当前的分步查询是否使用延迟加载,fetchType=“lazy(延迟加载)|eager(立即加载)"
      在这里插入图片描述
      在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    一对多映射

    对一对应对象,对多对应集合

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    因为走神忽视了property=emps的含义导致报错,解决这个错误花了10分钟左右

    collection:处理一对多的映射关系

    ofType:表示该属性所对应的集合中存储数据的类型

    property:映射关系的属性名(这里对应集合属性)

    分步查询

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    动态SQL

    MyBatis框架的动态SQL技术是一种根据特定条件动态拼接SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题

    if标签

    多条件查询(加个恒成立条件1=1)

    if根据标签中test属性所对应的表达式决定标签中的内容是否需要拼接到SQL中

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    小结

    到今天为止,花了4天时间把mybatis给肝完了,当然这里也只是初步完成了mybatis系统学习,总的来说,理解上难度不大,主要是杨博超老师讲的很好,实践起来在刚开始会稍有难度,但还好,接下来就是SpringMVC了,加油,奥里给~

    简单回顾

  • 相关阅读:
    为什么说游戏行业是个高危行业?
    Robinhood基于Apache Hudi的下一代数据湖实践
    四十四、模板层
    解决Windows 10 家庭中文版没有组策略编辑器的问题
    Vue | Vue 核心 +
    JSD-2204-总结SpringMvc,MyBatis,SpringBoot框架-Day09
    补盲激光雷达大爆发,各路产品谁领风骚?
    2310C++构造对象
    worthington影响酶活性的因素丨worthington酶浓度
    B-000 硬件工程师手册
  • 原文地址:https://blog.csdn.net/lion_no_back/article/details/128180571