1、 基于ssh架构的学生成绩管理系统 (1) 整合Struts2、Spring和Hibernate框架 (2) 实现“登录”功能 (3) 实现“学生信息管理”功能 (4) 实现“学生成绩管理”功能 (5) 实现分页功能 掌握Struts2的开发步骤 掌握Hibernate的开发步骤 掌握Spring的开发步骤,理解依赖注入、AOP、事务管理等 掌握Struts2、Spring和Hibernate框架的整合 掌握分页技术 1、 建库建表 2、 利用分层思想,建package 3、 添加Spring开发能力 4、 添加Hibernate开发能力 5、 生成Hibe
2、rnate所需的POJO类和映射文件 6、 开发DAO层 (1) 新建DAO层接口。 (2) 新建DAO层实现类(该类要实现DAO层接口,继承HibernateDaoSupport类)。 (3) 在Spring配置文件中增加该DAO层实现类的定义,并需要依赖注入一个SessionFactory bean的引用。 7、 开发Service层 (1) 新建Service层接口。 (2) 新建Service层实现类,该类中需要声明所调用DAO层接口,并生其setter方法。 (3) 在Spring配置文件中增加该Service层实现类的定义,并需要依赖注入DAO层的bean。 8、
3、 实现WEB层 (1) 在web.xml中增加struts2的过滤器和Spring的监听器。 (2) 增加Spring和Struts2的整合文件struts.properties。 (3) 新建所需的jsp文件。 (4) 新建Action类,该类要继承ActionSupport,同时该类要依赖注入Service的bean(声明+setter方法)。 (5) 在Spring配置文件中增加该Action类的定义,并注入Service层的bean。 (6) 在struts.xml中增加该Action的定义,其中class的属性是在Spring中定义的该Action bean的id。 9
4、部署运行 实验步骤: 1、 建库、建表 建立数据库xscj,建立xsb、dlb、zyb、kcb、cjb等。 学生信息表:xsb 列名 描述 数据类型 可空 默认值 说明 XH 学号 Char(6) × 无 主键 XM 姓名 Char(8) × 无 XB 性别 bit × 无 1:男,0:女 CSSJ 出生时间 datetime √ 无 ZY_ID 专业ID int × 无 ZXF 总学分 int √ 无 BZ 备注 Varchar(200) √ 无 ZP 照片 medium
5、blob √ 无 登录表:dlb 列名 描述 数据类型 可空 默认值 说明 id 标识 int × 自增1 主键,自增 xh 登录号 char(6) × 无 外键,xsb中xh kl 口令 char(20) × 无 专业表:zyb 列名 描述 数据类型 可空 默认值 说明 id ID int × 自增1 主键 zym 专业名 char(12) × 无 rs 人数 int √ 0 fdy 辅导员 char(8) √ 无 课程表:kcb 列名 描述 数据类型 可
6、空 默认值 说明 kch 课程号 Char(3) 否 无 主键 kcm 课程名 Char(12) 是 无 kxxq 开课学期 smallint 是 无 1-8 xs 学时 int 是 0 xf 学分 int 是 0 连接表:xs_kcb 列名 描述 数据类型 可空 默认值 说明 xh 学号 char(6) 主键 kch 课程号 char(3) 主键 成绩表:cjb 列名 描述 数据类型 可空 默认值 说明 Xh 学号 Char(6) 否 无 主键
7、 Kch 课程号 Char(3) 否 无 主键 Cj 成绩 int 是 0 xf 学分 int 是 0 2、 设计系统架构 利用分层架构模式,设计系统架构,系统可分为表示层、业务逻辑层和数据持久层。如下图所示: 建立相应package。 3、 添加Spring开发能力 (1) 定义User Library (2) 增加Spring开发能力(添加jar包——使用User Library,新建applicationContext.xml) 注:可以不增加User Library,直接把需要的jar包拷贝到classpath下。 4
8、 实现Hibernate持久层 (1) 添加Hibernate开发能力 添加jar包:如果第一步中已增加,此步可以省略。 注意:需要把Hibernate交由Spring来管理,其中包括在Spring中配置“dataSource”和“sessionFactory” (2) 通过MyEclipse中Hibernate 反向工程,分别生成表对应的POJO类及相应的映射文件。 注意:所有的POJO类和映射文件(*.hbm.xml)放在org.model这个package下。 难点1:xsb(学生表)的映射文件中需要设置和专业的多对一关系,参考代码如下:
9、0" encoding="utf-8"?>
10、 11、ty name="cssj" type="java.util.Date">
13、pping>
难点2:成绩表(cjb)中需要配置复合主键,因为成绩表中的主键是由xh和kch组成,参考代码如下:
14、model.Cjb" table="CJB" schema="dbo" catalog="XSCJ">
15、 17、bId() {
}
public CjbId(String xh, String kch) {
this.xh = xh;
this.kch = kch;
}
public String getXh() {
return this.xh;
}
public void setXh(String xh) {
this.xh = xh;
}
public String getKch() {
return this.kch;
}
public void setKch(String kch) {
this.kch = kch;
18、
}
}
Cjb.java
package org.model;
public class Cjb implements java.io.Serializable {
private CjbId id;
private Integer cj;
private Integer xf;
public Cjb() {
}
public Cjb(CjbId id) {
this.id = id;
}
public Cjb(CjbId id, Integer cj, Integer xf) {
this.id = id;
this.cj = c 19、j;
this.xf = xf;
}
public CjbId getId() {
return this.id;
}
public void setId(CjbId id) {
this.id = id;
}
public Integer getCj() {
return this.cj;
}
public void setCj(Integer cj) {
this.cj = cj;
}
public Integer getXf() {
return this.xf;
}
public void setXf( 20、Integer xf) {
this.xf = xf;
}
}
重点:所有的映射文件需要在Spring配置文件中注册,参考applicationContext.xml如下:
……
21、value="jdbc:mysql://localhost:3306/xscj">
23、dialect.MySQLDialect
24、
25、
public class DlDaoImp extends HibernateDaoSupport implements DlDao{
public boolean existXh(String xh) {
List list=getHibernateTemplate().find("from Dlb where xh=?",xh);
if(list.size()>0)
return true;
else
return false;
}
public Dlb find(String xh, String kl) {
String st 26、r[]={xh,kl};
List list=getHibernateTemplate().find("from Dlb where xh=? and kl=?",str);
if(list.size()>0)
return (Dlb) list.get(0);
else
return null;
}
public void save(Dlb user) {
getHibernateTemplate().save(user);
}
}
注意:所有DAO层的实现类都需要在Spring配置,并且必须获得一个SessionFactory的引用, 27、然后才能完成持久化访问。换句话说,DAO的实现类都交由Spring容器的Bean来管理。参考Spring中的配置DAO的部分代码如下“
28、
30、注入的对象。
例如,需要在登录的DlServiceManage类中注入DlDaoImp实例化后的对象,步骤有二:
首先,在DlServiceManage中声明dlDao,同时生成dlDao的setter方法,参考代码如下:
package org.service.imp;
import org.dao.DlDao;
import org.model.Dlb;
import org.service.DlService;
public class DlServiceManage implements DlService{
//对DlDao进行依赖注入
private DlDa 31、o dlDao;
public void setDlDao(DlDao dlDao) {
this.dlDao = dlDao;
}
public boolean existXh(String xh) {
return dlDao.existXh(xh);
}
public Dlb find(String xh, String kl) {
return dlDao.find(xh, kl);
}
public void save(Dlb user) {
dlDao.save(user);
}
}
其次,在Spring的配置文件中进行配 32、置:
35、
36、 下面是所有需要自动创建事务代理的bean-->
38、ruts2.dispatcher.FilterDispatcher
39、
40、和applicationContext.xml中配置。
以登录为例:
Action类参考代码:
package org.action;
import java.util.Map;
import org.model.Dlb;
import org.service.DlService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DlAction extends ActionSupport{
privat 41、e DlService dlService;
private Dlb dl;
public Dlb getDl() {
return dl;
}
public void setDl(Dlb dl) {
this.dl = dl;
}
public DlService getDlService() {
return dlService;
}
public void setDlService(DlService dlService) {
this.dlService = dlService;
}
public String execu 42、te()throws Exception{
Dlb user=dlService.find(dl.getXh(), dl.getKl());
if(user!=null){
Map session=(Map)ActionContext.getContext().getSession();
session.put("user", user);
return SUCCESS;
}else
return ERROR;
}
}
struts.xml参考配置:
43、






