在mybatis的學習中,會發現經常需要傳參,這里以上一節寫的實體類為基礎,當我們要添加一個員工時,需要添加員工的基本信息,以及所屬部門,按照以前的方法,在實體類中,添加部門id屬性,然后通過有參構造的方法傳遞對象,讀取對象的部門id就可以了,但是現在使用mybatis時,因為是一對多的關系,因此實體類中設置的屬性是Dept屬性的,沒有did,因此沒有辦法通過有參構造的方法來傳遞參數,這時就要想辦法將部門的id傳遞過去。因此需要給之前的實體類的有參構造進行修改,
這樣就員工的對象就可以使用有參構造來創建對象,那么添加員工的信息的dao層以及mapper文件如下:
?
這是就會出現問題,分析原因:因為dao層在傳參時,如果參數是實體的話,就可以直接在mapper中設置參數類型來解析,但是如果不是實體的話,就沒辦法解析了,因此當參數不是實體時,需要 用注解。
具體如下:
當使用@param注解傳參時,insert標簽可以不寫參數類型型屬性,因為參數有多個屬性,所以是通過注解來區分的,當參數為對象時,調用對象的屬性為 參數.屬性,通過.來調用,就像本例中的emp.ename
在這里要說明,在mapper文件中使用#{}傳遞參數,當傳遞多個參數時, dao層@param()內的值就是在mapper文件中#{}變量的名字,通過@param()注解來傳遞參數。單個參數可以不需要設置注解,需要指定參數調用的名字就需要設置
在mybatis中傳參分為參數傳遞(需要加注解),實體傳參,map傳參。