Hibernate框架的搭建
1. 添加jar包
hibernate解壓後將lib/required文件夾下的jar包都添加到WebContent/lib下
2. 添加核心配置文件
src/hibernate.cfg.xml 數據庫連接相關配置【c3p0】運行時常量【show_sql format_sql】和註冊映射元文件【xml和註解】
運行時常量hibernate.hbm2ddl.auto 可以取值有4種:
1、create:每次加載hibernate時都會刪除上一次的生成的表,然後根據你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是導致數據庫表數據丟失的一個重要原因。可以理解爲drop-create
2、create-drop :每次加載hibernate時根據model類生成表,但是sessionFactory一關閉,表就自動刪除。用於測試階段
3、update:最常用的屬性,第一次加載hibernate時根據model類會自動建立起表的結構(前提是先建立好數據庫),以後加載hibernate時根據 model類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到服務器後,表結構是不會被馬上建立起來的,是要等 應用第一次運行起來後纔會。在開發階段中配置
查看配置文件,可以看到唯一性約束
解決方法:用戶名稱必須唯一
3. 定義實體類和對應的映射元文件
在覈心配置文件中註冊映射元文件
在這裏採用xml開發
4、編程調用
public class TestAPI {
public static void main(String[] args) {
UserBean user = new UserBean();
user.setUsername("xiaohui");
user.setPassword("666666");
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
.configure().build();
SessionFactory fac = new MetadataSources(ssr).buildMetadata()
.buildSessionFactory();
Session session = fac.openSession();
Transaction transaction = session.beginTransaction();
session.persist(user);
transaction.commit();
session.close();
}
@Test
public void testSave() {
UserBean user = new UserBean();
user.setUsername("xiaohui");
user.setPassword("666666");
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
.configure().build();
SessionFactory fac = new MetadataSources(ssr).buildMetadata()
.buildSessionFactory();
Session session = fac.openSession();
Transaction transaction = session.beginTransaction();
session.persist(user);
//session.save(user);
transaction.commit();
session.close();
}
動態插入dynamic-insert="true" 和動態修改 dynamic-update="true"
刪除數據
按照id加載數據
5、常見的異常和對應的處理方法
解決方法:檢查當前操作的實體類對象是否符合映射元文件中的約束說明
解決方法:檢查映射元文件中看哪個屬性在實體類中沒有進行定義