这个系统写到这里,所涉及到的都是单表的操作,增删改查,现在功能需要完善,涉及到多表操作,开始是毫无头绪,书上的代码也没有现成的可以借鉴,想来就从最简单的开始。问题出现了很多,不过最后在龙哥的提示下还是实现了,现在把完整过程列出来。

目的很简单:班级表中的一个班级删除或更新后,学生表中对应的学生记录被删除或学生对应的班级信息得到更新。

1.数据表

第一个是班级表(本来想叫class,在程序中与关键字冲突,改为c后,也一直报错,最后改为ce)

ce

第二个是学生表

se

这里ce表中cname为主键,se表中sid为主键,cname为外键。

然后在se表中进行外键关联(这里要注意的是,表建立以后要把表的类型类型改为InnoDB,否则它会提示不支持外键操作):

下面的框框默认为无动作,这里要改成层叠,即级联操作(应该是),如不修改,则当你修改cname表中的数据时会提示无法修改,出错。

上面的步骤完成后,当你修改或删除ce表中的cname时,se表中的cname也会更新或者对应的记录被删除。这个时候说明数据库已经成功建立。

2.SSH框架代码

把PO、DAO、Service、Action、applicationContext.xml、struts.xml、jsp的代码都写好,这里主要是PO层,其他都跟之前一致,只是在CeDAO中加一个“根据名称删除班级”的方法。

Ce.java

 package po;

 import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table; @Entity
@Table(name = "ce")
public class Ce {
@Id @Column(name="cname")
@GeneratedValue(strategy = GenerationType.AUTO)
private String cname; public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
}

Se.java

 package po;

 import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table; import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType; @Entity
@Table(name = "se")
public class Se {
@Id @Column(name="sid")
@GeneratedValue(strategy = GenerationType.AUTO)
private String sid; @Column(name="sname")
private String sname; @ManyToOne(targetEntity=Ce.class)
@JoinColumn(name="cname")
@Cascade(CascadeType.ALL)
private Ce ce; public String getSid() {
return sid;
} public void setSid(String sid) {
this.sid = sid;
} public String getSname() {
return sname;
} public void setSname(String sname) {
this.sname = sname;
} public Ce getCe() {
return ce;
} public void setCe(Ce ce) {
this.ce = ce;
}
}

这里要注意两点:

1. 3个注解缺一不可,特别是级联操作的第三个

2. jsp中对于se表第三个属性的显示

其他代码部分省略。。。

结果(视频放不了。。。):

大功告成!

本文系原创,转载请注明出处,谢谢。

SSH多表操作入门的更多相关文章

  1. MySQL-快速入门(1)基本数据库、表操作语句

    1.创建数据库 create database db_name;show create database db_name\G; //查看数据创建语句show databases; //查看当前创建的数 ...

  2. Mysql常用表操作 | 单表查询

    160905 常用表操作 1. mysql -u root -p 回车 输入密码   2. 显示数据库列表 show databases     3. 进入某数据库 use database data ...

  3. C语言与数据库操作入门

    https://blog.csdn.net/flyingqd/article/details/78763652 C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1 ...

  4. C语言与数据库操作入门(Win版)

    C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1387 数据库,DataBase,学C语言的是不是想说,很想爱她却并不容易呢?不用着急,C语言也可以操作数据库的 ...

  5. day 46 Django 学习3 数据库单表操作以及反向解析

    前情提要: Django 已经学了不少了, 今天学习链接数据库的操作.以及相关的反向解析等 一:反向解析 1:反向解析模板层 跳转时设定url会随着前面的路由改变而改变         2:反向解析之 ...

  6. 孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数

    孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 不同类型 ...

  7. Django---ORM简介丶单表操作丶增删改查

    一丶ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...

  8. 浅谈MySQL多表操作

    字段操作 create table tf1( id int primary key auto_increment, x int, y int ); # 修改 alter table tf1 modif ...

  9. Sql Server系列:数据表操作

    表是用来存储数据和操作数据的逻辑结构,用来组织和存储数据,关系数据库中的所有数据都表现为表的形式,数据表由行和列组成.SQL Server中的数据表分为临时表和永久表,临时表存储在tempdb系统数据 ...

随机推荐

  1. ABP前端-关于不同按钮调用同一事件传入的参数变为相同的数据

    现象: 在一个含有的Tab标签的页面,两个标签页的新增按钮调用同一个新增事件并传入不同的参数,但实际在调用的的时候传入的参数都变成了最后一个按钮传入的值,即,不论点击哪个Tab按钮的新增事件,最终传入 ...

  2. Uva10820 欧拉公式模板(求小于n且与n互素的数的个数)

    题意: 给出n,算出小于等于n的所有数中,有几对互质: 解法: 本质就是求有多少个2元组(x,y)满足:1 <= x,y <= n,且x与y互素. 除了(1,1)之外,其他所有的x和y都不 ...

  3. Java高级项目实战之CRM系统01:CRM系统概念和分类、企业项目开发流程

    1. CRM系统介绍 CRM系统即客户关系管理系统, 顾名思义就是管理公司与客户之间的关系. 是一种以"客户关系一对一理论"为基础,旨在改善企业与客户之间关系的新型管理机制.客户关 ...

  4. 11maven的聚合

    我们都知道项目之间的依赖首先要把被依赖的项目先安装install到maven的本地仓库中,然后在本项目中配置被依赖的仓库坐标,才能进行依赖通信. 例如: A项目 >  B项目 A项目依赖B项目中 ...

  5. Python 文件&异常 初学者笔记

    文件 读取整个文件 with open('pi_30_digits.txt') as file_object :#Python在当前执行文件目录寻找指定文件#filename = 文件的绝对路径或相对 ...

  6. tensorflow模型的保存与加载

    模型的保存与加载一般有三种模式:save/load weights(最干净.最轻量级的方式,只保存网络参数,不保存网络状态),save/load entire model(最简单粗暴的方式,把网络所有 ...

  7. ASP.NET Identity系列教程-3【运用ASP.NET Identity】

    https://www.cnblogs.com/r01cn/p/5180892.html 14 运用ASP.NET Identity In this chapter, I show you how t ...

  8. MST Unification CodeForces - 1108F

    #include<iostream> #include<cstring> #include<algorithm> using namespace std; ; in ...

  9. PTA 1003 Emergency

    问题描述 As an emergency rescue team leader of a city, you are given a special map of your country. The ...

  10. 题解【洛谷P5767】[NOI1997]最优乘车

    题面 一道很经典的最短路模型转换问题. 考虑如何建图. 我们可以发现,对于每一条公交线路,可以将这条线路上 可以到达的两个点 连一条权值为 \(1\) 的边. 获取一条公交线路上的每一个点可以使用读取 ...