標籤:
1.這裡面我想先說一下session對象的建立,這個是我們操縱資料庫的核心對象,因此首先我們應該擷取相應的session對象。
public static Configuration cfg; public static SessionFactory factory; public static Session session = null; static { //用來讀取hibernate.cfg.xml的設定檔 cfg = new Configuration().configure(); //擷取工廠 factory = cfg.buildSessionFactory(); //建立對應的session對象 session = factory.openSession(); }
強調一下,這裡之所以都用static可以確保我們只產生一個session,而不會出現重複調用的情況。
2.接著就進行了儲存操作,試下了資料對象的儲存
public static void insertStudentSelection(String studentID,String teacherID){ session.beginTransaction();// 開啟事務 Studentselection st=new Studentselection(studentID,teacherID); session.save(st); session.getTransaction().commit(); //提交事務之後才能保證資料儲存成功 session.close(); }
這裡的開啟事務是必須的,應為如果我們沒有開啟事務和儲存事務的話,我們對應的資料庫儲存操作就會失敗,同時建立的session也應當在使用完成之後關閉,否則長期使用下去的話會造成串連池溢出等一系列問題,hibernate沒有想jdbc一樣有自動認可事務的功能,因此我們必須要進行手動的開啟和提交。
3.在進行對象提交的時候我出現了一個問題,就是Duplicate entry ‘abc‘ for key ‘PRIMARY‘錯誤,這個原因在與我插入的資料的主鍵與資料庫存在的資料重複,因此資料庫拒絕插入,下次遇到了就要注意。
4.同是我還對資料庫進行查詢操作
public static boolean select(Student stu) { session.beginTransaction();// 開啟事務 Criteria cre = session.createCriteria(Student.class); cre.add(Expression.eq("studentId", stu.getStudentId())); cre.add(Expression.eq("password", stu.getPassword())); List<Student> student = cre.list(); if (session.isOpen()) {//關閉事務 session.close(); } // List<Student> student = session.createCriteria(Student.class).add( // Example.create(stu)).list(); for (Student stu1 : student) { System.out.println(stu1); } //當發現集合為空白的時候則證明為查詢到相應的資料 if (student.isEmpty()) { return false; } else { return true; } }
通過list集合我可以擷取返回相應的對象集合,通過foreach語句進行迭代遍曆。
Hibernate簡單的儲存操作