最近在熟習(xí)新公司的項目,看到里面亂麻麻的SQL語句,if - else語句就頭大,雖然這個項目有用hibernate,但是感覺上沒有運用到hibernate的優(yōu)勢,只是用了一些hql語句和hibernate的數(shù)據(jù)庫分頁。沒有延遲加載,沒有聯(lián)級操作,表也沒有建立約束,甚至沒有索引。現(xiàn)在該項目已經(jīng)算是做完了,我剛到,要去接手并修改里面的內(nèi)容,真是很痛苦的,最痛苦的還是那512的內(nèi)存。。。

          在一開始建立數(shù)據(jù)庫表時,建立好約束,建立好索引,表的設(shè)計合理,之后的一切都會是很美好的。比如有3張表:

          學(xué)生:t_student
          id
          name
          email


          科目:t_subjects
          id
          subjects name
          student_id


          考試:t_test
          id
          student_id
          subjects_id
          month
          times

          學(xué)生表和科目表,學(xué)生表和考試表,科目和考試都是一對多關(guān)系。建立好索引和約束,然后由hibernate自動生成hbm文件,并在學(xué)生表、科目表的hbm文件里設(shè)置inverse="true" cascade="all" lazy="true"。

          就大致配置好了,然后假如要錄入這樣一條涉及到3個表的記錄:
          學(xué)生姓名、email、科目名稱、月份、考試次數(shù)
          就只需要寫一個簡單的方法調(diào)用session.save就可以保存所有內(nèi)容了:

          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 閱讀(901) 評論(0)  編輯  收藏 所屬分類: 個人學(xué)習(xí)日記 、Hibernate
          主站蜘蛛池模板: 唐河县| 永州市| 剑河县| 扎兰屯市| 肇源县| 卫辉市| 临桂县| 梧州市| 什邡市| 娱乐| 太谷县| 巴彦淖尔市| 富宁县| 正安县| 信阳市| 周宁县| 方山县| 靖远县| 雷山县| 营口市| 罗甸县| 大兴区| 永州市| 岳池县| 抚顺县| 汝阳县| 衡山县| 八宿县| 库车县| 阜康市| 武邑县| 高青县| 汝南县| 洛阳市| 博白县| 闽清县| 庆安县| 应用必备| 右玉县| 八宿县| 亳州市|