首頁 > 軟體

關於mybatis一對一查詢一對多查詢遇到的問題

2022-05-30 22:03:58

springboot整合mybatis專案
部落格系統
文章,相簿,評論,標籤,等表
IDEA為最新版2021.3.3,mysql資料庫為最新版Navicat
(或許有些欄位不支援特定的命名)

也是醉了,以前idea還是19版的,navicat也是老版本的時候mybatis關聯查詢mapper操作能正常執行,拿到相應欄位,並封裝,但最近寫專案過程中遇到一個離譜的是,過了好久才發現,

當關聯查詢時,無論一對一還是一對多
除了需要注意javaType和ofType之外,還應該注意各表主鍵不能同一名稱

實體類文章

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Article implements Serializable {
    private Integer id;
    private Integer authorId;
    private String title;
    private String content;
    private Timestamp date;//private LocalDate date;
    private Users user;
    private List<Comment> commentList;
    private List<ArticleTag> articleTagList;
}

接下來是對文章進行操作,要求查詢全部文章,並關聯查詢作者,文章標籤(一個文章多個標籤)

先看一下我下面程式碼塊的寫法,注意一對一,一對多的各個實體查詢時的id,都是拿的資料庫的id欄位,只有標籤被我改為了tag_id

<select id="queryAllArticles" resultMap="ArticleList">
        select a.*,u.*,t.*
        from article a
                 join users u on a.authorid = u.id
                 left outer join article_tag t on a.id = t.article_id
    </select>
    <resultMap id="ArticleList" type="article">
        <id column="id" property="id"/>
        <result column="authorid" property="authorId"/>
        <result column="title" property="title"/>
        <result column="content" property="content"/>
        <result column="date" property="date"/>
        <association property="user" javaType="users">
            <id column="id" property="id"/>
            <result column="pet_name" property="petName"/>
            <result column="headportrait" property="headPortrait"/>
        </association>
        <collection property="articleTagList" ofType="articleTag">
            <id column="tag_id" property="tagId"/>
            <result column="article_id" property="articleId"/>
            <result column="tag_content" property="tag"/>
        </collection>
    </resultMap>

如下圖
所以當我測試的時候能正常根據id拿到每張表的同一主鍵名稱id嗎

並不能拿到
控制檯僅僅正確輸出了標籤list中的tag_id,沒錯,細心點,我也是最後才發現,它nn的,上面輸出的user(文章作者)他的id封裝錯了,他的id是這篇文章的id,所以,sql我自此所有表的主鍵不都全命名為id了,防止此處再烙下病根,而且資料庫欄位在命名時,我發現欄位名字為describe和tag都查不到資料,本來想簡簡單單命名的資料庫表,也得上心了拜拜了~~改bug去了


IT145.com E-mail:sddin#qq.com