MyBatis学习笔记——一对一,多对一
来源:互联网 发布:java泛型t 编辑:程序博客网 时间:2024/05/27 21:49
1.一对一的关联关系的查询
比如Student中插入了一个Address的对象,t_student中的addressId和t_address关联,StudentMapper:
public class Student { private Integer id; private String name; private Integer age; private Address address; public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public Student(){ } public Student(String name, Integer age) { super(); this.name = name; this.age = age; } public Student(Integer id, String name, Integer age) { super(); this.id = id; this.name = name; this.age = age; } 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 Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]"; }}
AddressMapper:
public interface AddressMapper { public Student findById(Integer id);}
StudentMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.java1234.mapper.StudentMapper"> <!-- 自定义一个用于返回List数据类型resultMap --> <resultMap type="Student" id="StudentResult"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age"/> <!-- 一对一的关联映射关系的查询 ,用<association>标签指定,column="addressId"中的id是t_address的id关联的外键,select标签中表示是调用AddressMapper中的findById(通过ID查找address)的方法,--> <association property="address" column="addressId" select="com.java1234.mapper.AddressMapper.findById"></association> </resultMap> <select id="findStudentAddress" parameterType="Integer" resultMap="StudentResult"> select * from tb_student s,tb_address a where s.addressId=a.id and s.id=#{id} </select></mapper>
AddressMap.xml:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.java1234.mapper.AddressMapper"> <resultMap type="Address" id="AddressResult"> <result property="sheng" column="sheng"/> <result property="shi" column="shi"/> <result property="qu" column="qu"/> </resultMap> <select id="findById" parameterType="Integer" resultType="Address"> select * from tb_address where id=#{id} </select></mapper>
2.多对一关联映射关系的查询
在Student类中加一个Grade类的对象类grade,在StudentMapper.xml中,自定义的ResultMap中增加一个属性:
<!-- 在多方建立对一方的引用 --> <association property="grade" column="gradeId" select="com.java1234.mapper.GradeMapper.findById"></association>
即可
3.一对多关联关系的查询
在一方创建一个集合:
private List<Student> students;
GradeMapper.xml中用collection指定students集合:
<resultMap type="Grade" id="GradeResult"> <result property="id" column="id"/> <result property="gradeName" column="gradeName"/> <collection property="students" column="id" select="com.java1234.mapper.StudentMapper.findStudentsByGradeId"></collection> </resultMap> <select id="findById" parameterType="Integer" resultMap="GradeResult"> select * from tb_grade where id=#{id} </select>
这里注意如果同时在一方建立了多方的集合以及在多方建立了一方的引用,即2、3情况集合在了一起,那么注意他们的toString方法只能在其中 的一个中引用,否则将会陷入死循环,内存溢出的错误StackOverflowerError,(即如果Student类中重写toString方法时包含了Grade的属性,那在重写Grade的toString方法时不能包含Student的那个students,反之一样),详见Eclispe,MyBatis_HelloWorld项目
阅读全文
0 0
- MyBatis学习笔记——一对一,多对一
- mybatis 一对一 一对多 多对一 多对多
- Mybatis学习笔记-一对一关联
- Mybatis一对一(多对一)关联表查询
- MyBatis学习笔记:一对一和一对多关联表查询
- myBatis学习笔记(4)——一对一关联表查询
- mybatis学习笔记(10)-一对一查询
- mybatis学习笔记(四) --- 一对一关联
- Mybatis学习笔记(十一)【一对一查询】
- Mybatis 一对一,一对多,多对一,多对多的理解
- Mybatis一对一,一对多,多对一,多对多的理解
- mybatis resaultMap 高级映射 (一对一,一对多,多对一,多对多)
- Mybatis 一对一,一对多,多对一,多对多的理解
- Mybatis 一对一,一对多,多对一,多对多 的处理
- Mybatis 一对一,一对多,多对一,多对多的理解
- MyBatis关联表映射(一对多、多对多、一对一、多对一)
- Mybatis 一对一,一对多,多对一,多对多的理解
- Mybatis 一对一,一对多,多对一,多对多的理解
- [计蒜客 15504 百度的科学计算器(简单)]表达式求值
- linux 常见的命名
- Struts2 源码分析——调结者(Dispatcher)之准备工作
- Java内存模型之happens-before
- 蓝桥杯--算法练习:操作格子(线段树)
- MyBatis学习笔记——一对一,多对一
- 转载:tomcat+ssh 启动 加载的顺序。
- [NOI2005]BZOJ1415 聪聪和可可
- 简小的C++基础--重载运算符2
- 英语学习文章
- POJ 1257 Cross-stitch. 笔记
- 查看网络图片
- 项目进度(五)
- 蚂蚁前行系列(一):Tomcat整体结构和基础概念