本文共 3122 字,大约阅读时间需要 10 分钟。
Student中包含Address
package com.skymr.mybatis.model;public class Student { private int id; private String name; private int age; private Address address; /** * 必须要有无参构造器,有参构造器可有可无(至少我测试时是这样) * 如果没有无参构造器,只有有参构造器,会报错 */ public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public String toString(){ return "["+name+","+age+","+address+"]"; } }
package com.skymr.mybatis.model;public class Address { //省 private String province; //市 private String city; //区 private String region; private int id; public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getRegion() { return region; } public void setRegion(String region) { this.region = region; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String toString(){ return "[" + id+","+this.province+","+this.city+","+this.region+"]"; }}
package com.skymr.mybatis.mappers;import java.util.List;import com.skymr.mybatis.model.Student;public interface StudentMapper { public Student getStudent(int id); public ListgetAllStudents(); //取得所有学生,带地址 public List getAllStudentsWithAddr(); //取得学生,带地址 public Student getStudentWithAddr(int id);}
方式一:对象集联
这种方式不太好,重用性差.
方式二:
将Address独立出来,然后使用association关联到Address的resultMap
方式三:
方式四:推荐的方式
这种方式还是主要是应用association标签
首先,为Address类加入AddressMapper类与AddressMapper.xml
package com.skymr.mybatis.mappers;import com.skymr.mybatis.model.Address;public interface AddressMapper { public Address getAddress(int id);}
其次,修改StudentMapper.xml
使用了association标签,定义column与select属性
column: 传入mybatis_Student表的外键address_id.
select: 调用AddressMapper的getAddress方法
推演过程:查询一条student数据,再根据address_id查询address表的一条数据.
思考:不知道可不可以这样想,如果查询1000条student,再分别查address表的1000条数据,这样查询次数就是1001次了,不影响性能吗?
转载地址:http://dnihj.baihongyu.com/