(四)MyBatis关系映射

第一节:一对一关系实现

需要实现一对一的关系,首先我们有两张表,t-addree和t_student。

1 CREATE TABLE `t_address` (
2   `id` int(11) NOT NULL AUTO_INCREMENT,
3   `sheng` varchar(20) DEFAULT NULL,
4   `shi` varchar(20) DEFAULT NULL,
5   `qu` varchar(20) DEFAULT NULL,
6   PRIMARY KEY (`id`)
7 ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
1 insert  into `t_address`(`id`,`sheng`,`shi`,`qu`) values (1,'江苏省','苏州市','姑苏区'),(2,'江苏省','南京市','鼓楼区');
1 CREATE TABLE `t_student` (
2   `id` int(11) NOT NULL AUTO_INCREMENT,
3   `name` varchar(20) DEFAULT NULL,
4   `age` int(11) DEFAULT NULL,
5   `addressId` int(11) DEFAULT NULL,
6   PRIMARY KEY (`id`)
7 ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
1 insert  into `t_student`(`id`,`name`,`age`,`addressId`) values (1,'张三',10,1),(2,'李四',11,2),(3,'李四',11,2),(4,'李四',11,2),(5,'李四',11,2),(6,'李四',11,2),(7,'李四',11,2);

然后写model层

Address.java

 1 package com.javaxk.model;
 2 
 3 public class Address {
 4 
 5     private Integer id;
 6     private String sheng;
 7     private String shi;
 8     private String qu;
 9     
10     public Integer getId() {
11         return id;
12     }
13     public void setId(Integer id) {
14         this.id = id;
15     }
16     public String getSheng() {
17         return sheng;
18     }
19     public void setSheng(String sheng) {
20         this.sheng = sheng;
21     }
22     public String getShi() {
23         return shi;
24     }
25     public void setShi(String shi) {
26         this.shi = shi;
27     }
28     public String getQu() {
29         return qu;
30     }
31     public void setQu(String qu) {
32         this.qu = qu;
33     }
34     @Override
35     public String toString() {
36         return "Address [id=" + id + ", sheng=" + sheng + ", shi=" + shi
37                 + ", qu=" + qu + "]";
38     }
39     
40     
41 }

Student.java

 1 package com.javaxk.model;
 2 
 3 public class Student {
 4 
 5     private Integer id;
 6     private String name;
 7     private Integer age;
 8     private Address address;
 9     
10     public Student() {
11         super();
12         // TODO Auto-generated constructor stub
13     }
14     
15     public Student(Integer id, String name, Integer age) {
16         super();
17         this.id = id;
18         this.name = name;
19         this.age = age;
20     }
21 
22     public Student(String name, Integer age) {
23         super();
24         this.name = name;
25         this.age = age;
26     }
27 
28     public Integer getId() {
29         return id;
30     }
31     public void setId(Integer id) {
32         this.id = id;
33     }
34     public String getName() {
35         return name;
36     }
37     public void setName(String name) {
38         this.name = name;
39     }
40     public Integer getAge() {
41         return age;
42     }
43     public void setAge(Integer age) {
44         this.age = age;
45     }
46     public Address getAddress() {
47         return address;
48     }
49 
50 
51     public void setAddress(Address address) {
52         this.address = address;
53     }
54 
55 
56 
57 
58     @Override
59     public String toString() {
60         return "Student [id=" + id + ", name=" + name + ", age=" + age
61                 + ", address=" + address + "]";
62     }
63 
64 
65 
66     
67     
68     
69 }

mappers映射类

AddressMapper.java

1 package com.javaxk.mappers;
2 
3 import com.javaxk.model.Address;
4 
5 public interface AddressMapper {
6 
7     public Address findById(Integer id);
8 
9 }

StudentMapper.java

 1 package com.javaxk.mappers;
 2 
 3 import java.util.List;
 4 
 5 import com.javaxk.model.Student;
 6 
 7 public interface StudentMapper {
 8 
 9     
10     public Student findStudentWithAddress(Integer id);
11 }

主程序运行类

StudentTest3.java

 1 package com.javaxk.service;
 2 
 3 import java.util.List;
 4 
 5 import org.apache.ibatis.session.SqlSession;
 6 import org.apache.log4j.Logger;
 7 import org.junit.After;
 8 import org.junit.Before;
 9 import org.junit.Test;
10 
11 import com.javaxk.mappers.StudentMapper;
12 import com.javaxk.model.Student;
13 import com.javaxk.util.SqlSessionFactoryUtil;
14 
15 public class StudentTest3 {
16 
17     private static Logger logger=Logger.getLogger(StudentTest.class);
18     private SqlSession sqlSession=null;
19     private StudentMapper studentMapper=null;
20     
21     /**
22      * 测试方法前调用
23      * @throws Exception
24      */
25     @Before
26     public void setUp() throws Exception {
27         sqlSession=SqlSessionFactoryUtil.openSession();
28         studentMapper=sqlSession.getMapper(StudentMapper.class);
29     }
30 
31     /**
32      * 测试方法后调用
33      * @throws Exception
34      */
35     @After
36     public void tearDown() throws Exception {
37         sqlSession.close();
38     }
39 
40     @Test
41     public void testFindStudentWithAddress() {
42         logger.info("查询学生(带地址)");
43         Student student=studentMapper.findStudentWithAddress(1);
44         System.out.println(student);
45     }
46     
47 }

 Mapper映射文件的不同写法。。。

AddressMapper.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.javaxk.mappers.AddressMapper">
 6 
 7     <resultMap type="Address" id="AddressResult">
 8         <result property="id" column="id"/>
 9         <result property="sheng" column="sheng"/>
10         <result property="shi" column="shi"/>
11         <result property="qu" column="qu"/>
12     </resultMap>
13     
14     <select id="findById" parameterType="Integer" resultType="Address">
15         select * from t_address where id=#{id}
16     </select>
17 
18 </mapper> 

第一种方式:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.javaxk.mappers.StudentMapper">
 6 
 7     <resultMap type="Student" id="StudentResult">
 8         <id property="id" column="id"/>
 9         <result property="name" column="name"/>
10         <result property="age" column="age"/>
11         
12         <result property="address.id" column="addressId"/>
13         <result property="address.sheng" column="sheng"/>
14         <result property="address.shi" column="shi"/>
15         <result property="address.qu" column="qu"/>
16     </resultMap>
17     <select id="findStudentWithAddress" resultMap="StudentResult" parameterType="Integer">
18         select * from t_student t1,t_address t2 where t1.addressId=t2.id and t1.id=#{id}
19     </select>
20 </mapper> 

第二种方式:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.javaxk.mappers.StudentMapper">
 6 <resultMap type="Address" id="AddressResult">
 7         <result property="id" column="id"/>
 8         <result property="sheng" column="sheng"/>
 9         <result property="shi" column="shi"/>
10         <result property="qu" column="qu"/>
11 </resultMap>
12     
13 <resultMap type="Student" id="StudentResult">
14         <id property="id" column="id"/>
15         <result property="name" column="name"/>
16         <result property="age" column="age"/>
17         <association property="address" resultMap="AddressResult"/>
18 </resultMap>
19 
20  
21 <select id="findStudentWithAddress" resultMap="StudentResult" parameterType="Integer">
22         select * from t_student t1,t_address t2 where t1.addressId=t2.id and t1.id=#{id}
23     </select>
24 </mapper> 

第三种方式:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.javaxk.mappers.StudentMapper">
 6      <resultMap type="Student" id="StudentResult">
 7         <id property="id" column="id"/>
 8         <result property="name" column="name"/>
 9         <result property="age" column="age"/>
10         <association property="address" javaType="Address">
11             <result property="id" column="id"/>
12             <result property="sheng" column="sheng"/>
13             <result property="shi" column="shi"/>
14             <result property="qu" column="qu"/>
15         </association>
16     </resultMap> 
17 
18     <select id="findStudentWithAddress" resultMap="StudentResult" parameterType="Integer">
19         select * from t_student t1,t_address t2 where t1.addressId=t2.id and t1.id=#{id}
20     </select>
21 
22 </mapper> 

第四种方式:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.javaxk.mappers.StudentMapper">
 6     <resultMap type="Student" id="StudentResult">
 7         <id property="id" column="id"/>
 8         <result property="name" column="name"/>
 9         <result property="age" column="age"/>
10         <association property="address" column="id" select="com.javaxk.mappers.AddressMapper.findById"></association>
11     </resultMap>
12     
13     <select id="findStudentWithAddress" resultMap="StudentResult" parameterType="Integer">
14         select * from t_student t1,t_address t2 where t1.addressId=t2.id and t1.id=#{id}
15     </select>
16 
17 </mapper> 

第二节:一对多关系实现

StudentMapper.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.javaxk.mappers.StudentMapper">
 6 
 7     <resultMap type="Student" id="StudentResult">
 8         <id property="id" column="id"/>
 9         <result property="name" column="name"/>
10         <result property="age" column="age"/>
11         <association property="address" column="addressId" select="com.javaxk.mappers.AddressMapper.findById"></association>
12         <association property="grade" column="gradeId" select="com.javaxk.mappers.GradeMapper.findById"></association>
13     </resultMap>
14     
15     <select id="findStudentWithAddress" resultMap="StudentResult" parameterType="Integer">
16         select * from t_student t1,t_address t2 where t1.addressId=t2.id and t1.id=#{id}
17     </select>
18 
19 </mapper> 

AddressMapper.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.javaxk.mappers.AddressMapper">
 6 
 7     <resultMap type="Address" id="AddressResult">
 8         <result property="id" column="id"/>
 9         <result property="sheng" column="sheng"/>
10         <result property="shi" column="shi"/>
11         <result property="qu" column="qu"/>
12     </resultMap>
13     
14     <select id="findById" parameterType="Integer" resultType="Address">
15         select * from t_address where id=#{id}
16     </select>
17 
18 </mapper> 

GradeMapper.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.javaxk.mappers.GradeMapper">
 6 
 7     <resultMap type="Grade" id="GradeResult">
 8         <result property="id" column="id"/>
 9         <result property="gradeName" column="gradeName"/>
10         
11     </resultMap>
12     
13     <select id="findById" parameterType="Integer" resultType="Grade">
14         select * from t_grade where id=#{id}
15     </select>
16 
17 </mapper> 

测试主类:

1     
2     @Test
3     public void testFindStudentWithGrade(){
4         logger.info("查询学生(带年级)");
5         Student student=studentMapper.findStudentWithAddress(1);
6         System.out.println(student);
7     }
原文地址:https://www.cnblogs.com/wishwzp/p/7082007.html