hibernate 环境搭建测试
對(duì)于hibernate的介紹,網(wǎng)絡(luò)上一搜一堆,恐怕我寫(xiě)的也沒(méi)前輩總結(jié)的好。
這個(gè)博主總結(jié)的十分好,方便大家欣賞 ?http://blog.csdn.net/liujiahan629629/article/details/21442607
真正要掌握,還得需要自己動(dòng)手,才能豐衣足食。
所需jar包
jar包版本不同,找的地址也不同。這里用到的是?hibernate-release-5.2.10 版本的jar包
除了這些jar包,還需要數(shù)據(jù)庫(kù)驅(qū)動(dòng)jar,根據(jù)自己用的數(shù)據(jù)庫(kù)自定,這里用到的是oracle
?
2.jar包導(dǎo)入好,看看配置,在配置之前,看下實(shí)體和表結(jié)構(gòu)。
實(shí)體 Users
package?com.hib.entity;public?class?Users?{private?Integer?id;private?String?name;private?String?pass;private?String?address;public?Integer?getId()?{return?id;}public?void?setId(Integer?id)?{this.id?=?id;}public?String?getName()?{return?name;}public?void?setName(String?name)?{this.name?=?name;}public?String?getPass()?{return?pass;}public?void?setPass(String?pass)?{this.pass?=?pass;}public?String?getAddress()?{return?address;}public?void?setAddress(String?address)?{this.address?=?address;}public?Users(Integer?id,?String?name,?String?pass,?String?address)?{super();this.id?=?id;this.name?=?name;this.pass?=?pass;this.address?=?address;}public?Users()?{super();}@Overridepublic?String?toString()?{return?"Users?[id="?+?id?+?",?name="?+?name?+?",?pass="?+?pass?+?",?address="?+?address?+?"]";}}表結(jié)構(gòu)
在src下 hibernate.cfg.xml配置,如果不知道里面的配置怎么寫(xiě)。可以通過(guò)在下載的jar包中搜索hibernate.cfg.xml,里面有配置信息。
hibernate.cfg.xml 配置如下
<!DOCTYPE?hibernate-configuration?PUBLIC"-//Hibernate/Hibernate?Configuration?DTD?3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property?name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property><property?name="hibernate.connection.username">ssh</property><property?name="hibernate.connection.password">ssh</property><property?name="hibernate.connection.url">jdbc:oracle:thin:@127.0.0.1:1521:xe</property><!--?方言?--><property?name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property><!--?可視化sql?--><property?name="hibernate.show_sql">true</property><!--?格式化sql,自動(dòng)對(duì)可視化sql換行,對(duì)齊?--><property?name="hibernate.format_sql">true</property><!--?映射文件配置?--><mapping?resource="User.hbm.xml"/></session-factory> </hibernate-configuration>3. User.hbm.xml配置
<?xml?version="1.0"?encoding="UTF-8"?> <!DOCTYPE?hibernate-mapping?PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"? "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"?> <hibernate-mapping><!--?name:是實(shí)體???table是表名稱(chēng)?--><class?name="com.hib.entity.Users"?table="TEST_USER"><id?name="id"><!--?主鍵自增策略,在下面會(huì)專(zhuān)門(mén)提到?--><generator?class="increment"></generator></id><!--?name:是實(shí)體中屬性的名稱(chēng),column:是表中字段的名稱(chēng),type是數(shù)據(jù)類(lèi)型?在這里發(fā)現(xiàn)后面的?pass和?address?沒(méi)有寫(xiě)column和type如果表字段和實(shí)體屬性名稱(chēng)一致,可以省略不寫(xiě)--><property?name="name"?column="name"?type="java.lang.String"/><property?name="pass"/><property?name="address"/></class></hibernate-mapping>4.測(cè)試數(shù)據(jù)連接是否配置成功
package?com.hib.test;import?org.hibernate.Session; import?org.hibernate.SessionFactory; import?org.hibernate.Transaction; import?org.hibernate.cfg.Configuration; import?org.junit.Test;import?com.hib.entity.Users;public?class?TestConn?{//?獲取sessionpublic?static?Session?getSession(){//?加載配置Configuration?cfg?=?new?Configuration().configure();//?獲取sessionFactorySessionFactory?factory?=?cfg.buildSessionFactory();//?獲取sessionSession?session?=?factory.openSession();return?session;}//?查詢(xún)@Testpublic?void?query(){Session?session?=?getSession();//?查詢(xún)Users?users?=?session.get(Users.class,?1);System.out.println(users);//關(guān)閉資源session.close();}//?在進(jìn)行增刪改時(shí)?,好控制事務(wù)????----?插入@Testpublic?void?insert(){Session?session?=?getSession();//?開(kāi)啟事務(wù)Transaction?tx?=?session.beginTransaction();Users?users?=?new?Users(null,?"xyz",?"xyz",?"china");//?插入session.save(users);//?事務(wù)提交tx.commit();//?事務(wù)回滾//tx.rollback();session.close();}//?更新數(shù)據(jù)前???需要先查詢(xún)出修改的數(shù)據(jù)@Testpublic?void?update(){Session?session?=?getSession();Transaction?tx?=?session.beginTransaction();Users?users?=?session.get(Users.class,?1);users.setAddress("鄭州");users.setName("小李飛刀");session.update(users);tx.commit();session.close();}//?刪除??需要先出現(xiàn)出刪除的數(shù)據(jù)@Testpublic?void?delete(){Session?session?=?getSession();Transaction?tx?=?session.beginTransaction();Users?users?=?session.get(Users.class,?1);session.delete(users);tx.commit();session.close();}}這里講解下關(guān)于hibernate中主鍵的生成策略
increment 一般用于測(cè)試,多并發(fā)環(huán)境中存在主鍵取值沖突,這里文章包括下面寫(xiě)的都是用的
? 這個(gè),方便測(cè)試。實(shí)際項(xiàng)目中,沒(méi)有人會(huì)用到。
2.?sequence ?oralcle數(shù)據(jù)庫(kù)專(zhuān)用
在oracle數(shù)據(jù)庫(kù)中創(chuàng)建序列 : create sequence st_id start with 7 increment by 1;
?意思是:創(chuàng)建序列名為 st_id 從7開(kāi)始,每次增加1
?hibernate中默認(rèn)值是 hibernate_sequence
????<id name="id">
<generator class="sequence">
<param name="sequence_name">st_id</param>
</generator>
</id>
3. identity :適用于mysql sqlserver 相當(dāng)于2
????<id name="id">
????<generator class="identity"></generator>
</id>
4. uuid 生成32位長(zhǎng)度全球唯一的字符串,適用于分布式系統(tǒng)中
5. foreign : 專(zhuān)用于1:1 共享主鍵的從表方?
6. assigned: 手動(dòng)指定ID,一般不用
這里值得一提:在使用sequence時(shí),配置文件中寫(xiě)
<id name="id" column="id">
? <generator class="sequence">
? ?這里 name為 sequence_name,但我當(dāng)時(shí)配置時(shí)候?qū)懙氖莝equence,出了錯(cuò)。搜了好久,也沒(méi)有發(fā)現(xiàn)錯(cuò)誤,并且別人寫(xiě)的也是sequence。這里我也沒(méi)有去看其他版本,這里我使用是5.2版,可能是版本之間的問(wèn)題。希望注意下。如果你不知道配置是sequence 還是sequence_name,可以搜當(dāng)前版本的文件 sequence,會(huì)有一些文件和文件夾,找里面的配置,看里面寫(xiě)的是什么。
? ?<param name="sequence_name">sqs_id</param>
? </generator>
</id>
這里僅僅是個(gè)測(cè)試,后面的會(huì)繼續(xù)更新,不足希望多多指教。
轉(zhuǎn)載于:https://blog.51cto.com/zhuws/1932652
總結(jié)
以上是生活随笔為你收集整理的hibernate 环境搭建测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java核心技术 卷1基础知识 原书第1
- 下一篇: PDF文档如何转高清图片?