【Struts2+Hibernate4】开发学生信息管理功能(三)
来源:互联网 发布:mac os x摄像头软件 编辑:程序博客网 时间:2024/05/16 06:00
学生信息管理模块
学生信息管理模块持久层
由于层与层之间的依赖关系,我们还是从持久层出发,先来完成持久层代码的设计和测试,和用户登录模块的做
法一样,先设计一个StudentsDao接口,然后再设计一个StudnetsDaoImpl实现类,这个实现类包括我们自己设计
的主键生成方法。
StudentsDao接口:
package com.demo.dao;import java.util.List;import com.demo.entity.Students;public interface StudentsDAO {public List<Students> queryAllStudents();public Students queryStudentsBySid(String sid);public boolean addStudents(Students students);public boolean updateStudents(Students students);public boolean deleteStudents(String sid);}
StudnetsDaoImpl实现类:
package com.demo.dao.impl;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import com.demo.dao.StudentsDAO;import com.demo.entity.Students;import com.demo.util.MyHIbernateSessionFactory;public class StudentsDAOImpl implements StudentsDAO {@SuppressWarnings("unchecked")@Overridepublic List<Students> queryAllStudents() {Transaction tx = null;List<Students>list = null;String hql = "";try {Session session = MyHIbernateSessionFactory.getSessionFactory().getCurrentSession();tx = session.beginTransaction();hql = "from Students";Query query = session.createQuery(hql);list = query.list();tx.commit();return list;} catch (Exception e) {e.printStackTrace();tx.commit();return list;} finally {if(tx != null){tx = null;}}}@Overridepublic Students queryStudentsBySid(String sid) {Transaction tx = null;Students students = null;try {Session session = MyHIbernateSessionFactory.getSessionFactory().getCurrentSession();tx = session.beginTransaction();students = (Students) session.get(Students.class, sid);tx.commit();return students;} catch (Exception e) {e.printStackTrace();tx.commit();return students;} finally {if(tx != null){tx = null;}}}@Overridepublic boolean addStudents(Students students) {students.setSid(getNewSid());//设置学生学号Transaction tx = null;try {Session session = MyHIbernateSessionFactory.getSessionFactory().getCurrentSession();tx = session.beginTransaction();session.save(students);tx.commit();return true;} catch (Exception e) {e.printStackTrace();tx.commit();return false;} finally {if(tx != null){tx = null;}}}@Overridepublic boolean updateStudents(Students students) {Transaction tx = null;try {Session session = MyHIbernateSessionFactory.getSessionFactory().getCurrentSession();tx = session.beginTransaction();session.update(students);tx.commit();return true;} catch (Exception e) {e.printStackTrace();tx.commit();return false;} finally {if(tx != null){tx = null;}}}@Overridepublic boolean deleteStudents(String sid) {Transaction tx = null;try {Session session = MyHIbernateSessionFactory.getSessionFactory().getCurrentSession();tx = session.beginTransaction(); Students students = (Students) session.get(Students.class, sid); session.delete(students);tx.commit();return true;} catch (Exception e) {e.printStackTrace();tx.commit();return false;} finally {if(tx != null){tx = null;}}}//生成学生的学号private String getNewSid() {Transaction tx = null;String hql = "";String sid = null;try {Session session = MyHIbernateSessionFactory.getSessionFactory().getCurrentSession();tx = session.beginTransaction();//获得当前学生的最大编号hql = "select max(sid) from Students";Query query = session.createQuery(hql);sid = (String) query.uniqueResult();if(sid==null||"".equals(sid)){//设置一个默认的最大编号sid = "S0000001";} else {String temp = sid.substring(1);int i = Integer.parseInt(temp);i++;//还原为字符串temp = String.valueOf(i);int len = temp.length();//凑够七位for(int j=0; j<7-len; j++){temp = "0"+temp;}sid = "S" + temp;}tx.commit();return sid;} catch (Exception e) {e.printStackTrace();tx.commit();return null;} finally {if (tx != null) {tx = null;}}}}
由于需要测试,我们先来插入一些数据:
package com.demo.entity;import java.util.Date;import org.hibernate.Session;import org.hibernate.Transaction;import org.junit.Test;import com.demo.util.MyHIbernateSessionFactory;public class TestStudents {@Testpublic void testSave(){Session session = MyHIbernateSessionFactory.getSessionFactory().getCurrentSession();Transaction tx = session.beginTransaction();Students students1 = new Students("S0000001","王丽","女",new Date(),"北京市");Students students2 = new Students("S0000002","王强","男",new Date(),"天津市");Students students3 = new Students("S0000003","李静","女",new Date(),"河北省");Students students4 = new Students("S0000004","张三","女",new Date(),"河北省");session.save(students1);session.save(students2);session.save(students3);session.save(students4);tx.commit();MyHIbernateSessionFactory.getSessionFactory().close();}}
控制台输出:
数据库显示:
主键生成方法的测试,在进行测试之前,先把主键生成方法的访问修饰符由private变为public以便于测试,测试
完成之后再改回private,因为这个方法只有这个类实用,设计为私有的比较好。
主键生成方法测试类:
package com.demo.dao;import java.util.Date;import java.util.List;import org.junit.Test;import com.demo.dao.impl.StudentsDAOImpl;import com.demo.entity.Students;import junit.framework.Assert;public class TestStudentsDAO {@Testpublic void testGetNewSid(){StudentsDAOImpl studentsDAO = new StudentsDAOImpl();System.out.println(studentsDAO.getNewSid());}}
结果:
由于数据表中有四条学生记录信息,因此结果必须是S0000005
持久层测试代码:
package com.demo.dao;import java.util.Date;import java.util.List;import org.junit.Test;import com.demo.dao.impl.StudentsDAOImpl;import com.demo.entity.Students;import junit.framework.Assert;public class TestStudentsDAO {@Testpublic void testQueryAllStudents(){StudentsDAO studentsDAO = new StudentsDAOImpl();List<Students> list = studentsDAO.queryAllStudents();for (Students students : list) {System.out.println(students);}}@Testpublic void testGetNewSid(){StudentsDAOImpl studentsDAO = new StudentsDAOImpl();//System.out.println(studentsDAO.getNewSid());}@Testpublic void testAddStudents(){StudentsDAOImpl studentsDAO = new StudentsDAOImpl();Students students = new Students();students.setSname("赵瑶");students.setGender("女");students.setBirthday(new Date());students.setAddress("上海");Assert.assertEquals(true, studentsDAO.addStudents(students));}}
控制台输出:
testQueryAllStudents方法和testAddStudents方法控制台输出结果:
数据库显示:
学生信息管理模块控制层
由于有了SuperAction类,我们写StudentsAction类继承这个类,具体的代码如下:
package com.demo.action;import java.text.SimpleDateFormat;import java.util.List;import com.demo.dao.StudentsDAO;import com.demo.dao.impl.StudentsDAOImpl;import com.demo.entity.Students;@SuppressWarnings("serial")public class StudentsAction extends SuperAction {public String query(){StudentsDAO studentsDAO = new StudentsDAOImpl();List<Students> list = studentsDAO.queryAllStudents();if(list!=null && list.size()>0){session.setAttribute("students_list", list);}return "query_success";}public String delete() {StudentsDAO studentsDAO = new StudentsDAOImpl();String sid = request.getParameter("sid");studentsDAO.deleteStudents(sid);return "delete_success";}public String add() throws Exception {StudentsDAO studentDao = new StudentsDAOImpl();Students students = new Students();students.setSname(request.getParameter("sname"));students.setGender(request.getParameter("gender"));SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");students.setBirthday(sdf.parse(request.getParameter("birthday")));students.setAddress(request.getParameter("address"));studentDao.addStudents(students);return "add_success";}public String modify() {StudentsDAO studentDao = new StudentsDAOImpl();String sid = request.getParameter("sid");Students students = studentDao.queryStudentsBySid(sid);session.setAttribute("modify_students", students);return "modify_success";}public String save() throws Exception {StudentsDAO studentDao = new StudentsDAOImpl();Students students = new Students();students.setSid(request.getParameter("sid"));students.setSname(request.getParameter("sname"));students.setGender(request.getParameter("gender"));SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");students.setBirthday(sdf.parse(request.getParameter("birthday")));students.setAddress(request.getParameter("address"));studentDao.updateStudents(students);return "save_success";}}
配置信息:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default" /> <package name="users" namespace="/users" extends="default"> <action name="*_*" class="com.demo.action.{1}Action" method="{2}"> <result name="login_success">/users/Users_login_success.jsp</result> <result name="login_failure">/users/Users_login.jsp</result> <result name="logout_success">/users/Users_login.jsp</result> <result name="input">/users/Users_login.jsp</result> </action> </package> <package name="students" namespace="/students" extends="default"> <action name="*_*" class="com.demo.action.{1}Action" method="{2}"> <result name="query_success">/students/Students_query_success.jsp</result> <result name="delete_success" type="chain">Students_query</result> <result name="add_success">/students/Students_add_success.jsp</result> <result name="modify_success">/students/Students_modify.jsp</result> <result name="save_success">/students/Students_modify_success.jsp</result> </action> </package></struts>
页面调用
学生信息管理模块设计的几个类为:
有这样几处修改:
启动Tomcat服务器测试:
- 【Struts2+Hibernate4】开发学生信息管理功能(三)
- 【Struts2+Hibernate4】开发学生信息管理功能(一)
- 【Struts2+Hibernate4】开发学生信息管理功能(二)
- 使用Struts2+Hibernate开发学生信息管理功能
- 慕课网 使用Struts2+Hibernate开发学生信息管理功能
- 使用Struts2+Hibernate开发学生信息管理系统
- 基于struts2开发的学生信息管理系统
- 学生信息管理系统(三)
- 学生信息管理系统(三)
- 用java开发学生信息管理系统(SIMS,三)
- 学生信息管理系统(struts2+Hibernate)(1)
- 学生信息管理系统-垫脚石(三)
- 学生信息管理系统总结(三)
- 学生信息管理系统问题集锦(三)
- 学生信息管理系统优化(三)+心得
- 学生信息管理系统错误集(三)
- 学生信息管理系统问题集锦(三)
- 慕课网_使用Struts2+Hibernate开发学生信息管理系统
- Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现(1)
- [Wondgirl] iOS-快速轮播入口
- 爬虫----BeautifulSoup 模块
- 最大二叉搜索子树问题
- java日常笔记2016-12-19
- 【Struts2+Hibernate4】开发学生信息管理功能(三)
- 1102. Invert a Binary Tree (25)
- Qt翻译原生widgets(QTextEdit右键菜单等)
- 批量打开异磁盘下异后缀的文件
- Eclipse CDT 标准库头文件设置
- @JsonIgnore 注解
- 在阿里云的ECS上部署Laravel项目
- RF Analyzer for Android 安卓平台连接HackRF的App
- ssm框架学习---mybatis中动态sql中的sql片段