最近在熟习新公司的项目,看到里面乱麻麻的SQL语句,if - else语句就头大,虽然这个项目有用hibernate,但是感觉上没有运用到hibernate的优势,只是用了一些hql语句和hibernate的数据库分页。没有延迟加载,没有联级操作,表也没有建立约束,甚至没有索引。现在该项目已经算是做完了,我刚到,要去接手并修改里面的内容,真是很痛苦的,最痛苦的还是那512的内存。。。

在一开始建立数据库表时,建立好约束,建立好索引,表的设计合理,之后的一切都会是很美好的。比如有3张表:

学生:t_student
id
name
email


科目:t_subjects
id
subjects name
student_id


考试:t_test
id
student_id
subjects_id
month
times

学生表和科目表,学生表和考试表,科目和考试都是一对多关系。建立好索引和约束,然后由hibernate自动生成hbm文件,并在学生表、科目表的hbm文件里设置inverse="true" cascade="all" lazy="true"。

就大致配置好了,然后假如要录入这样一条涉及到3个表的记录:
学生姓名、email、科目名称、月份、考试次数
就只需要写一个简单的方法调用session.save就可以保存所有内容了:

public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  DynaActionForm student_registerForm = (DynaActionForm) form;// TODO Auto-generated method stub
  //receive from actionform
  String strname = student_registerForm.getString("name");
  String stremail = student_registerForm.getString("email");
  String strsubjectname = student_registerForm.getString("subjectname");
  int intmonth = Integer.parseInt(student_registerForm.getString("month"));
  int inttimes = Integer.parseInt(student_registerForm.getString("times"));
  TStudent tStudent = new TStudent();
  tStudent.setName(strname);
  tStudent.setEmail(stremail);
  //set the subject
  TSubjects Tsubjects = new TSubjects();
  Tsubjects.setTStudent(tStudent);
  Tsubjects.setName(strname);
  tStudent.getTSubjectses().add(Tsubjects);
  //set the test
  TTest Ttest = new TTest();
  Ttest.setTStudent(tStudent);
  Ttest.setMonth(intmonth);
  Ttest.setTimes(inttimes);
  tStudent.getTTests().add(Ttest);
  //insert all
  tstudentDAO.insert(tStudent);
  return mapping.findForward("ok");
 }

 tstudentDAO只有一个操作:
session.save(tStudent);

之后可以看到3个表里的记录都同时增加好了。

posted on 2008-06-22 23:42 lzj520 阅读(893) 评论(0)  编辑  收藏 所属分类: 个人学习日记Hibernate

只有注册用户登录后才能发表评论。


网站导航: