首先 數據庫量表之間字段關系(沒有主外鍵)
studentmajor表的id字段對應student表里major字段
兩個實體類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package com.model; import java.util.Date; public class Student { private Integer sno; private String sname; private String ssex; private Integer sclass; private StudentMajor studentmajor; public Student() { super (); } public Student(Integer sno, String sname, String ssex, Integer sclass, StudentMajor studentmajor) { super (); this .sno = sno; this .sname = sname; this .ssex = ssex; this .sclass = sclass; this .studentmajor = studentmajor; } public StudentMajor getStudentmajor() { return studentmajor; } public void setStudentmajor(StudentMajor studentmajor) { this .studentmajor = studentmajor; } public Integer getSno() { return sno; } public void setSno(Integer sno) { this .sno = sno; } public String getSname() { return sname; } public void setSname(String sname) { this .sname = sname; } public String getSsex() { return ssex; } public void setSsex(String ssex) { this .ssex = ssex; } @Override public String toString() { return "Student [sno=" + sno + ", sname=" + sname + ", ssex=" + ssex + ", sclass=" + sclass + ", studentmajor=" + studentmajor + "]" ; } public Integer getSclass() { return sclass; } public void setSclass(Integer sclass) { this .sclass = sclass; } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
package com.model; import java.util.List; public class StudentMajor { private Integer id; private String mcode; private String mname; private List<Student> students; public StudentMajor() { super (); } public StudentMajor(Integer id, String mcode, String mname, List<Student> students) { super (); this .id = id; this .mcode = mcode; this .mname = mname; this .students = students; } @Override public String toString() { return "StudentMajor [id=" + id + ", mcode=" + mcode + ", mname=" + mname + ", students=" + students + "]" ; } public Integer getId() { return id; } public void setId(Integer id) { this .id = id; } public String getMcode() { return mcode; } public void setMcode(String mcode) { this .mcode = mcode; } public String getMname() { return mname; } public void setMname(String mname) { this .mname = mname; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this .students = students; } } |
定義兩個接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package com.dao; import java.util.List; import java.util.Map; import com.model.Student; public interface StudentMapper { /** * 全表查詢 */ public List<Student> selectall(); /** * 根據專業查人員,給一對多用 */ public List<Student> selectz(Integer major); } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package com.dao; import java.util.List; import com.model.StudentMajor; public interface StudentMajorMapper { /** * 全表查詢 * @return */ public List<StudentMajor> selectAll(); /** * 根據主鍵查數據,給多對一用 * @param id * @return */ public StudentMajor select(Integer id); } |
定義兩個實體類的映射方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?xml version= "1.0" encoding= "UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace= "com.dao.StudentMapper" > <!-- 多對一查詢 --> <resultMap type= "Student" id= "slist" > <!-- 跟一對一一樣用association標簽,實體類定義的成員,要跟數據庫字段名對應上 --> <association property= "studentmajor" column= "major" select= "com.dao.StudentMajorMapper.select" /> <!-- 用接口里定義的方法,根據student表中的major字段查出對應數據 --> </resultMap> <!-- 查全部 --> <select id= "selectall" resultMap= "slist" > select * from student </select> <!-- 根據專業查人員 --> <select id= "selectz" parameterType= "Integer" resultType= "student" > select * from student s where s.major=#{major} </select> </mapper> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?xml version= "1.0" encoding= "UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace= "com.dao.StudentMajorMapper" > <!-- 一對多查詢關聯 --> <resultMap type= "StudentMajor" id= "slist" > <!-- 實體類屬性對應數據庫的主鍵字段,不然主鍵會查不到 --> <id property= "id" column= "id" /> <!-- 用collection標簽 ,也是實體類屬性要對應數據庫字段--> <collection property= "students" column= "id" select= "com.dao.StudentMapper.selectz" > </collection> </resultMap> <!-- 全表查詢 --> <select id= "selectAll" resultMap= "slist" > select * from studentmajor </select> <!-- 根據主鍵查 --> <select id= "select" parameterType= "Integer" resultType= "StudentMajor" > select * from studentmajor where id=#{id} </select> </mapper> |
JUnit測試
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
package com.util; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.dao.StudentMajorMapper; import com.dao.StudentMapper; import com.model.Student; import com.model.StudentMajor; public class JJJtest { private SqlSession ss; private StudentMapper sm; private StudentMajorMapper smm; @Before public void setUp() throws Exception { ss=SqlSessionUtil.getSqlSession(); sm=ss.getMapper(StudentMapper. class ); smm=ss.getMapper(StudentMajorMapper. class ); } @After public void tearDown() throws Exception { ss.commit(); ss.close(); } //一對多查詢 public void test() { List<StudentMajor> list=smm.selectAll(); for (StudentMajor a:list){ System.out.println(a); } } //根據專業查人員,給一對多用 public void selectz(){ List<Student> l=sm.selectz( 3 ); for (Student a:l){ System.out.println(a); } } //多對一查詢 @Test public void selectall() { List<Student> st=sm.selectall(); for (Student tt:st){ System.out.println(tt); } } //根據主鍵查詢,給多對一用 public void select(){ StudentMajor a=smm.select( 1 ); System.out.println(a); } } |
一對多查詢結果
多對一查詢結果
以上所述是小編給大家介紹的Mybatis 一對多和多對一關聯查詢問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:http://www.cnblogs.com/hq233/archive/2017/04/23/6752335.html