SSH多表操作入门
这个系统写到这里,所涉及到的都是单表的操作,增删改查,现在功能需要完善,涉及到多表操作,开始是毫无头绪,书上的代码也没有现成的可以借鉴,想来就从最简单的开始。问题出现了很多,不过最后在龙哥的提示下还是实现了,现在把完整过程列出来。
目的很简单:班级表中的一个班级删除或更新后,学生表中对应的学生记录被删除或学生对应的班级信息得到更新。
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多表操作入门的更多相关文章
- MySQL-快速入门(1)基本数据库、表操作语句
1.创建数据库 create database db_name;show create database db_name\G; //查看数据创建语句show databases; //查看当前创建的数 ...
- Mysql常用表操作 | 单表查询
160905 常用表操作 1. mysql -u root -p 回车 输入密码 2. 显示数据库列表 show databases 3. 进入某数据库 use database data ...
- C语言与数据库操作入门
https://blog.csdn.net/flyingqd/article/details/78763652 C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1 ...
- C语言与数据库操作入门(Win版)
C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1387 数据库,DataBase,学C语言的是不是想说,很想爱她却并不容易呢?不用着急,C语言也可以操作数据库的 ...
- day 46 Django 学习3 数据库单表操作以及反向解析
前情提要: Django 已经学了不少了, 今天学习链接数据库的操作.以及相关的反向解析等 一:反向解析 1:反向解析模板层 跳转时设定url会随着前面的路由改变而改变 2:反向解析之 ...
- 孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数
孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 不同类型 ...
- Django---ORM简介丶单表操作丶增删改查
一丶ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...
- 浅谈MySQL多表操作
字段操作 create table tf1( id int primary key auto_increment, x int, y int ); # 修改 alter table tf1 modif ...
- Sql Server系列:数据表操作
表是用来存储数据和操作数据的逻辑结构,用来组织和存储数据,关系数据库中的所有数据都表现为表的形式,数据表由行和列组成.SQL Server中的数据表分为临时表和永久表,临时表存储在tempdb系统数据 ...
随机推荐
- maven的核心概念——聚合
第十六章聚合 16.1 为什么要使用聚合 将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效.修改源码后也需要逐个手动进行clean操作.而使用了聚合之后就可以批量进行Maven工程的安装 ...
- Ansible之优化提升执行效率
今天分享一下Ansible在工作环境中有那些可以优化的配置 环境介绍:以前在公司工作处理服务器问题,需要用批量操作都是用shell脚本编写的工具,后来发现Ansible这个自动化工具,安装简单,操作起 ...
- oracke数据库分区新增
1.发现一些过程执行报错,报错原因是'ora-14400插入的分区关键字未映射到任何分区',原来是2020年库表的时间子分区未扩展: 2.扩展子分区的语句是 ALTER TABLE 表名 MODIFY ...
- 一次H5毛玻璃效果有感
印象中H5实现毛玻璃效果是挺好实现的,主要的代码就是css的filter:blur. 之前也用过几次,给背景图加高斯模糊啊,给一个div加高斯模糊啊.只要给需要添加高斯模糊的元素直接添加filter属 ...
- gulp常用插件之gulp-rev-css-url使用
更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-rev-css-url这是一款用于在gulp-rev之后覆盖js.css文件中的URL进行替换. 更多使用文档请点击访问gulp-rev ...
- virtual box虚拟机跨物理机迁移
VirtualBox保存虚机数据的是vdi文件,但是直接拷贝在新的VirtualBox中不能打开,因为每个vdi文件都包含了一个uuid的数据,如果直接拷贝,uuid在新的VirtualBox中是不能 ...
- python递归删除目录本身以及目录下文件
import os def local_rm(dirpath): if os.path.exists(dirpath): files = os.listdir(dirpath) for file in ...
- SocketAsyncEvent方式的Server
1.AsyncUserToken public class AsyncUserToken { /// <summary> /// 客户端IP地址 /// </summary> ...
- Linux服务器部署.Net Core笔记:目录
目录 Linux服务器部署.Net Core笔记:一.开启ssh服务 Linux服务器部署.Net Core笔记:二.安装FTP Linux服务器部署.Net Core笔记:三.安装.NetC ...
- 使用xshell
将选定的文本自动复制到剪贴板 并且 鼠标向右按钮定义为粘贴剪贴板内容