Hibernate對JDBC的操作進(jìn)行了輕量級的封裝,使開發(fā)人員可以利用Session對象以面向?qū)ο蟮乃枷雽?shí)現(xiàn)對關(guān)系型數(shù)據(jù)庫的操作,輕而易舉地實(shí)現(xiàn)數(shù)據(jù)庫基本的增,刪、改、查操作。在學(xué)習(xí)Hibernate的添加數(shù)據(jù)方法前,首先了解一下Hibernate數(shù)據(jù)庫持久化流程,Hibernate的數(shù)據(jù)持久化過程如下圖所示。
下面以商品的基本本信息為例進(jìn)行數(shù)據(jù)庫的增、刪、改、查操作,首先構(gòu)造商品的持久化類Product.java。關(guān)鍵代碼如下:
@Entity
publicclassProduct {
@Id
//@GeneratedValue(strategy = GenerationType.AUTO)
privateintid;//唯一標(biāo)識
privateStringname;//產(chǎn)品名稱
privatedoubleprice;//產(chǎn)品價(jià)格
privateStringfactory;//生產(chǎn)商
privateStringremark;//備注
......//身略Setter()和Getter()方法
}
在執(zhí)行添加操作時(shí)需要Session對象的save()方法,它的入口參數(shù)為程序中的持久化類。向數(shù)據(jù)庫中的產(chǎn)品信息表添加產(chǎn)品信息,如下代碼。
publicclassTest {
publicstaticvoidmain(String[] args) {
Session session =HibernateUtil.getSession();
session.beginTransaction();
Product product=newProduct();
product.setId(100001);
product.setName("女士牛仔外套");
product.setFactory("蘇州萬麗服飾");
product.setPrice(233.9);
product.setRemark("2017春新款");
session.save(product);
session.getTransaction().commit();
}
}
持久化對象product在創(chuàng)建之后是瞬時(shí)狀態(tài)(Transient),在Session執(zhí)行save()方法之后持久化對象product的狀態(tài)變?yōu)榇没癄顟B(tài)(Persistent),但是這時(shí)數(shù)據(jù)庫操作并未提交給數(shù)據(jù)庫,在事務(wù)執(zhí)行commit()方法之后,才完成數(shù)據(jù)庫的添加操作,此時(shí)的特久化對象product成為臟(dirty)對象。
Session關(guān)閉之后,特久化對象product的狀態(tài)變?yōu)橥泄軤顟B(tài)(Detached),并最后被JVM所收回。