最近在熟習新公司的項目,看到里面亂麻麻的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 閱讀(901) 評論(0)  編輯  收藏 所屬分類: 個人學習日記Hibernate
          主站蜘蛛池模板: 化州市| 根河市| 南通市| 上虞市| 贡嘎县| 五家渠市| 准格尔旗| 密山市| 甘南县| 平遥县| 个旧市| 洪湖市| 石林| 桂平市| 吴江市| 保德县| 松滋市| 观塘区| 桦甸市| 澄城县| 嵊州市| 宁远县| 肃北| 宁城县| 华安县| 罗江县| 延川县| 临猗县| 河南省| 东兰县| 呈贡县| 林芝县| 米脂县| 凤庆县| 化州市| 宁城县| 班戈县| 金华市| 城步| 柘城县| 南皮县|