hibernate多表操作复习

最近在熟习新公司的项目,看到里面乱麻麻的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个表里的记录都同时增加好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值