首先 数据库量表之间字段关系(没有主外键)
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