最近在熟习新公司的项目,看到里面乱麻麻的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