1. 程式人生 > >學無止境(1)關於Mybatis註解多表新增資料操作

學無止境(1)關於Mybatis註解多表新增資料操作

今天是2017年11月28日!
今天起,正式開啟學無止境系列,其實也沒什麼,就是記錄下自己在編碼中遇到的問題,學無止境嘛,遇到問題就要解決問題。

今天在用Mybatis+springMVC+spring做一個小練習,所有配置全部用的註解,之前對於Mybatis的學習,只是對配置方式掌握的還行,對於註解沒有學到位。這次又全部用註解,所以遇到一個問題,就是多表新增資料。之前只會多表聯查,練習的時候查詢也還不是很會,還得看之前寫過的例子,總結下來就是,自己用的太少,遺忘性有點大。

好了,接下來正式分析這次遇到的問題!

這次練習寫的是一個論壇網站,把顯示寫完之後是一個新增操作,顯示也是聯查查詢,之前沒有寫過用註解聯表新增,所以今天遇到就一臉懵逼。網上查也沒有查到個所以然,最後還是通過我們老姐給我講解,慢慢理解到了。

這裡總結下思路:由於是多表查詢,插入的資料是多個表裡面的部分列名,我們可以先把需要插入的資料封裝成一個Bean。由於表與表之間的主外來鍵關係,插入資料就得分先後順序,先插入沒有外來鍵一方的資料(封裝方法),再插入有外來鍵一方的資料(封裝方法)。在有外來鍵的一方,通過外來鍵將新生成的資料連線。怎麼產生聯絡呢?就是你先插入的資料已經生成一條記錄, 在資料庫裡就會產生一個ID,再到有外來鍵一方的方法中,通過外來鍵,將兩表建立聯絡。就會生成一個新的新增資料。

程式碼如下:
1:封裝Bean,這裡是兩個類中的一部分屬性
這裡寫圖片描述

public class TopiceBean {
    private
String title; //標題 private String author; //作者 private String content; //類容 private Date submittime; //提交時間 private String forumname; //主題 private String manager; //版主 public String getTitle() { return title; } public void setTitle(String title) { this
.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Date getSubmittime() { return submittime; } public void setSubmittime(Date submittime) { this.submittime = submittime; } public String getForumname() { return forumname; } public void setForumname(String forumname) { this.forumname = forumname; } public String getManager() { return manager; } public void setManager(String manager) { this.manager = manager; } }

2:先新增沒有外來鍵一方的數:mapper

@Insert("insert into tb_forum (forumname,manager) values(#{topiceBean.forumname},#{topiceBean.manager})")
    public int addForumnameAndManager(@Param("topiceBean")TopiceBean topiceBean);

3:新增有主鍵一方的資料,這裡注意的是:外來鍵連線為新生成的ID,可以新增最大ID,通過子查詢

    @Insert("insert into tb_topic (title,author,content,submittime,forumid) values(#{topiceBean.title},#{topiceBean.author},#{topiceBean.content},#{topiceBean.submittime},(select max(id) from tb_forum))")
    public int addTopice(@Param("topiceBean")TopiceBean topiceBean);

4:編寫Dao層:

public int addTopic(TopiceBean topiceBean);

5:編寫Dao層實現類:通過springIOC容器控制反轉,依賴注入,需要把mapper全部注入進來,在方法裡,注意先後順序。
這裡寫圖片描述

@Component
public class TopiceDaoImpl implements ITopiceDao{

    @Autowired
    private ITopiceMapper topiceMapper;

    @Autowired
    private IForumMapper forumMapper;

    //新增帖子
    @Override
    public int addTopic(TopiceBean topiceBean) {
        int result = forumMapper.addForumnameAndManager(topiceBean);
        int result2 = topiceMapper.addTopice(topiceBean);
        if(result>0 && result2>0) {
            return 1;
        }else {
            return 0;
        }
    }
}

6:接下來就是業務介面,業務實現類,最後Controller頁面控制器,也是通過依賴注入,一層一層的呼叫。最後返回一個新增受影響行數。

                                            以此記錄!