欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
hibernate 要點(diǎn)
原文:http://blog.csdn.net/sunsnow8/archive/2005/03/05/312359.aspx

1.兩種配置文件:
  A.hibernate.cfg.xml   和   B.hibernate.properties

  A中可含映射文件的配置,而B(niǎo)中hard codes加映射文件。

  A。Configuration config=new Configuration().config();
  B. Configuration config=new Configuration();
     config.addClass(TUser.class);


2.你不必一定用hibernate.cfg.xml或hibernate.properties這兩文件名,
   你也不一定非得把配置文件放在Classes下,
   File file=new File("c:\\sample\\myhibernate.xml");
   Configuration config=new Configuration().config(file);

3. session.Flush()
   強制數據庫立即同步,當用事務(wù)時(shí),不必用flush,事務(wù)提交自動(dòng)調用flush
   在session關(guān)閉時(shí)也會(huì )調用flush


4. Hibernate總是使用對象類(lèi)型作為字段類(lèi)型

5. XDoclet專(zhuān)門(mén)建立了hibernate doclet,就是在java代碼上加上一些
   java docTag,后來(lái)再讓XDoclet分析該java代碼,生成映射文件;

6.HQL子句本身大小寫(xiě)無(wú)關(guān),但是其中出現的類(lèi)名和屬性名必須注意大小寫(xiě)區分。

7.關(guān)系:
  Constrained : 約束,表明主控表的主鍵上是否存在一個(gè)外鍵(foreigh key)
   對其進(jìn)行約束。

  property-ref:關(guān)聯(lián)類(lèi)中用于與主控類(lèi)相關(guān)聯(lián)的屬性名,默認為關(guān)聯(lián)類(lèi)的主鍵屬性名

  單向一對多需在一方配置,雙向一對多需在雙方進(jìn)行配置

8.lazy=false:被動(dòng)方的記錄由hibernate負責記取,之后存放在主控方指定的
  Collection類(lèi)型屬性中

9. java.util.Set或net.sof.hibernate.collecton.Bag類(lèi)型的Collection


10.重要:inverse:用于標識雙向關(guān)聯(lián)中的被動(dòng)方一端。
         inverse=false的一方(主控方)負責維護關(guān)聯(lián)關(guān)系.默認值:false

11.batch-size:采用延遲加載特征時(shí),一次讀入的數據數昨。

12.一對多通過(guò)主控方更新(主控方為一方時(shí))

   user.getAddresses().add(addr);
   session.save(user);//通過(guò)主控對象級聯(lián)更新  

13.在one-to-many 關(guān)系中,將many 一方設為主動(dòng)方(inverse=false)將有助性能
   的改善。在一方設置關(guān)系時(shí),inverse=true,即將主控權交給多方,
   這樣多方可主動(dòng)從一方獲得foreign key,然后一次insert即可完工。


   addr.setUser(user);//設置關(guān)聯(lián)的TUser對象
   user.getAddresses().add(addr);
   session.save(user);//級聯(lián)更新 

14.只有設為主控方的一方才關(guān)心(訪(fǎng)問(wèn))對方的屬性,被動(dòng)方是不關(guān)心對方的屬性的。

15.one-to-many與many-to-one節點(diǎn)的配置屬性不同:
   一對多關(guān)系多了lazy和inverse兩個(gè)屬性
   多對多節點(diǎn)屬性:column:中間映射表中,關(guān)聯(lián)目標表的關(guān)聯(lián)字段
                   class:類(lèi)名,關(guān)聯(lián)目標類(lèi)
                   outer-join:是否使用外聯(lián)接    

   注意:access是設置屬性值的讀取方式。


        column是設置關(guān)聯(lián)字段。


16.多對多,注意兩方都要設置inverse和lazy,cascade只能設為insert-update
   多對多關(guān)系中,由于關(guān)聯(lián)關(guān)系是兩張表相互引用,因此在保存關(guān)系狀態(tài)時(shí)必須對雙方同時(shí)保存。

   group1.getRoles().add(role1);
   role1.getGroups().add(group1);

   session.save(role1);
   session.save(group1);

17.關(guān)于vo和po
   vo經(jīng)過(guò)hibernate容量處理,就變成了po(該vo的引用將被容器保存,并且在session關(guān)閉時(shí)flush,因此po如果再傳到其它地方改變了,就危險了)
 
   vo和po相互轉換:BeanUtils.copyProperties(anotherUser,user);

18.對于save操作而言,如果對象已經(jīng)與Session相關(guān)聯(lián)(即已經(jīng)被加入Session的實(shí)體容器中),則無(wú)需進(jìn)行具體的操作。因為之后的Session.flush過(guò)程中,Hibernate
會(huì )對此實(shí)體容器中的對象進(jìn)行遍歷,查找出發(fā)生變化的實(shí)體,生成并執行相應的update
語(yǔ)句。

19.如果我們采用了延遲加載機制,但希望在一些情況下,實(shí)現非延遲加
載時(shí)的功能,也就是說(shuō),我們希望在Session關(guān)閉后,依然允許操作user的addresses
屬性
Hibernate.initialize方法可以通過(guò)強制加載關(guān)聯(lián)對象實(shí)現這一功能:
這也正是我們?yōu)槭裁丛诰帉?xiě)POJO時(shí),必須用JDK Collection接口(如Set,Map),
而非特定的JDK Collection實(shí)現類(lèi)(如HashSet、HashMap)申明Collection屬性的
原因。

20.事務(wù):從sessionFactory獲得session,其自動(dòng)提交屬性就已經(jīng)關(guān)閉(AutoCommit=false),此時(shí)若執行了jdbc操作,如果不顯式調用session.BeginTransaction(),是不會(huì )執行事務(wù)操作的。

   jdbc transaction:基于同一個(gè)session(就是同一個(gè)connection)的事務(wù);
   jta  transaction:跨session(跨connection)事務(wù).

   對于jta事務(wù),有三種實(shí)現方法:
     A。UserTransaction tx=new InitialContext().lookup("...");
        tx.commit();
     B. 使用hibernate封裝的方法:(不推薦)
        Transaction tx=session.beginTransaction();
        tx.commit();
     C. 使用ejb之sessionBean的事務(wù)技持方法,你只要在把需要在發(fā)布描述符中,把需要jta事務(wù)的方法聲明為require即可

21.悲觀(guān)鎖,樂(lè )觀(guān)鎖:
   樂(lè )觀(guān)鎖一般通過(guò)version來(lái)實(shí)現,注意version節點(diǎn)必須出現在id后。


22.Hibernate中,可以通過(guò)Criteria.setFirstResult和Criteria.setFetchSize方法設定分頁(yè)范圍。
   Query接口中也提供了與其一致的方法,hibernate主要在dialect類(lèi)中實(shí)現在這個(gè)功能。


23.cache
   <hibernate-configuration>
 <session-factory>
 ……
  <property name="hibernate.cache.provider_class">
   net.sf.ehcache.hibernate.Provider
  </property> 

  還需對ecache本身進(jìn)配置
  <ehcache>
 <diskStore path="java.io.tmpdir"/>
 <defaultCache
 maxElementsInMemory="10000" //Cache中最大允許保存的數據數量
 eternal="false" //Cache中數據是否為常量
 timeToIdleSeconds="120" //緩存數據鈍化時(shí)間
 timeToLiveSeconds="120" //緩存數據的生存時(shí)間
 overflowToDisk="true" //內存不足時(shí),是否啟用磁盤(pán)緩存
 />
  </ehcache>

  之后在映射文件中指定各個(gè)映射實(shí)體的cache策略
  <class name=" org.hibernate.sample.TUser" .... >
 <cache usage="read-write"/>
 ....
 <set name="addresses" .... >
  <cache usage="read-only"/>
 ....
 </set>
 </class>

 *****************************************************
 Query.list()跟Query.iterate()的不同:
 對于query.list()總是通過(guò)一條sql語(yǔ)句獲取所有記錄,然后將其讀出,填入pojo返回;
 但是query.iterate(),則是首先通過(guò)一條Select SQL 獲取所有符合查詢(xún)條件的記錄的
id,再對這個(gè)id 集合進(jìn)行循環(huán)操作,通過(guò)單獨的Select SQL 取出每個(gè)id 所對應的記
錄,之后填入POJO中返回。

 也就是說(shuō),對于list 操作,需要一條SQL 完成。而對于iterate 操作,需要n+1
條SQL。,list方法將不會(huì )從Cache中讀取數據。iterator卻會(huì )。


24.ThreadLocal:它會(huì )為每個(gè)線(xiàn)程維護一個(gè)私有的變量空間。實(shí)際上,
其實(shí)現原理是在JVM 中維護一個(gè)Map,這個(gè)Map的key 就是當前的線(xiàn)程對象,而value則是
線(xiàn)程通過(guò)ThreadLocal.set方法保存的對象實(shí)例。當線(xiàn)程調用ThreadLocal.get方法時(shí),
ThreadLocal會(huì )根據當前線(xiàn)程對象的引用,取出Map中對應的對象返回。

 這樣,ThreadLocal通過(guò)以各個(gè)線(xiàn)程對象的引用作為區分,從而將不同線(xiàn)程的變量隔離開(kāi)
來(lái)。


25.Hibernate官方開(kāi)發(fā)手冊標準示例:
  public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory
sessionFactory = new
Configuration().configure().buildSessionFactory();
} catch (HibernateException ex) {
throw new RuntimeException(
"Configuration problem: " + ex.getMessage(),
ex
);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException
{
Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}


    
26.通過(guò)filter實(shí)現session的重用:
   public class PersistenceFilter implements Filter
{
protected static ThreadLocal hibernateHolder = new ThreadLocal();
public void doFilter(ServletRequest request, ServletResponse
response, FilterChain chain)
throws IOException, ServletException
{
hibernateHolder.set(getSession());
try
{
……
chain.doFilter(request, response);
……
}
finally
{
Session sess = (Session)hibernateHolder.get();
if (sess != null)
{
hibernateHolder.set(null);
try
{
sess.close();
}
catch (HibernateException ex) {
throw new ServletException(ex);
}
}
}
}
……}

27.Spring的參數化事務(wù)管理功能相當強大,筆者建議在基于Spring Framework的應用
開(kāi)發(fā)中,盡量使用容器管理事務(wù),以獲得數據邏輯代碼的最佳可讀性。
 
public class UserDAO extends HibernateDaoSupport implements IUserDAO
{
public void insertUser(User user) {
getHibernateTemplate().saveOrUpdate(user);
}
}


  上面的UserDAO實(shí)現了自定義的IUserDAO接口,并擴展了抽象類(lèi):
HibernateDaoSupport
HibernateSupport實(shí)現了HibernateTemplate和SessionFactory實(shí)例的關(guān)聯(lián)。
HibernateTemplate對Hibernate Session操作進(jìn)行了封裝,而
HibernateTemplate.execute方法則是一封裝機制的核心

  *在spring的配置文件里,移植了整個(gè)hibernate.cfg.xml的內容。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
一個(gè)簡(jiǎn)單的Hibernate工具類(lèi)HibernateUtil
Hibernate 工具類(lèi)
一個(gè)用myeclipse開(kāi)發(fā)hibernate的入門(mén)例子 - 我愛(ài)JAVA - BlogJ...
SSH框架網(wǎng)上商城項目第1戰之整合Struts2、Hibernate4
沒(méi)有SPRING,hibernate 延遲加載
Hibernate事務(wù)控制
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久