• Mybatis的一对一和一对多的标签介绍


    “一对一”可以使用于一个订单对应一个用户,而“一对多”可以使用于一个用户对应多个订单。使用的基本方法都是基于sql的增删改查,也就是在xml文件里面使用下面几个标签:

    1、insert标签:在某个字段下插入一个值

    2、delete标签:删除某个id的数据

    3、select标签:根据某个id查询一个数据,也可以查询所有数据(这样返回一个list)、还可以进行模糊查询、多条件查询

    4、update标签:更新某个id的数据


    一对一

    普通的增删改查只是针对于一个表里面的数据进行修改。但是如果有两个表,他们之间是有关连的,比如一个订单表,一个用户表,一个订单只能对应一个用户,(利用之前的增删查改可以将每个订单封装到一个对象中),现在想利用这两个表的联系,将每个订单对应的用户信息封装到用户类里面(也就是订单类里面有一个属性是用户类)。这就用到一对一,最后我们返回一个订单list,类型为Order,这个类里面有个User类型的属性。

     

     主要要注意的是xml文件的使用(因为测试类都是固定的套路),里面用到标签,而对于一对一里面的User使用标签。这用于将数据库里面的数据映射到对应的pojo类里面,将数据库的字段名和类的属性名联系到一起,外面这部分是订单类pojo和订单表的映射,第一行的id用于后面的调用。

    1. <resultMap type="Order" id="orderUserResultMap">
    2. <id property="id" column="id" />
    3. <result property="userId" column="user_id" />
    4. <result property="number" column="number" />
    5. <result property="createtime" column="createtime" />
    6. <result property="note" column="note" />
    7. <association property="user" javaType="User">
    8. <id property="id" column="user_id" />
    9. <result property="username" column="username" />
    10. <result property="address" column="address" />
    11. association>
    12. resultMap>

    这里的xml文件下面还需要添加sql的语句,用于引导数据库如何将两个表联系到一起,标准是user表里面的id等于order表里面的user_id:

    1. <select id="queryOrderUserResultMap" resultMap="orderUserResultMap">
    2. SELECT
    3. o.id,
    4. o.user_id,
    5. o.number,
    6. o.createtime,
    7. o.note,
    8. u.username,
    9. u.address
    10. FROM
    11. `order` o
    12. LEFT JOIN `user` u ON o.user_id = u.id
    13. select>

     上面出现了一个列名后面跟着一个字母,比如:'order'  o,这表示给这个表起一个别名叫o,这样前面的SELECT就可以使用别名了。还可以在SELECT里面给每个变量起一个别名,然后在resultmap标签里面使用别名,也可以,这个可以用来放置数据库里面的某两列重名(很有用)。


    一对多 

     一个用户对应多个订单,因此在User类里面有一个List属性,用于存放不同的订单(而订单类里面只有一个User属性)。这里的一对多需要使用collection标签

     

    1. <resultMap type="User" id="userOrderResultMap">
    2. <id property="id" column="id" />
    3. <result property="username" column="username" />
    4. <result property="birthday" column="birthday" />
    5. <result property="sex" column="sex" />
    6. <result property="address" column="address" />
    7. <collection property="orders" javaType="list" ofType="Order">
    8. <id property="id" column="oid" />
    9. <result property="number" column="number" />
    10. <result property="createtime" column="createtime" />
    11. <result property="note" column="note" />
    12. collection>
    13. resultMap>

     下面也是需要使用sql语句进行查询的,这里就不重复了。

  • 相关阅读:
    Pytorch实用教程:为什么定义模型时,没有输入形参,但是使用时可以直接传入输入数据?
    React 中的 useLayoutEffect 钩子函数
    Unlikely argument type for equals(): SysUser seems to be unrelated to String
    淘宝APP原数据如何获取??
    Angular, React,Vus三大主流前端开发框架Setup
    LeetCode 40 Java 实现
    Spring Boot + Vue的网上商城之物流系统实现
    如何开手续费低靠谱正规的期货账户呢?
    论文笔记:Multi-Concept Customization of Text-to-Image Diffusion
    【Qt控件之QListWidget】介绍及使用,利用QListWidget、QToolButton、和布局控件实现抽屉式组合控件
  • 原文地址:https://blog.csdn.net/m0_73499047/article/details/132997806