mybatis---一对一双向关联

在mybatis中,并没有像hibernate中那么多的关系标签,one-to-one,one-to-many,many-to-one,many-to-many,在mybatis中,只存在一和多的关系标签,对应数据库来说,就是有别的表外键(并不一定设置外键,只是有一个字段对应别的表的主键,这里是为了方便叙述,下同)的表对应多,另一边对应一,多对多,则两边都用多的关系标签,这么说可能会有些模糊,看完下面的例子应该就会清楚许多了


一对一的关系在数据库中并不多见,因为原则上说,一对一关系的两个表,完全可以合成一张表,

下面以学生表和学生证表为例,演示一对一的双向关联,学生证表中设有学生表的id

学生表有四个字段,sid,name,age,birthday,学生证表有两个字段,id 和stu_id.

在这里提一点,用mybatis设计表的时候,最好能让每个表中字段名称不一样,可以在每个字段的前面加上表的缩写,这样在用连接查询的时候,可以不用把表的每个属性写出来设置别名


学生表对应的实体:

package com.entity;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Student {

	private Integer id;
	private String name;
	private Integer age;
	private Date birthday;
	private List<Paper> paper = new ArrayList<Paper>();
	
	
	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;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public List<Paper> getPaper() {
		return paper;
	}
	public void setPaper(List<Paper> paper) {
		this.paper = paper;
	}
}

一如本文开头所说,有外键的表为多的一方,虽然实际情况是一对一的关系,但是从数据库的角度考虑,一个学生可以有多个学生证,因此在学生表中有多个学生证的实体对象,也就是学生证对象的集合,在这里用ArrayList集合,这也是为了和配置文件相照应,

顺带提一下,对于日期属性,一般情况下可以用String,数据库可以用VARCHAR2,这里设置成Date型,是为了验证配置文件中属性类型的设置,见下面配置文件


下面是学生证表对应的实体类:

package com.entity;

public class Paper {

	private Integer id;
	private Student student;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Student getStudent() {
		return student;
	}
	public void setStudent(Student student) {
		this.student = student;
	}
}

然后是xml配置文件

Student.xml:

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTY
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值