最近在熟習新公司的項目,看到里面亂麻麻的SQL語句,if - else語句就頭大,雖然這個項目有用hibernate,但是感覺上沒有運用到hibernate的優勢,只是用了一些hql語句和hibernate的數據庫分頁。沒有延遲加載,沒有聯級操作,表也沒有建立約束,甚至沒有索引?,F在該項目已經算是做完了,我剛到,要去接手并修改里面的內容,真是很痛苦的,最痛苦的還是那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 閱讀(904) 評論(0)  編輯  收藏 所屬分類: 個人學習日記Hibernate
          主站蜘蛛池模板: 靖江市| 贵州省| 吉林省| 巨野县| 金华市| 崇明县| 灌南县| 西平县| 波密县| 盐池县| 济阳县| 灵宝市| 忻城县| 普宁市| 永康市| 洞头县| 民和| 临汾市| 达尔| 英德市| 丰镇市| 独山县| 青阳县| 清原| 连城县| 陵水| 松江区| 民乐县| 克东县| 马公市| 长丰县| 兰州市| 和顺县| 梁河县| 霞浦县| 富顺县| 贞丰县| 永德县| 普兰县| 汶川县| 大荔县|