JAVA培訓(xùn)開發(fā)資料
《JAVA培訓(xùn)開發(fā)資料》由會員分享,可在線閱讀,更多相關(guān)《JAVA培訓(xùn)開發(fā)資料(53頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,*,單擊此處編輯母版標(biāo)題樣式,,對象/關(guān)系映射—Hibernate,作者:錢安川( Moxie),,,學(xué)員要求,:,熟悉,Java、SQL、JDBC,,掌握面向?qū)ο蟮拈_發(fā)方法,并有實(shí)際項(xiàng)目開發(fā)經(jīng)驗(yàn),,課程目標(biāo):,理解,O/R Mapping,原理,掌握,Hibernate,開發(fā)的相關(guān)知識,并能使用,Hibernate,進(jìn)行實(shí)際項(xiàng)目開發(fā),,目錄,一、持久化層-O/R Mapping,,二、Hibernate入門,,三、Hibernate映射申明(Mapping declaration),,四、持久化對象的狀態(tài)和生命周期,,五、
2、Hibernate查詢,,六、Hibernate最佳實(shí)踐,,一、持久化層-O/R Mapping,基于B/S的典型三層架構(gòu),如何分層?,,業(yè)務(wù)邏輯層和持久化層絕不要依賴于展現(xiàn)層。,,使用假設(shè)法測試。,,例子:1、一個顯示課程考試分?jǐn)?shù)的列表。現(xiàn)在要將不及格的分?jǐn)?shù)用紅色字體顯示(低于60分)。,,2、搜索。,,如何進(jìn)行對象-關(guān)系數(shù)據(jù)庫的匹配,public class,User,{,,private String,name,;,,private String,password,;,,private List address;,,………,,},,create table,tbl_user,(,,,na
3、me,varchar(255) not null ,,,,password,varchar(255),,,……….,,primary key (name),,),如何進(jìn)行對象,-,關(guān)系數(shù)據(jù)庫的匹配?,,,,,,,,,,,,,,對象—關(guān)系數(shù)據(jù)庫的不匹配范式,粒度(granularity)的問題,,子類型(subtypes)的問題,,同一性(identity)的問題,,與關(guān)聯(lián)(associations)有關(guān)的問題,,對象結(jié)構(gòu)導(dǎo)航(navigation)的問題,,,范式不匹配的代價,,花費(fèi)很多時間和精力來手工實(shí)現(xiàn)對象和關(guān)系的匹配。,,甚至要扭曲對象模型直到它與下層的關(guān)系技術(shù)匹配為止。,,JDBC A
4、PI本身的問題。JDBC和SQL提供了一個面向語句(即命令)的方法從SQL數(shù)據(jù)庫中來回移動數(shù)據(jù)。至少在三個時刻(Insert,Update,Select)必須指定一個結(jié)構(gòu)化關(guān)系,這增加了設(shè)計和實(shí)現(xiàn)所需要的時間。,,基于關(guān)系數(shù)據(jù)庫的持久層可選方案,,,,,,,,,,,,,,,基于關(guān)系數(shù)據(jù)庫的持久層可選方案,,,,,,,,,,,,,,O/R Mapping -What? Why?,什么是O/R Mapping?,,對象-關(guān)系映射是一門非常實(shí)用的工程技術(shù),它實(shí)現(xiàn)了Java應(yīng)用中的對象到關(guān)系數(shù)據(jù)庫中的表的自動的(和透明的)持久化,使用元數(shù)據(jù)(meta data)描述對象與數(shù)據(jù)庫間的映射。,O/R Ma
5、pping的優(yōu)點(diǎn),,提高生產(chǎn)率(Productivity),,可維護(hù)性(Maintainability),,更好性能(Performance),,廠商獨(dú)立性(Vendor independence),,二、Hibernate入門,Hibernate概述,,Hibernate是非常優(yōu)秀、成熟的O/R Mapping框架。它提供了強(qiáng)大的對象和關(guān)系數(shù)據(jù)庫映射以及查詢功能。,,,Hibernate優(yōu)勢,,開源(LGPL),,成熟,,流行(約13 000 downloads/month),,自定義API,,JBoss 將用Hibernate3實(shí)現(xiàn)Entity Beans,,Hibernate開發(fā)步驟,一
6、、持久化類的設(shè)計,,,二、持久化類和關(guān)系數(shù)據(jù)庫的映射,,,三、應(yīng)用的開發(fā),,持久化Java類必須遵循的原則,為類的持久化類字段申明訪問方法(get/set)。Hibernate對JavaBeans風(fēng)格的屬性實(shí)行持久化。,,,實(shí)現(xiàn)一個默認(rèn)的構(gòu)造方法(constructor)。這樣的話Hibernate就可以使用Constructor.newInstance()來實(shí)例化它們。,,,如果是集合類型的屬性,它的類型必須定義為集合的接口。例如:List、Set。,,,提供一個標(biāo)識屬性(identifier property)。如果沒有該屬性,一些功能不起作用,比如:級聯(lián)更新(Cascaded updat
7、es)Session.saveOrUpdate()。,,持久化類和關(guān)系數(shù)據(jù)庫的映射,XDoclet:,它通過在Java源代碼中加入特定的JavaDoc tag,從而為其添加特定的附加語義,之后通過XDoclet工具對代碼中JavaDoc Tag進(jìn)行分析,自動生成與代碼對應(yīng)的配置文件()。,,XDoclet提供了對Hibernate的支持,這樣我們可以直接由Java代碼生成Hibernate映射文件。,,,Middlegen:,,從數(shù)據(jù)庫中已有,,的表結(jié)構(gòu)中生成,Hibernate,映射文,,件。當(dāng)前版本是2.1可以去下載。,,Hibernate核心接口,,,Configuration,,概述:
8、,Configuration 類負(fù)責(zé)管理Hibernate 的配置信息。它包括如下內(nèi)容:,,Hibernate運(yùn)行的底層信息:數(shù)據(jù)庫的URL、用戶名、密碼、JDBC驅(qū)動類,數(shù)據(jù)庫Dialect,數(shù)據(jù)庫連接池等。,,Hibernate映射文件(*.hbm.xml)。,,,Hibernate配置的兩種方法:,,屬性文件(hibernate.properties)。,,調(diào)用代碼:Configuration cfg = new Configuration();,,Xml文件(hibernate.cfg.xml)。,,調(diào)用代碼:Configuration cfg = new Configuration(
9、).configure();,,,Configuration-例子,數(shù)據(jù)庫連接的配置,,hibernate.dialect,,hibernate.connection.driver_class,,hibernate.connection.url,jdbc:mysql://localhost/hibernate,,hibernate.connection.username,root,,,數(shù)據(jù)庫連接池的配置-DBCP(App Server連接池首選),,hibernate.connection.provider_class,,配置DBCP連接池,,其它,,hibernate.show_sql,tr
10、ue,,hibernate.jdbc.fetch_size,50,,hibernate.jdbc.batch_size,25,,SessionFactory,概述:,應(yīng)用程序從SessionFactory(會話工廠)里獲得Session(會話)實(shí)例。它在多個應(yīng)用線程間進(jìn)行共享。通常情況下,整個應(yīng)用只有唯一的一個會話工廠——例如在應(yīng)用初始化時被創(chuàng)建。然而,如果你使用Hibernate訪問多個數(shù)據(jù)庫,你需要對每一個數(shù)據(jù)庫使用一個會話工廠。,,會話工廠緩存了生成的SQL語句和Hibernate在運(yùn)行時使用的映射元數(shù)據(jù)。,,,調(diào)用代碼:,,SessionFactory sessionFactory =
11、,cfg,.buildSessionFactory();,,Session(會話),概述:,,Session不是線程安全的,它代表與數(shù)據(jù)庫之間的一次操作,它的概念介于Connection和Transaction之間。,,Session也稱為持久化管理器,因?yàn)樗桥c持久化有關(guān)的操作接口。,,Session通過SessionFactory打開,在所有的工作完成后,需要關(guān)閉。,,它與Web層的HttpSession沒有任何關(guān)系。,,,調(diào)用代碼,,Session session =,sessionFactory,.openSession();,,,Transaction(事務(wù)),概述:,,它將應(yīng)用代碼
12、從底層的事務(wù)實(shí)現(xiàn)中抽象出來——這可能是一個JDBC事務(wù),一個JTA用戶事務(wù)或者甚至是一個公共對象請求代理結(jié)構(gòu)(CORBA)——允許應(yīng)用通過一組一致的API控制事務(wù)邊界。這有助于保持Hibernate應(yīng)用在不同類型的執(zhí)行環(huán)境或容器中的可移植性。,,調(diào)用代碼:,,Transaction tx =,session,.beginTransaction();,,,注:,使用Hibernate進(jìn)行操作時(增、刪、改)必須顯示的調(diào)用Transaction(默認(rèn):autoCommit=false)。,,Query,,概述:,,Query(查詢)接口允許你在數(shù)據(jù)庫上執(zhí)行查詢并控制查詢?nèi)绾螆?zhí)行。查詢語句使用HQL
13、或者本地數(shù)據(jù)庫的SQL方言編寫。,,,調(diào)用代碼:,,Query query =,session,.createQuery(“from User”);,,用戶的例子,持久化類-User.java,,public class User {,,private Long id;,,private String name;,,private Date birthday;,,private String email;,,public User(){,,},,public User(String name,Date birthday,String email){,,.....…Get/Set,,},映射文件
14、-,,<,hibernate-mapping>,,,,,,,,,,,,,,,,,,,,應(yīng)用-UserTest.java,public void testCreate() throws Exception{,,Configuration cfg = new Configuration();,,cfg.addURL(UserTest.class.getResource("/com/test/um/User.hbm.xml"));,,SessionFactory sessionFactory = cfg.buildSessionFactory();,,,,Session session = sess
15、ionFactory.openSession();,,Transaction tx = session.beginTransaction();,,,,SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");,,User user = new User("Jack",format.parse("1980-04-12"),"Jack@");,,,,,session.save(user);,,mit();,,,,assertNotNull(user.getId());,,session.clear();,,User user_2 =
16、(User)session.get(User.class,user.getId());,,assertNotNull(user_2);,,,,session.close();,,},,應(yīng)用-UserTest.java,保存用戶:session.save(user);,,修改用戶:session.update(user);,,保存或修改用戶:session.saveOrUpdate(user);,,刪除用戶:session.delete(user);,,刪除所有用戶:session.delete(“from User ”);,,,查詢用戶名為“test”的用戶:,,Query query = s
17、ession.createQuery("from User where user.name = :name");,,query.setParameter(“test",user.getName());,,User findUser = (User) query.list().get(0);,,三、Hibernate映射申明(Mapping declaration),hibernate-mapping,,一、類層次。,class,,1、主鍵。,id,,2、基本類型。property,,3、自定義類。many-to-one | one-to-one,,4、集合。set | list | map
18、 | array,,4.1、one-to-many,,4.2、many-to-many,,5、子類。subclass | joined-subclass,,6、其它。component | any等,,二、查詢語句。Query,,說明:一個Hibernate-mapping中可以同時定義多個類。Query非常簡單,主要是用來放置查詢語句,便于對數(shù)據(jù)庫查詢的統(tǒng)一管理和優(yōu)化。,,hibernate-mapping, 19、date" (2),,,auto-import="true|false" (3),,package="package.name" (4),,/>,,(1)、schema(可選):數(shù)據(jù)庫Schema Name,,(2)、default-cascade(可選,默認(rèn)為none):默認(rèn)的級聯(lián)風(fēng)格,,(3)、auto-import(可選,默認(rèn)為true):是否在查詢中只使用類名。不用加package名字。,,(4)、package(可選),如果該映射文件中定義的類名不包含package,則使用這里定義的pack 20、age作為類名的前綴。,,一、類層次class, 21、ere condition" (7),,persister="PersisterClass" (8),,/>,,,1、主鍵-id, 22、字。,,(3)、column(可選-默認(rèn)為屬性名):對應(yīng)數(shù)據(jù)庫表的主鍵字段的名字。,,(4),、,unsaved-value,(,可選-默認(rèn)為,null),:這個值用來判斷對象是否要保存。,,,1.1主鍵生成策略generator,generator,,主鍵生成器,每個主鍵都必須定義相應(yīng)的主鍵生成策略。它用來為持久化類實(shí)例生成唯一的標(biāo)識。,,,Hibernate內(nèi)置的主鍵生成策略,,數(shù)據(jù)庫提供的主鍵生成機(jī)制。identity、sequence,(序列),。,,外部程序提供的主鍵生成機(jī)制。increment (遞增) ,hilo,(高低位),,seqhilo(,使用序列的高低位,),uuid.h 23、ex(使用了IP地址+JVM的啟動時間(精確到1/4秒)+系統(tǒng)時間+一個計數(shù)器值(在JVM中唯一) ),uuid.string。,,其它。native(本地),assigned(手工指定),foreign(外部引用)。,,2、基本類型-property, 24、 (4),,formula="arbitrary SQL expression" (5),,/>,,(4) update, insert (,可選,-,默認(rèn)為,true) :,表明在用于,UPDATE,和,/,或,INSERT,的,SQL,語句中是否包含這個字段。,,,(5) formula (可選): 一個SQL表達(dá)式,定義了這個計算(computed) 屬性的值。計算屬性沒有和它對應(yīng)的數(shù)據(jù)庫字段。,,3.1、,自定義類,-many-to-one, 25、 (2),,class="ClassName" (3),,,cascade="all|none|save-update|delete",(4),,outer-join="true|false|auto" (5),,property-ref="propertyNameFromAssociatedClass" (7),,/>,,(3) class (可選 - 默認(rèn)是通過反射得到屬性類型): 關(guān)聯(lián)的類的名字。,,(4) cascad 26、e(級聯(lián)) (可選): 指明哪些操作會從父對象級聯(lián)到關(guān)聯(lián)的對象。,,(5),outer-join,(外連接) (可選 - 默認(rèn)為 自動) hibernate.use_outer_join,,(7) property-ref: (可選) 指定關(guān)聯(lián)類的一個屬性,這個屬性將會和本外相對應(yīng)。,,例子:User-Group,,,,,,,,,,,,,,,,,3.2、,自定義類,-one-to-one,一對一關(guān)聯(lián),:,主鍵關(guān)聯(lián)和惟一外鍵關(guān)聯(lián)兩種方式。,,例子:User-IdCard(外鍵關(guān)聯(lián)),,,,,,, 27、join="false“,unique=“true”,/>,,,,,,,,,,,,4、集合-Set, 28、 (4),,cascade="all|none|save-update|delete|all-delete-orphan" (5),,order-by="column_name asc|desc" (6),,where="arbitrary sql where condition" (7),,outer-join="true|false|auto" (8),,>,,,(1) name 集合屬性的名稱,,(2 29、) table (可選)目標(biāo)關(guān)聯(lián)數(shù)據(jù)庫表,,(3),lazy,(可選——默認(rèn)為false)允許延遲加載(lazy initialization ),,(4),inverse,(可選——默認(rèn)為false) 標(biāo)記有哪一方來維護(hù)關(guān)聯(lián)關(guān)系(雙向關(guān)聯(lián)中使用)。,,(5) cascade (可選——默認(rèn)為none) 讓操作級聯(lián)到子實(shí)體,,(6) order-by (可選, 僅用于jdk1.4) 指定表的字段(一個或幾個)再加上asc或者desc(可選), 定義Map,Set和Bag的迭代順序,,(7) where (可選) 指定任意的SQL where條件,,(8) outer-join(可選-默認(rèn)為au 30、to)是否使用外聯(lián)接,,4.1、one-to-many,,概念,:,一對多關(guān)聯(lián)直接連接兩個類對應(yīng)的表,而沒有中間集合表。(實(shí)現(xiàn)了一個一對多的關(guān)系模型,例如:,User-Address),,這里的,Java,集合必須滿足下面的語義:,,map,set,或,list,中不能包含,null,值,,一個被包含的實(shí)體的實(shí)例只能被包含在一個集合的實(shí)例中,,,<,one-to-many class=",ClassName,"/>,,(1) class(,必須):被關(guān)聯(lián)類的名稱。,,例子(one-to-many):User-Address,,,,,,,,,,,,,,,,,,, ,,,,4.2、many-to- 31、many,, 32、lumn(必需):當(dāng)前表的關(guān)聯(lián)字段,,例子(many to many):student-trainClass,,,,,,,,,,,,,,,,,,,,,,5、繼承,繼承實(shí)現(xiàn)的三中策略,,單表繼承。每棵類繼承樹使用一個表(table per class hierarchy),,具體表繼承。每個子類一個表(table per subclass),,類表繼承。每個具體類一個表(table per concrete class)(有一些限制),,單表繼承,, 33、pe" (2),,/>,,,,例子(繼承):user-student,,,,,,,,,,,,,,,,,,,,,,雙向關(guān)聯(lián),概念:,雙向關(guān)聯(lián)允許通過關(guān)聯(lián)的任一端訪問另外一端。在Hibernate中, 支持兩種類型的雙向關(guān)聯(lián)。,,一對多(one-to-many),Set或者bag值在一端, 單獨(dú)值(非集合)在另外一端 。,,多對多(many-to-many),兩端都是set或bag值。,,例子(雙向關(guān)聯(lián)):group-user,,,,,, 34、,,,,,,,,,,,,例子:從Java代碼看group-user雙向關(guān)聯(lián)的,inverse,概念,:inverse用來標(biāo)識雙向關(guān)聯(lián)的,關(guān)聯(lián)關(guān)系,由哪一端維護(hù)。默認(rèn)inverse的值為false,由主動方負(fù)責(zé)維護(hù)關(guān)聯(lián)關(guān)系;如果設(shè)為true,則由反向一端維護(hù)關(guān)聯(lián)關(guān)系。,,用例:,我們假設(shè)已經(jīng)有一個Group類的實(shí)例:adminGroup,現(xiàn)在我們要新增一個用戶,并且將用戶分配到adminGroup中。,,inverse=“false”,,由主動方Group負(fù)責(zé)維護(hù)group-user的關(guān)聯(lián)關(guān)系.,,User user = new User(“Jak”);,,adminGroup.getUsers 35、.add(user);,,session.save(user); session.update(group);,,inverse=“true”,,由Group的反向段User負(fù)責(zé)維護(hù)關(guān)聯(lián)關(guān)系。,,User user = new User(“Jak”);,,user .setGroup(adminGroup); session.save(user);,,四、持久化對象的狀態(tài),瞬時對象(Transient Objects):,使用,new,操作符初始化的對象不是立刻就持久的。它們的狀態(tài)是瞬時的,也就是說它們沒有任何跟數(shù)據(jù)庫表相關(guān)聯(lián)的行為,只要應(yīng)用不再引用這些對象(不再被任何其它對象所引用),它們的 36、狀態(tài)將會丟失,并由垃圾回收機(jī)制回收。,,,持久化對(Persist Objects):,持久實(shí)例是任何具有數(shù)據(jù)庫標(biāo)識的實(shí)例。它有持久化管理器Session統(tǒng)一管理,持久實(shí)例是在事務(wù)中進(jìn)行操作的——它們的狀態(tài)在事務(wù)結(jié)束時同數(shù)據(jù)庫進(jìn)行同步。當(dāng)事務(wù)提交時,通過執(zhí)行SQL的INSERT、UPDATE和DELETE語句把內(nèi)存中的狀態(tài)同步到數(shù)據(jù)庫中。,,離線對象(Detached Objects):,Session關(guān)閉之后,持久化對象就變?yōu)殡x線對象。離線表示這個對象不能再與數(shù)據(jù)庫保持同步,它們不再受Hibernate管理。,,,持久化對象的生命周期(lifecycle),,Hibernate臟數(shù)據(jù)字段撿入 37、,,檢索一個用戶,并將它的用戶名更改為“Mary”,,Session session = sessionFactory.openSession();,,Transaction tx = session.beginTransaction();,,User user = (User) session.get(User.class, userId);,,user.setName("Mary");,,mit();,,session.close();,,持久化對象必須唯一,一個Session中不能同時存在兩個ID相同的持久化對象,,例如:id為userId的user_1對象已經(jīng)存在Session中,這時 38、如果Session中試圖產(chǎn)生一個user_2對象??!,,Session session = sessionFactory.openSession();,,Transaction tx = session.beginTransaction();,,User user_1 = (User)session.get(User.class,userId);,,User user_2 = new User(userId,”Mary”);,,session.update(user_2);,,最后將會產(chǎn)生異常:,net.sf.hibernate.NonUniqueObjectException:,,,a di 39、fferent object with the same identifier value was already associated with the session,,解決辦法: 使用evict ()方法將user_1實(shí)例從session中去除。session.evict(user_1);,,五、Hibernate查詢,概述:,數(shù)據(jù)查詢與檢索是Hibernate中的一個亮點(diǎn)。相對其他ORM實(shí)現(xiàn)而言,Hibernate提供了靈活多樣的查詢機(jī)制。,,標(biāo)準(zhǔn)化對象查詢(Criteria Query),:以對象的方式進(jìn)行查詢,將查詢語句封裝為對象操作。優(yōu)點(diǎn):可讀性好,符合Java 程序員的編碼習(xí)慣 40、。缺點(diǎn):不夠成熟,不支持投影(projection)或統(tǒng)計函數(shù)(aggregation),,Hibernate語言查詢(Hibernate Query Language,HQL),:它是,完全面向?qū)ο蟮牟樵冋Z句,查詢功能非常強(qiáng)大,具備繼承、多態(tài)和關(guān)聯(lián)等特性,。Hibernate官方推薦使用HQL進(jìn)行查詢。,,Native SQL Queries(原生SQL查詢),:直接使用數(shù)據(jù)庫提供的SQL方言進(jìn)行查詢。,,例子:標(biāo)準(zhǔn)化對象查詢(Criteria Query),簡單例子:,查詢用戶名以“J”開頭的所有用戶。,,Criteria criteria = session.createCriteria 41、(User.class);,,criteria.add(Expression.like("name","J%"));,,List users = criteria.list();,,Hibernate語言查詢(Hibernate Query Language,HQL),HQL用面向?qū)ο蟮姆绞缴蒘QL,,以類和屬性來代替表和數(shù)據(jù)列,,支持多態(tài),,支持各種關(guān)聯(lián),,減少了SQL的冗余,,HQL支持所有的關(guān)系數(shù)據(jù)庫操作,,連接(joins,包括Inner/outer/full joins),笛卡爾積(cartesian products),,投影(projection),,聚合(Aggregatio 42、n,max, avg)和分組(group),,排序(Ordering),,子查詢(Subqueries),,SQL函數(shù)(SQL function calls),,,例子: Hibernate語言查詢(Hibernate Query Language,HQL),簡單例子:,查詢用戶名以“J”開頭的所有用戶。,,Query query = session.createQuery(,,"from,User,user where,user.name,like 'J%'");,,List users = query.list();,,復(fù)雜例子:,從User和Group中查找屬于“admin”組的所有用戶 43、。,,Query query = session.createQuery(,,“from,User,user where =‘a(chǎn)dmin’”);,,,如果用傳統(tǒng)的SQL則查詢語句如下:,,select user.userId as userId, user.name as name, user.groupId as groupId, user.idCardId as idCardId,from TBL_USER user, TBL_GROUP group where (group.groupName='admin' and user.groupId=group.groupId),,,六、Hi 44、bernate最佳實(shí)踐(Best Practices),1、使用Configuration裝載映射文件時,不要使用絕對路徑裝載。最好的方式是通過getResourceAsStream()裝載映射文件,這樣Hibernate會從classpath中尋找已配置的映射文件。,,2、SessionFactory的創(chuàng)建非常消耗資源,整個應(yīng)用一般只要一個SessionFactory就夠了,只有多個數(shù)據(jù)庫的時候才會使用多個SessionFactory。,,3、在整個應(yīng)用中,Session和事務(wù)應(yīng)該能夠統(tǒng)一管理。(Spring為Hibernate提供了非常好的支持),,4、將所有的集合屬性配置設(shè)置為懶加載(, 45、lazy=”true”,)。在hibernate2.x版本中,lazy默認(rèn)值是“false”,但hibernate3.x已經(jīng)將lazy的默認(rèn)改為“true”了。,,Hibernate最佳實(shí)踐(Best Practices),5、在定義關(guān)聯(lián)關(guān)系時,集合首選,Set,,如果集合中的實(shí)體存在重復(fù),則選擇List(在定義配置文件時,可以將List定義為bag),數(shù)組的性能最差。,,6、在一對多的雙向關(guān)聯(lián)中,一般將集合的,inverse屬性設(shè)置為true,,讓集合的對方維護(hù)關(guān)聯(lián)關(guān)系。例如:Group-User,由User來維護(hù)Group和User的關(guān)聯(lián)關(guān)系。,,7、HQL子句本身大小寫無關(guān),但是其中出現(xiàn) 46、的類名和屬性名必須注意大小寫區(qū)分。,,8、在非分布式架構(gòu)中,,不需要使用DTO,來向上層傳輸數(shù)據(jù)。直接使用POJO的Entity就可以了。,,9、如果要精通Hibernate,熟練掌握關(guān)系數(shù)據(jù)庫理論和SQL是前提條件。,,Hibernate資源,官方網(wǎng)站:,,國內(nèi)網(wǎng)站:,,Java新視線論壇:,,《Hibernate 中文開發(fā)指南》作者夏昕(),,《深入淺出Hibernate》作者:夏昕 曹曉鋼 唐勇,,(http://www.china- in Action》作者:Christian Bauer and Gavin King( A Developer's Notebook》作者:James Elliott,,,結(jié)束,謝謝!,,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物業(yè)管理制度:常見突發(fā)緊急事件應(yīng)急處置程序和方法
- 某物業(yè)公司冬季除雪工作應(yīng)急預(yù)案范文
- 物業(yè)管理制度:小區(qū)日常巡查工作規(guī)程
- 物業(yè)管理制度:設(shè)備設(shè)施故障應(yīng)急預(yù)案
- 某物業(yè)公司小區(qū)地下停車場管理制度
- 某物業(yè)公司巡查、檢查工作內(nèi)容、方法和要求
- 物業(yè)管理制度:安全防范十大應(yīng)急處理預(yù)案
- 物業(yè)公司巡查、檢查工作內(nèi)容、方法和要求
- 某物業(yè)公司保潔部門領(lǐng)班總結(jié)
- 某公司安全生產(chǎn)舉報獎勵制度
- 物業(yè)管理:火情火災(zāi)應(yīng)急預(yù)案
- 某物業(yè)安保崗位職責(zé)
- 物業(yè)管理制度:節(jié)前工作重點(diǎn)總結(jié)
- 物業(yè)管理:某小區(qū)消防演習(xí)方案
- 某物業(yè)公司客服部工作職責(zé)