1、ResultMap
resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSet 数据提取代码中解放出来, 并在一些情形下允许你做一些 JDBC 不支持的事情。 实际上,在对复杂语句进行联合映射的时候,它很可能可以代替数千行的同等功能的代码。
2、ResultMap的应用场景
<resultMap id="userResultMap" type=“user">
<id property="id" column="user_id" />
<result property="username" column="user_name"/>
<result property="password" column="hashed_password"/>
</resultMap>
<select id="queryUser" resultMap="userResultMap">
SELECT user_id, user_name, hashed_password
FROM user
WHERE id=#{id}
</select>
针对上面这种数据库表字段命名与实体类属性名不能精准匹配的场景我们可以使用resultMap进行转换,当然针对此种场景使用别名是更好的解决方案。resultMap更优秀地方在于高级结果映射
3、在MySQL数据库中创建表和数据
创建教师表和学生表,这里我们假设一个老师只负责教一个学生,那么老师和学生之间的关系就是一种一对一的关系。
4、定义实体类
TeacherBean,TeacherBean是teacher表对应的实体类
/**
* @author xuehj2016
*/
public class TeacherBean {
private int tid;
private String tname;
private String tsex;
public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
public String getTsex() {
return tsex;
}
public void setTsex(String tsex) {
this.tsex = tsex;
}
}
StudentBean,StudentBean是student表对应的实体类
/**
* @author xuehj2016
*/
public class StudentBean {
private int id;
private String name;
private String sex;
private int tid;
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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
}
定义操作 person 表的sql映射文件personMapper.xml