您好,登錄后才能下訂單哦!
怎么在mybatis中實現多對一關聯查詢?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
第一種關聯方式
1.修改實體類Student,追加關聯屬性,用于封裝關聯的數據
修改完以后重新生成get set方法還有toString方法
private Teacher teacher; private Classes classes;
2.修改TeacherMapper相關配置
1.接口類 增加
Teacher selectTeacherById(Integer tid);
2.xml映射文件 增加
<sql id="params">tid,tname</sql> <select id="selectTeacherById" resultType="Teacher"> select <include refid="params"></include> from teacher where tid=#{tid} </select>
3.修改ClassesMapper 相關配置
1.接口類 增加
Classes selectClassesById(Integer cid);
2.xml映射文件 增加
<resultMap type="Classes" id="clsMap"> <id property="cid" column="cid"></id> <result property="cname" column="cname"/> </resultMap> <select id="selectClassesById" resultMap="clsMap"> select * from classes where cid = #{cid} </select>
4.修改StudentMapper 相關配置
1.接口類 增加
Student selectStudentById(Integer sid);
2.xml映射文件 增加
ps:
多對一關聯屬性配置:
property:關聯對象名
javaType:關聯對象類型
select:引用的關聯查詢sql對應id名
column:引用的關聯查詢sql語句需要的參數
<resultMap type="Student" id="stuMap"> <id property="sid" column="sid"/> <result property="sname" column="sname"/> <result property="age" column="age"/> <result property="email" column="email"/> <association property="teacher" select="com.yc.dao.TeacherMapper.selectTeacherById" column="tid" javaType="Teacher"></association> <association property="classes" select="com.yc.dao.ClassesMapper.selectClassesById" column="cid" javaType="Classes"></association> </resultMap> <select id="selectStudentById" resultMap="stuMap"> select * from student where sid = #{sid} </select>
5.測試代碼
@Test public void test1() { Student stu = studentMapper.selectStudentById(100001); System.out.println(stu); }
1.修改實體類Student,追加關聯屬性,用于封裝關聯的數據
跟前面一樣的
2.修改studentMapper.xml映射文件
ps:接口里面的方法還是跟原來一樣的
<resultMap type="Student" id="stuMap"> <id property="sid" column="sid" /> <result property="sname" column="sname" /> <result property="age" column="age" /> <result property="email" column="email" /> <association property="teacher" javaType="Teacher"> <id property="tid" column="tid"></id> <result property="tname" column="tname" /> </association> <association property="classes" javaType="Classes"> <id property="cid" column="cid"></id> <result property="cname" column="cname" /> </association> </resultMap> <select id="selectStudentById" resultMap="stuMap"> select * from student s,teacher t,classes c where s.sid=#{sid} and s.tid = t.tid and s.cid=c.cid </select>
小結一下:個人感覺第二種方法是會簡單許多,只是說,因為查詢語句中,連接條件的限制,當cid或者tid為空時,查詢到的數據就會是null,而第一種的話,如果只是cid為空,至少還是會顯示student和teacher的相關信息
ps:student類和studentmapper接口類不變
1.修改全局配置文件的setting信息
<setting name="autoMappingBehavior" value="FULL" /> <setting name="mapUnderscoreToCamelCase" value="true" />
2. 修改studentMapper.xml映射文件
ps:
1.實體類的屬性名要和表字段名保存一致,或按照駝峰命名規則(屬性名:aColumn,字段名:A_COLUMN),settion屬性mapUnderscoreToCamelCase設置成true
2.關聯表的字段名不能有相同的名字
<resultMap type="Student" id="stuMap"> <association property="teacher" javaType="Teacher" /> <association property="classes" javaType="Classes" /> </resultMap> <select id="selectStudentById" resultMap="stuMap"> select * from student s,teacher t,classes c where s.sid = #{sid} and s.tid=t.tid and s.cid=c.cid </select>
關于怎么在mybatis中實現多對一關聯查詢問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。