高级进阶 必然有 表与表之间的关系

  • 一对一 关系 :表与表 共用一个主键,或者两张表各有一个字段对应
  • 一对多 关系 :
  • 多对多 关系 :有中间表 维护 其他表之间的主键关系

一对一查询

表关系:用户表 与 订单表 模型

一个订单 只属于一个用户:即 我想查询一个订单,顺便获取用户数据

引入 一个 新标签 resultMap、id、result 、association标签

标签
id:主键所用的标签
result :非主键所用的标签

属性
column:sql查询出来的字段名
property:Java对象的属性名

<resultMap id = "orderMap1" type = "order">
  <id column="oid" property="id"></id>
  <result column = "total" property = "total"></result>
  <result column = "username" property = "user.username"></result>
  <result column = "password" property = "user.password"></result>
</resultMap>

<resultMap id = "orderMap2" type = "order">
  <id column="oid" property="id"></id>
  <result column = "total" property = "total"></result>

    property :当前实体中的属性名
    javaType :当前实体中的属性类型
  <association property= "user" javaType = "User">
    <id column = "uid" property = "id"></id>
    <result column = "username" property = "user.username"></result>
    <result column = "password" property = "password"></result>
  </association>

</resultMap>

<select id = "byOrderFindUser" resultMap = "orderMap1">
    select * ,o.id , u.id from order o,user u where o.id = u.id
</select>

一对多查询

表关系:用户表 与 订单表 模型

即 我想通过一个 用户 查询他的所有订单

引入 新标签 collection


<resultMap id = "orderMap1" type = "order">
  <id column="uid" property="id"></id>

  <result column = "username" property = "user.username"></result>
  <result column = "password" property = "user.password"></result>
property:属性名称
ofType:集合中的数据类型

  <collection property="orderList" ofType="Order">
       <id column="oid" property="id"></id>
       <result column = "total" property = "total"></result>
  </collection>
</resultMap>


<select id = "byOrderFindUser" resultMap = "orderMap1">
    select * ,o.id , u.id from user o,user u where o.id = u.id
</select>

多对多查询

表关系:用户表 与 角色表 与 用户和角色表的内容 模型

还是那句话,你只看到了大佬轻松解决问题的光鲜,却不记得当初人家死磕Bug的痛苦。

万物皆入轮回,谁也躲不掉!

以上文章,均是我实际体验,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,支持下原创,请勿直接盗用,有条件的可以开通个会员支持下,谢谢!!!

Java Code Study » 2 Mybatis 高级进阶

招聘、单纯问问题,都可以联系我

加我QQ 公司缺人,拉我入伙