第三章:学生管理模块
显示学生资料——准备
1.显示学生资料
2.删除学生资料
3.学生主键生成策略
4.添加学生资料
5.修改学生资料
1.显示学生资料
- 添加测试数据
1 @Test 2 public void testSaveStudents() 3 { 4 //创建配置对象 5 Configuration config=new Configuration().configure(); 6 //创建服务注册对象 7 ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); 8 //创建sessionFactory 9 SessionFactory sessionFactory=config.buildSessionFactory(serviceRegistry); 10 //创建session对象 11 Session session = sessionFactory.getCurrentSession(); 12 //创建事务对象 13 Transaction tx = session.beginTransaction(); 14 15 Students s1 = new Students("s0000001","张三丰","男",new Date(),"武当山"); 16 Students s2 = new Students("s0000002","郭靖","男",new Date(),"桃花岛"); 17 Students s3 = new Students("s0000003","黄蓉","女",new Date(),"桃花岛"); 18 19 session.save(s1); 20 session.save(s2); 21 session.save(s3); 22 23 tx.commit(); 24 sessionFactory.close(); 25 }
- 设计学生业务逻辑接口
1 package service; 2 3 import java.util.List; 4 5 import entity.Students; 6 7 //学生的业务逻辑接口 8 public interface StudentsDAO { 9 10 //查询所有学生资料 11 public List<Students> queryAllStudents(); 12 13 //根据学生编号查询学生资料 14 public Students queryStudentsBySid(String sid); 15 16 //添加学生资料 17 public boolean addStudents(Students s); 18 19 //修改学生资料 20 public boolean updateStudents(Students s); 21 22 //删除学生资料 23 public boolean deleteStudents(String sid); 24 25 }
- 设计学生业务逻辑接口实现类
1 package service.impl; 2 3 import java.util.List; 4 5 import org.junit.Test; 6 7 import entity.Students; 8 9 import service.StudentsDAO; 10 11 public class TestStudentsDAOImpl { 12 13 @Test 14 public void testQueryAllStudents() 15 { 16 StudentsDAO sdao = new StudentsDAOImpl();//接口类型的引用 17 List<Students> list=sdao.queryAllStudents(); 18 19 for(int i=0;i<list.size();i++) 20 { 21 System.out.println(list.get(i)); 22 } 23 } 24 }
- 设计学生Action类:实现显示学生资料Action
1 package action; 2 3 import java.util.List; 4 5 import entity.Students; 6 7 import service.StudentsDAO; 8 import service.impl.StudentsDAOImpl; 9 10 //学生Action类 11 public class StudentsAction extends SuperAction{ 12 13 /** 14 * 15 */ 16 private static final long serialVersionUID = 1L; 17 18 //查询所有学生的动作 19 public String query(){ 20 StudentsDAO sdao = new StudentsDAOImpl(); 21 List<Students> list=sdao.queryAllStudents(); 22 //放进session中 23 if(list!=null&&list.size()>0)//找到学生记录 24 { 25 session.setAttribute("students_list", list); 26 } 27 return "query_success";//返回视图 28 } 29 }
- 显示学生资料
- 页面调用
- 显示数据
2.删除学生资料
- 界面调用
- 编写业务逻辑代码
1 public boolean deleteStudents(String sid) { 2 // TODO Auto-generated method stub 3 Transaction tx=null;//生成事务对象 4 //String hql="";//执行的hql语句 5 try 6 { 7 Session session=MyHibernateSessionFactory.getSessionFactory().getCurrentSession();//获得会话 8 tx = session.beginTransaction();//开启事务 9 Students s = (Students)session.get(Students.class, sid);//获得学生对象 10 session.delete(s);//删除这个学生 11 tx.commit();//提交事务 12 return true; 13 } 14 catch(Exception ex) 15 { 16 ex.printStackTrace(); 17 tx.commit(); 18 return false; 19 } 20 finally 21 { 22 if(tx!=null){ 23 tx=null; 24 } 25 } 26 }
- 编写删除action
1 //删除学生动作 2 public String delete() 3 { 4 StudentsDAO sdao = new StudentsDAOImpl(); 5 String sid = request.getParameter("sid"); 6 sdao.deleteStudents(sid);//调用删除方法 7 return "delete_success"; 8 }
- 测试
3.学生主键生成策略
4.添加学生资料
- 界面原型演示
- 编写添加学生业务逻辑代码
- 编写添加action
- 页面调用
添加学生资料
- 学生的主键生成策略
1 //生成学生的学号 2 private String getNewSid() 3 { 4 Transaction tx=null;//生成事务对象 5 String hql=""; 6 String sid = null;//返回学生编号 7 try 8 { 9 Session session=MyHibernateSessionFactory.getSessionFactory().getCurrentSession();//获得会话 10 tx = session.beginTransaction();//开启事务 11 //获得当前学生的最大编号 12 hql="select max(sid) from Students"; 13 Query query=session.createQuery(hql); 14 sid = (String)query.uniqueResult(); 15 if(sid==null||"".equals(sid)) 16 { 17 //给一个默认的最大编号 18 sid="s0000001"; 19 } 20 else 21 { 22 String temp = sid.substring(1);//去掉第一个字母s,只取后面的七位 23 int i=Integer.parseInt(temp);//转成数字 24 i++; 25 //再还原为字符串 26 temp=String.valueOf(i); 27 int len=temp.length(); 28 //凑够七位 29 for (int j = 0; j <7-len; j++) 30 { 31 temp="0"+temp; 32 } 33 sid = "S"+temp; 34 } 35 return sid; 36 } 37 catch(Exception ex) 38 { 39 ex.printStackTrace(); 40 return null; 41 } 42 finally 43 { 44 //关闭事务,把事务的引用置成空 45 if(tx!=null){ 46 tx=null; 47 } 48 } 49 }
- 编写添加学生业务逻辑代码
public boolean addStudents(Students s) { // TODO Auto-generated method stub s.setSid(getNewSid());//设置学生学号 Transaction tx=null;//生成事务对象 try { Session session=MyHibernateSessionFactory.getSessionFactory().getCurrentSession();//获得会话 tx = session.beginTransaction();//开启事务 session.save(s); tx.commit(); return true; } catch(Exception ex) { ex.printStackTrace(); return false; } finally { //把事务置成空 if(tx!=null){ tx=null; } } }
5.修改学生资料
- 界面原型演示
- 编写修改学生业务逻辑代码
页面显示学生资料保存修改后的学生资料
- 编写修改action
- 页面调用