mybatis关联关系映射

1、一对多关系(OneToMany)
在实际项目中,一对多是非常常见的关系。比如:一个班级可以有多个学生,一个学生只能属于一个班级,班级和学生是一对多关系,而学生和班级是多对一关系。

数据库中一对多关系通常使用主外键关联,外键列应该在多方,即由多方维护关系(一对多中多的一方维护)。

(1)创建数据库

班级表t_clazz:

CREATE TABLE t_clazz(
cid INT PRIMARY KEY AUTO_INCREMENT COMMENT ‘ID’,
code VARCHAR(18) COMMENT ‘班级号’,
name VARCHAR(18) COMMENT ‘班级名’
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
说明:

ENGINE=InnoDB:MySQL 的数据库引擎的设置

AUTO_INCREMENT=1:自动递增列的 初始数值 = 1

DEFAULT CHARSET=utf8:默认字符集 = utf8

学生表t_student:

CREATE TABLE t_student(
sid INT PRIMARY KEY AUTO_INCREMENT COMMENT ‘学生ID’,
name VARCHAR(18) COMMENT ‘姓名’,
sex VARCHAR(18) COMMENT ‘性别’,
age INT COMMENT ‘年龄’,
clazz_cid INT, #外键:班级ID
CONSTRAINT fk_stu FOREIGN KEY(clazz_cid) REFERENCES t_clazz(cid)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
(2)持久化类

创建一个Clazz类和一个Student类,分别映射t_clazz表和t_student表。

// 班级类
public class Clazz implements Serializable {
private Integer cid;
private String code;
private String name;
//班级和学生是一对多的关系,即一个班级可以有多个学生
private List studentList;
//省略构造方法和set/get方法……
}
// 学生类
public class Student implements Serializable {
private Integer sid;
private String name;
private String sex;
private Integer age;
//学生和班级是多对一的关系,即一个学生只属于一个班级
private Clazz clazz;
//省略构造方法和set/get方法……
}
(3)接口

在com.zking.dao中创建实体类的接口

// 班级类接口
public interface ClazzService{
// SQL1:添加Clazz对象
public int addClazz(Clazz clazz);

// SQL2:删除Clazz对象
public int deleteClazzById(Clazz clazz);

// SQL3:修改Clazz对象
public int updateClazz(Clazz clazz);

// SQL4:根据ID查询Clazz对象
public Clazz selectClazzById(Integer cid);

// SQL5:查询所有Clazz对象
public List<Clazz> selectAllClazz();

// SQL6:模糊查询Clazz对象
public List<Clazz> selectClazzWhere(Clazz clazz);

// SQL7:多表联查:查询班级信息及学员信息
public Clazz selectClazzAndStudent(Integer cid);

// SQL8:包含查询
public List<Clazz> selectClazzIn(Clazz clazz);

}
// 学生类接口
public interface StudentService{
// SQL1:添加Student对象
public int addStudent(Student student);

// SQL2:根据SID删除Student对象
public int deleteStudentById(Integer sid);

// SQL3:修改Student对象
public int updateStudent(Clazz clazz);

// SQL4:根据SID查询Student对象
public Student selectStudentById(Integer cid);

// SQL5:查询所有Student对象
public List<Student> selectAllStudent();

// SQL6:模糊查询Student对象
public List<Student> selectStudentWhere(Student student);

// SQL7:多表联查:查询班级信息及学员信息
public Student selectClazzAndStudent(Integer sid);

// SQL8:包含查询
public List<Student> selectStudentIn(Student student);

}
(4)对象/关系映射文件

ClazzMapper.xml代码:

<!--SQL1 :根据cid查询Clazz,返回Clazz对象-->
<select id=”selectClazzById” parameterType=”Integer” resultMap=”clazzMapper”>
    SELECT * FROM t_clazz WHERE cid=#{cid}
</select>

<!--映射Clazz对象的resultMap(结果映射集)-->
<resultMap id=”clazzMapper” type=”com.zking.pojo.Clazz”>
    <id property=”cid” column=”CID” />
    <result property=”code” column=”CODE” />
    <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值