这是一门课程——web应用开发技术的作业
也是我第一次接触javaweb,由于博主有太多课程作业要完成了,所以做之前也没有好好看过教程,在不精通原理的情况下就开始着手做了,实在是招架不及,故很多地方会显得不规范和粗糙,毕竟是第一次,能实现就得了。见谅。
博主一开始还慢悠悠跟着一个教程用eclipse配置ssh框架(花了近两天时间?罪过阿),结果出现各种奇怪的问题,调试了半天还是无果,hibernate死活连不上mysql,我觉得可能是jdk9和hibernate3之间不太兼容的问题?
故下载了myeclipse,然而jdk1.9获取不到激活序列 ,下了个1.8重新配置,myeclipse总算是下好了。
接着一切还算顺利。这里我先会记录一下遇到的问题。
1、hibernate使用save在数据库中添加数据,这不同于查询,像添、改、删这些操作,都需要采用提交事务才能够对数据库进行操作:
Session session = getSession();
Transaction transaction = session.beginTransaction();
//储存学生信息
session.save(student);
//提交事务
transaction.commit();
//关闭session
session.close();
2、数据库设计
在第三次实验中,我简单地实现了学生选课退课以及查看课程的功能,数据库中设计了三个表,分别为课程表、学生表、学生选课表。课程表中的信息包括了一些额外的内容(任课教师,上课教室,时间),其实这三个属性都不应该放置在课程表中,而应该再设计一个教师表和课程安排表,教师表中单独存放教师的所有信息,课程安排表中单独存放课程的安排情况包括:任课教师编号、课程编号、上课教室、课程时间等。
每种课程的课程安排可以是多种多样的,一门课可以由多个老师任课,也可分配在不同的教室。
3、hibernate进行多表查询如何处理结果集??
最近一直在思考PO和VO的问题。
VO(value object) 值对象
通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递。
PO(persistant object) 持久对象
在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了。通常对应数据模型(数据库),本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。
BO(business object) 业务对象
从业务模型的角度看,见UML元件领域模型中的领域对象。封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作。
遇到的问题是,我必须查询教师表、课程安排表、课程表这三个表,读取我想要显示在前端的属性,包括课程表中的所有属性、任课教师编号对应的教师名称、上课时间、上课地点。
而且由于考虑到后续课程表的实现,我将排课表的时间属性分为Cday和Cindex,分别代表上课时间在星期几的第几节课。
那么就更不能直接显示数据库映射的PO类属性了。
在网上查了一些资料,似乎没有找到规范的说明。于是准备自己瞎摸索了。我的解决方法是新建了一个bean映射类,将需要显示的数据封装在此类内,最重要的是构造函数,因为数据库进行查找时将会根据此类的构造函数进行传值,并将查询结果转化为对象。
由于在数据库中的排课时间格式为:Cday:1-7代表星期一-星期日
Cindex :1-12 代表第几节课,一般课程都会占1节以上,故用英文逗号符分割,比如1,2就代表第1,2节课。
package com.zy.domain;
//VO类,应该包括需要在前端显示的课程属性和课程安排信息
//包括 课程编号 课程名称 课程类型 开课学院 课程学分 任课老师姓名 上课地点 上课时间
public class CourseVo {
private String cid;
private String cname;
private String ctype;
private String cacademy;
private int ccredit;
private String tname;
private String clocation;
private String cday;
private String cindex;
//test
private String ctime;
public CourseVo(String cid, String cname, String ctype, String cacademy, int ccredit, String tname,
String clocation, String cday