您好,登錄后才能下訂單哦!
下載全套文件: hibernate-release-4.1.7.Final.zip
目錄結(jié)構(gòu)
Documentation文件夾下是開(kāi)發(fā)幫助文檔
Lib文件夾是開(kāi)發(fā)使用的庫(kù),其中該文件夾下面的required目錄是開(kāi)發(fā)時(shí)必須導(dǎo)入的JAR文件;
Project文件夾是項(xiàng)目源碼文件
JDBC與Hibernate的比較:
Hibernate的初步配置部署:
1. 創(chuàng)建web項(xiàng)目
2. 添加響應(yīng)需要的Hibernate的jar包
3. 創(chuàng)建Java Bean業(yè)務(wù)實(shí)體類(lèi)
4. 創(chuàng)建實(shí)體類(lèi)映射的配置文件:**.hbm.xml
5. 創(chuàng)建Hibernate的配置文件hibernate.cfg.xml
6. 創(chuàng)建測(cè)試類(lèi)測(cè)試hibernate是否配置成功
實(shí)體類(lèi):UserInfo.java
public class UserInfo
{
private int userid;
private String userName;
private String userPwd;
private Date birthday;
//省略了屬性各種get和set方法
//創(chuàng)建含有id的構(gòu)造函數(shù)
public UserInfo(int id)
{
this.userid=id;
}
public UserInfo(int userid, String userName, String userPwd, Date birthday)
{
super();
this.userid = userid;
this.userName = userName;
this.userPwd = userPwd;
this.birthday = birthday;
}
//無(wú)參的構(gòu)造函數(shù)是必須要有的
public UserInfo()
{
}
}
實(shí)體類(lèi)的配置文件UserInfo.hbm.xml
(配置文件盡量和實(shí)體類(lèi)名字去的一致方便管理和實(shí)體類(lèi)放在同一個(gè)包中)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/HibernateMapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="entity"> //package包指定實(shí)體類(lèi)的包
<class name="UserInfo" table="luser">
//name指定實(shí)體類(lèi)名 table為數(shù)據(jù)庫(kù)中實(shí)體類(lèi)對(duì)應(yīng)的表名如果沒(méi)有指定就和類(lèi)名一致
<id name="userid">
<generator class="native"/>
</id>
//id標(biāo)識(shí)主鍵的字段 class=native標(biāo)識(shí)自增長(zhǎng)
<property name="userName" column=”name” />
//property指定屬性的字段,column可以指定數(shù)據(jù)庫(kù)中對(duì)應(yīng)字段的名稱(chēng),如果沒(méi)有就和實(shí)體類(lèi)的屬性名一致
<property name="userPwd" />
<property name="birthday" />
</class>
</hibernate-mapping>
Hibernate的配置文件hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/HibernateConfiguration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 顯示執(zhí)行的sql語(yǔ)句 -->
<property name="show_sql">true</property>
<!-- 格式化sql語(yǔ)句 -->
<property name="format_sql">true</property>
<!-- 配置數(shù)據(jù)庫(kù)各種數(shù)據(jù) -->
<!-- 配置數(shù)據(jù)庫(kù)本地語(yǔ)言 -->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- 數(shù)據(jù)庫(kù)驅(qū)動(dòng) -->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!-- 數(shù)據(jù)庫(kù)url -->
<property name="hibernate.connection.url">jdbc:oracle:thin:@192.168.3.252:1521:orcl</property>
<!-- 配置數(shù)據(jù)庫(kù)的用戶(hù)名和密碼 -->
<property name="hibernate.connection.username">bam1</property>
<property name="hibernate.connection.password">bam1</property>
<!-- 設(shè)置數(shù)據(jù)定義語(yǔ)言操作的方式 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 加載對(duì)象關(guān)系映射文件 -->
<mapping resource="entity/UserInfo.hbm.xml"/>
</session-factory>
</hibernate-configuration>
測(cè)試類(lèi)Test.java
添加一條數(shù)據(jù):
public static void add()
{
//第一步:讀取Hibernate的配置文件 hibernamte.cfg.xml文件
Configurationcon=new Configuration().configure();
//第二步:創(chuàng)建服務(wù)注冊(cè)構(gòu)建器對(duì)象,通過(guò)配置對(duì)象中加載所有的配置信息
ServiceRegistryBuilderregbulider=newServiceRegistryBuilder().applySettings(con.getProperties());
//創(chuàng)建注冊(cè)服務(wù)
ServiceRegistryreg=regbulider.buildServiceRegistry();
//第三步:創(chuàng)建會(huì)話(huà)工廠(chǎng)
SessionFactorysessionFactory=con.buildSessionFactory(reg);
//第四步:創(chuàng)建數(shù)據(jù)操作會(huì)話(huà)
Sessionsession=sessionFactory.openSession();
//創(chuàng)建對(duì)象
*/
UserInfohanhan=new UserInfo();
hanhan.setUserName("hanhan313");
hanhan.setUserPwd("123");
hanhan.setBirthday(new Date());
/*
//創(chuàng)建事物
Transactiontran=session.beginTransaction();
//保存數(shù)據(jù)
session.save(hanhan);
//提交事物
tran.commit();
//關(guān)閉對(duì)話(huà)
session.close();
}
查詢(xún)一條數(shù)據(jù):
創(chuàng)建了session回話(huà)后
//查詢(xún)id為10的userinfo的用戶(hù)信息
UserInfouser=session.get(UserInfo.class,10);
更新一條數(shù)據(jù):
首先查詢(xún)出數(shù)據(jù)
UserInfo user=session.get(UserInfo.class,10);
再對(duì)user進(jìn)行數(shù)據(jù)修改后
再通過(guò)獲取到session回話(huà)
session.update(user)
刪除一條數(shù)據(jù):
刪除數(shù)據(jù)時(shí)將需要?jiǎng)h除的id數(shù)據(jù)包裝成對(duì)象
比如:
UserInfouser=new UserInfo();
User.setUserId(10);
session.delete(user); //刪除時(shí)就會(huì)自動(dòng)獲取到user中id進(jìn)行刪除
hibernate的流程:
持久化JAVA類(lèi)必須遵循的原則
1、為類(lèi)的持久化字段聲明訪(fǎng)問(wèn)方法(get/set),Hibernate對(duì)JavaBeans風(fēng)格的屬性實(shí)行持久化。
2、實(shí)現(xiàn)一個(gè)默認(rèn)的構(gòu)造方法,這樣的話(huà)Hibernate就可以使用Constructor.newInstance()方法來(lái)實(shí)例化對(duì)象。
3、如果是集合類(lèi)型的屬性,它的類(lèi)型必須定義為集合的接口,例如:List、Set
4、提供一個(gè)標(biāo)識(shí)屬性(Identifier property),如果沒(méi)有該屬性,一些功能不起作用,比如:級(jí)聯(lián)更新,session.saveOrUpdate()。
對(duì)象的狀態(tài):
瞬時(shí)(transient):數(shù)據(jù)庫(kù)中沒(méi)有數(shù)據(jù)與之對(duì)應(yīng),超過(guò)作用域會(huì)被JVM垃圾回收器回收,一般是new出來(lái)且與session沒(méi)有關(guān)聯(lián)的對(duì)象。
持久(persistent):數(shù)據(jù)庫(kù)中有數(shù)據(jù)與之對(duì)應(yīng),當(dāng)前與session有關(guān)聯(lián),并且相關(guān)聯(lián)的session沒(méi)有關(guān)閉,事務(wù)沒(méi)有提交;持久對(duì)象狀態(tài)發(fā)生改變,在事務(wù)提交時(shí)會(huì)影響到數(shù)據(jù)庫(kù)(hibernate能檢測(cè)到)。
脫管(detached):數(shù)據(jù)庫(kù)中有數(shù)據(jù)與之對(duì)應(yīng),但當(dāng)前沒(méi)有session與之關(guān)聯(lián);托管對(duì)象狀態(tài)發(fā)生改變,hibernate不能檢測(cè)到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。