【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服务器测试:                               

           

         

        

     

    

1 0
原创粉丝点击