浅谈mybatis多对一单向映射
2017-03-04 08:44
309 查看
刚刚在学mybatis,谈下我队多对一单向映射的看法,新手,有错误请指出,
mybatis的实体映射是通过在外键表中引入主键表的实体类的,
比如主键表为tb_clazz,外键表为tb_student,学生表的clazz_id作为外键引用到tb_clazz,
那么实体映射表为:
public class Clazz {
private Integer id;
private String code;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Override
public String toString(){
return "["+id+","+code+"]";
}
}
public class Student {
private Integer id;
private String name;
private String sex;
private Integer age;
private Clazz clazz;
public Integer getId() {
return id;
}
public void setId(Integer 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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Clazz getClazz() {
return clazz;
}
public void setClazz(Clazz clazz) {
this.clazz = clazz;
}
@Override
public String toString(){
return "["+id+","+name+","+sex+","+age+","+clazz.toString()+"]";
}
}
然后再xml中配置关系,通过resultMap实现
<resultMap type="org.fkit.domain.Student" id="studentResultMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="age" column="age"/>
<association property="clazz" column="clazz_id"
javaType="org.fkit.domain.Clazz" select="selectClazzWithId"
></association>
</resultMap>
<select id="selectClazzWithId" resultType="org.fkit.domain.Clazz">
select * from tb_clazz where id=#{id}
</select>
<select id="selectStudent" resultMap="studentResultMap">
select * from tb_student
</select>
因为表中存储的是id,但是实体映射类中存储的是实体,所有先需要根据表的id查询到实例,
DEBUG [main] -==> Preparing: select * from tb_student
DEBUG [main] -==> Parameters:
DEBUG [main] -====> Preparing: select * from tb_clazz where id=?
DEBUG [main] -====> Parameters: 1(Integer)
DEBUG [main] -<==== Total: 1
DEBUG [main] -====> Preparing: select * from tb_clazz where id=?
DEBUG [main] -====> Parameters: 2(Integer)
DEBUG [main] -<==== Total: 1
DEBUG [main] -<== Total: 4
由日志信息可以知道,先是查询tb_student表,然后对于外键在进行查询,但是并不重复查询
mybatis的实体映射是通过在外键表中引入主键表的实体类的,
比如主键表为tb_clazz,外键表为tb_student,学生表的clazz_id作为外键引用到tb_clazz,
那么实体映射表为:
public class Clazz {
private Integer id;
private String code;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Override
public String toString(){
return "["+id+","+code+"]";
}
}
public class Student {
private Integer id;
private String name;
private String sex;
private Integer age;
private Clazz clazz;
public Integer getId() {
return id;
}
public void setId(Integer 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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Clazz getClazz() {
return clazz;
}
public void setClazz(Clazz clazz) {
this.clazz = clazz;
}
@Override
public String toString(){
return "["+id+","+name+","+sex+","+age+","+clazz.toString()+"]";
}
}
然后再xml中配置关系,通过resultMap实现
<resultMap type="org.fkit.domain.Student" id="studentResultMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="age" column="age"/>
<association property="clazz" column="clazz_id"
javaType="org.fkit.domain.Clazz" select="selectClazzWithId"
></association>
</resultMap>
<select id="selectClazzWithId" resultType="org.fkit.domain.Clazz">
select * from tb_clazz where id=#{id}
</select>
<select id="selectStudent" resultMap="studentResultMap">
select * from tb_student
</select>
因为表中存储的是id,但是实体映射类中存储的是实体,所有先需要根据表的id查询到实例,
DEBUG [main] -==> Preparing: select * from tb_student
DEBUG [main] -==> Parameters:
DEBUG [main] -====> Preparing: select * from tb_clazz where id=?
DEBUG [main] -====> Parameters: 1(Integer)
DEBUG [main] -<==== Total: 1
DEBUG [main] -====> Preparing: select * from tb_clazz where id=?
DEBUG [main] -====> Parameters: 2(Integer)
DEBUG [main] -<==== Total: 1
DEBUG [main] -<== Total: 4
由日志信息可以知道,先是查询tb_student表,然后对于外键在进行查询,但是并不重复查询
相关文章推荐
- MyBatis查询结果集映射到JavaBean原理浅谈
- 浅谈MyBatis 之 高级映射/关联查询(四)
- MyBatis查询结果集映射到JavaBean原理浅谈
- MyBatis中的映射文件标签属性 parameterType
- 详解Java的MyBatis框架中SQL语句映射部分的编写
- MyBatis注解映射
- JPA的一对多映射(单向)
- hibernate之关于多对一单向关联映射
- Mybatis用xml文件映射的增删查改
- Mybatis 结果映射 常用的情况
- ORM框架Hibernate (四) 一对一单向、双向关联映射
- MyBatis XML 映射配置文件
- Java的MyBatis框架中XML映射缓存的使用教程
- 使用mybatis命令工具生成映射文件
- 0051 MyBatis关联映射--多对多关系
- MyBatis 入门到精通(二) SQL语句映射XML文件
- 【理论】mybatis对象-关系映射
- MyBatis框架的 resultMap(自连接,一对多,多对多)映射
- mybatis映射
- mybatis映射