<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-21  評論-29  文章-0  trackbacks-0

    在Base類中加入以下代碼實(shí)現(xiàn)get方法

    package cn.itcast.hibernate;
    import java.util.Date;

    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import cn.itcast.hibernate.domain.User;
    import org.hibernate.Transaction;
    public class Base {

        
    public static void main(String[] args) {
            
            User user 
    = new User();
            user.setBirthday(
    new Date());
            user.setName(
    "name");
            addUser(user);    
            
            User u 
    = getUser(user.getId());
            System.out.println(
    "name:"+u.getName());
        }

        
         
    static User getUser(int id){
             Session s 
    = null ;
             
    try{
                 s 
    = HibernateUtil.getSession();
                 Class userClass 
    = User.class;
                 User user 
    = (User)s.get(User.class,id);
                 
    return user ;
             }
    finally {
                 
    if(s !=null)
                     s.close();
             }

         }

        
            
    static void addUser(User user){
                Session s 
    = null ;
                Transaction tx 
    = null ;
                
    try{
                    s 
    = HibernateUtil.getSession();
                    tx 
    = s.beginTransaction();
                    s.save(user);
                    tx.commit();
                }
    catch(HibernateException e){
                    
    if(tx !=null)
                        tx.rollback();
                    
    throw e ;
                }
    finally {
                    
    if(s !=null)
                        s.close();
                }

            }

            
    }

    對get方法參數(shù)User.class的理解:
    由于Session可以管理多個數(shù)據(jù)庫表所對應(yīng)的多個實(shí)體對象。如果要查詢id為1的實(shí)體對象,Session.get方法需要知道去哪個數(shù)據(jù)庫表中查詢id為1的記錄,所以。除了給get方法傳遞所要查詢的實(shí)體對象的id值外,還必須給get方法傳遞實(shí)體對象的類型,get方法才能知道去哪個數(shù)據(jù)庫表中進(jìn)行查詢。
    控制臺顯示結(jié)果:    name:name

    在配置文件hibernate.cfg.xml文件中加入
    <property name="show_sql">true</property> 
    可顯示所執(zhí)行的sql語句

    load方法
    懶加載 并不馬上訪問數(shù)據(jù)庫 只有第一次應(yīng)用時才訪問數(shù)據(jù)庫 load方法的返回對象永遠(yuǎn)不可能為空

    package cn.itcast.hibernate;
    import java.util.Date;

    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import cn.itcast.hibernate.domain.User;
    import org.hibernate.Transaction;
    public class Base {

        
    public static void main(String[] args) {
            
            User user 
    = new User();
            user.setBirthday(
    new Date());
            user.setName(
    "name");
            addUser(user);    
            
            User u 
    = getUser(user.getId());
            System.out.println(
    "name:"+u.getName());
        }

        
         
    static User getUser(int id){
             Session s 
    = null ;
             
    try{
                 s 
    = HibernateUtil.getSession();
                 Class userClass 
    = User.class;
                 
    //User user = (User)s.get(User.class,id);
                 User user1 = (User)s.load(User.class,id);
                 System.out.println(
    "name:"+user1.getName());
                 System.out.println(user1.getClass().getName());
                 
    return user1 ;
             }
    finally {
                 
    if(s !=null)
                     s.close();
             }

         }

        
            
    static void addUser(User user){
                Session s 
    = null ;
                Transaction tx 
    = null ;
                
    try{
                    s 
    = HibernateUtil.getSession();
                    tx 
    = s.beginTransaction();
                    s.save(user);
                    tx.commit();
                }
    catch(HibernateException e){
                    
    if(tx !=null)
                        tx.rollback();
                    
    throw e ;
                }
    finally {
                    
    if(s !=null)
                        s.close();
                }

            }

            
    }


    在這里增加的打印user1類名的代碼,看到load方法所返回User子類的名稱。

    save與persist方法的區(qū)別:在沒有開啟事務(wù)的時候
    save方法會把數(shù)據(jù)插入到數(shù)據(jù),之后又回滾,刪掉數(shù)據(jù)。而persist方法根本就不執(zhí)行插入。

    總結(jié)Session的幾個主要方法:
      1 save,persist保存數(shù)據(jù),persist在事務(wù)外不會產(chǎn)生insert語句;
      2.delete,刪除對象;
      3.update,更新對象,如果數(shù)據(jù)庫中沒有記錄,會出現(xiàn)異常;
      4.get,根據(jù)id查,會立刻訪問數(shù)據(jù)庫。
      5.load,根據(jù)id查(返回的是代理,不會立即訪問數(shù)據(jù)庫)
      6.saveOrUpdate,merge(根據(jù)id和version的值來確定是save或update),調(diào)用merge你的對象還是托管的。
      7.lock()把對象變成持久對象,但不會同步對象的狀態(tài)

    下午學(xué)習(xí)實(shí)體對象的三種狀態(tài)與saveOrUpdate方法。

    posted on 2009-05-04 11:10 特立獨(dú)行 閱讀(1011) 評論(0)  編輯  收藏 所屬分類: Hibernate框架
    主站蜘蛛池模板: 青青草原亚洲视频| 日本XXX黄区免费看| 免费jlzzjlzz在线播放视频| 亚洲欧洲日韩国产一区二区三区 | 免费看国产一级特黄aa大片| 亚洲中文字幕一区精品自拍| 成人免费午间影院在线观看| 亚洲丁香婷婷综合久久| 欧洲黑大粗无码免费| 2017亚洲男人天堂一| 性感美女视频在线观看免费精品 | 无码国产精品一区二区免费式直播| 亚洲色图.com| 69堂人成无码免费视频果冻传媒| 亚洲国产精品一区二区久| 毛片a级毛片免费观看免下载| 亚洲成a人无码亚洲成www牛牛| 日韩免费观看一级毛片看看| 香蕉视频免费在线播放| 亚洲人成影院在线观看| 免费黄色电影在线观看| 亚洲午夜电影在线观看高清| 日韩免费电影在线观看| 两个人看的www免费高清| 久久久无码精品亚洲日韩按摩| 久久这里只有精品国产免费10| 极品色天使在线婷婷天堂亚洲| 狠狠亚洲狠狠欧洲2019| 99re6免费视频| 亚洲精华国产精华精华液网站 | 久久精品亚洲综合专区| 99久久久国产精品免费无卡顿| 亚洲人成人网站18禁| 亚洲中文字幕无码不卡电影| 亚洲黄色免费网址| 久久精品国产亚洲av品善| 国产国拍亚洲精品mv在线观看| 免费无码肉片在线观看| eeuss免费天堂影院| 亚洲videos| 亚洲精品无码成人片久久|