• 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语句进行查询的,这里就不重复了。

  • 相关阅读:
    Flutter横屏实践
    Word控件Aspose.Words for .NET.更新至最新v22.6,更多功能增强及漏洞修复
    【Leetcode】2422. Merge Operations to Turn Array Into a Palindrome
    php中$this->的解释
    ConcurrentModificationException日志关键字报警引发的思考
    Linuxptp安装部署
    ENVI:分类后处理_小斑块去除_Majority/Minority处理、聚类处理、过滤处理等
    宿主物种丨Jackson告诉你选择二抗的注意事项
    前端---ES5知识点小梳理二
    c高级day2
  • 原文地址:https://blog.csdn.net/m0_73499047/article/details/132997806