最近在熟習新公司的項目,看到里面亂麻麻的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 閱讀(900)
評論(0) 編輯 收藏 所屬分類:
個人學習日記 、
Hibernate