最近在熟習新公司的項目,看到里面亂麻麻的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 閱讀(904) 評論(0)  編輯  收藏 所屬分類: 個人學習日記Hibernate
          主站蜘蛛池模板: 方山县| 和龙市| 内乡县| 伊金霍洛旗| 叙永县| 宁波市| 沐川县| 华亭县| 龙川县| 德钦县| 永年县| 大安市| 新巴尔虎左旗| 延津县| 桓台县| 伊金霍洛旗| 博爱县| 宁阳县| 海阳市| 综艺| 祥云县| 南漳县| 宜兴市| 丹凤县| 弋阳县| 若羌县| 昌乐县| 竹北市| 泌阳县| 稷山县| 屯昌县| 彰武县| 屏山县| 龙胜| 扎兰屯市| 和田市| 米泉市| 黔东| 东丽区| 三河市| 衢州市|