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

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

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

    隨筆-21  評(píng)論-29  文章-0  trackbacks-0
    以上實(shí)例有一個(gè)限制,即查詢對(duì)象只能根據(jù)id值來查詢。
    我們可以通過完善HibernateUtil來實(shí)現(xiàn)更多更能。
    package cn.itcast.hibernate;

    import java.io.Serializable;

    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;

    public final class HibernateUtil {
        
    private static SessionFactory sessionFactory ;
        
    private HibernateUtil(){}
        
        
    static{
         Configuration cfg 
    = new Configuration() ;
            cfg.configure();
            sessionFactory 
    = cfg.buildSessionFactory();
         }


        
    public static SessionFactory getSessionFactory() {
            
    return sessionFactory;
        }

        
        
    public static Session getSession(){
            
    return sessionFactory.openSession();
        }

        
        
    public static void add(Object entity){
            Session s 
    = null ;
            Transaction tx 
    = null ;
            
    try{
                s 
    = HibernateUtil.getSession();
                tx 
    = s.beginTransaction();
                s.save(entity);        
                tx.commit();
            }
    finally {
                
    if(s !=null)
                    s.close();
                      }

        }

        
        
    public static void update(Object entity){
            Session s 
    = null ;
            Transaction tx 
    = null ;
            
    try{
                s 
    = HibernateUtil.getSession();
                tx 
    = s.beginTransaction();
                s.update(entity);        
                tx.commit();
            }
    finally {
                
    if(s !=null)
                    s.close();
                      }

        }

        
        
    public static void delete(Object entity){
            Session s 
    = null ;
            Transaction tx 
    = null ;
            
    try{
                s 
    = HibernateUtil.getSession();
                tx 
    = s.beginTransaction();
                s.delete(entity);        
                tx.commit();
            }
    finally {
                
    if(s !=null)
                    s.close();
                      }

        }

        
        
    public static Object get(Class clazz,Serializable id){
            Session s 
    = null ;
            
    try{
                s 
    = HibernateUtil.getSession();
                Object obj 
    = s.get(clazz, id);
                
    return obj ;
            }
    finally {
                
    if(s !=null)
                    s.close();
                      }

        }

    }
    以上代碼就能實(shí)現(xiàn)常用的增、刪、改以及根據(jù)id查詢的功能了!

    HQL(Hibernate Query Language)
    面向?qū)ο蟮牟樵冋Z言,與SQL不同,HQL中的對(duì)象名是區(qū)分大小寫的(除了JAVA類和屬性其他部分不區(qū)分大小寫);HQL中查的是對(duì)象而不是表,并且支持多態(tài);
    HQL主要通過Query接口來操作,Query的創(chuàng)建方式:
       Query q  =  session.createQuery(hql);
           from Person
           from  User  user  where  user.name =: name 
           from  User  user  where  user.name =: name and user.birthday<:birthday

    Criteria
        Criteria是一種比HQL更面向?qū)ο蟮牟樵兎绞健riteria的創(chuàng)建方式:
          Criteria  crit = session.createCriteria(DomainClass.class);
          簡(jiǎn)單屬性條件如: criteria.add(Restrictions.eq(propertyName,value));
                                            criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName));

    實(shí)例操作
      新建一QueryTest類
    package cn.itcast.hibernate;

    import java.util.Date;
    import java.util.List;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import cn.itcast.hibernate.domain.User;

    public class QueryTest {

        
    public static void main(String[] args) {
            User user 
    = new User();
            user.setBirthday(
    new Date());
            user.setName(
    "name");
            HibernateUtil.add(user);    
            query(user.getName());
        }

        
        
    static void query(String name){
            Session s 
    = null ;
            
    try{
                s 
    = HibernateUtil.getSession();
                String hql 
    = "from User as user where user.name=?";//from Object
                Query query = s.createQuery(hql);
                query.setString(
    0, name);
                List
    <User> list = query.list();//list作用類似于executeQuery
                
    //User u = (User)query.uniqueResult(); //當(dāng)查詢結(jié)構(gòu)唯一的時(shí)候可以使用
                
    //System.out.print(u);
                for(User user : list){
                    System.out.println(user.getName());
                }

            }
    finally {
                
    if(s !=null)
                    s.close();
                      }

        }

    }

    觀察輸出結(jié)果


    Oracle中 實(shí)體類或?qū)傩悦c數(shù)據(jù)庫關(guān)鍵字沖突問題
    以上是User.hbm.xml原來的代碼
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
    >
    <hibernate-mapping package="cn.itcast.hibernate.domain">
        
    <class name="User" table="user">
            
    <id name="id">
                
    <generator class="native" />
            
    </id>        
            
    <property name="name" column="name"/>
            
    <property name="birthday"/>        
        
    </class>
    </hibernate-mapping>
    User類默認(rèn)關(guān)聯(lián)的表名為user,但是user在oracle中是關(guān)鍵字
    我們可以設(shè)置表名為tuser。
    如果tuser已經(jīng)存在,給表明加一對(duì)反引號(hào),`user` 即可。不過最好還是只改表明。

    如果是字段名(屬性名)和關(guān)鍵字相沖突,其處理方法也是一樣的!

    HQL的命名參數(shù)
    String hql = "from User as user where user.name=?";//from Object
                Query query = s.createQuery(hql);
                query.setString(
    0, name);
    以上語句中,如果where后面的屬性有多個(gè),就需要多個(gè)問號(hào),而且在set方法里面容易犯錯(cuò),比如記錯(cuò)順序等。不利于維護(hù)。
    為解決這個(gè)問題,我們可以使用HQL的命名參數(shù)來解決,代碼如下:
    String hql = "from User as user where user.name=:name";//from Object
                Query query = s.createQuery(hql);
                query.setString(
    "name", name);

    Query接口的兩個(gè)方法實(shí)現(xiàn)分頁查詢
                query.setFirstResult(200); //從第200條記錄開始
                query.setMaxResults(10);   //共set 10條記錄
    利用方言可以實(shí)現(xiàn)各個(gè)數(shù)據(jù)庫的分頁查詢。
    posted on 2009-05-04 15:11 特立獨(dú)行 閱讀(299) 評(píng)論(0)  編輯  收藏 所屬分類: Hibernate框架
    主站蜘蛛池模板: 理论片在线观看免费| 激情内射亚洲一区二区三区| 一区二区亚洲精品精华液| 最近高清中文字幕免费| 久久亚洲sm情趣捆绑调教| 最近的中文字幕大全免费8| 亚洲国产亚洲片在线观看播放| 最新中文字幕免费视频| 久久精品视频亚洲| 无码国产精品一区二区免费式芒果 | 亚洲天堂在线播放| 99在线免费观看视频| 久久久婷婷五月亚洲97号色| 久操视频在线免费观看| 久久精品国产精品亚洲艾| 最近免费视频中文字幕大全| 亚洲1区1区3区4区产品乱码芒果| 美女免费视频一区二区| 亚洲高清无码专区视频| 日韩在线视频播放免费视频完整版| 无码国产精品一区二区免费模式| 成年女人午夜毛片免费看| 亚洲av永久无码| 久久亚洲国产精品五月天婷| 久久一区二区三区免费播放| 亚洲成a人片在线观看精品| 四虎影视永久免费观看地址| 久久久久久av无码免费看大片| 福利免费观看午夜体检区| jiz zz在亚洲| 亚洲色偷偷狠狠综合网| 18女人腿打开无遮掩免费| 亚洲av永久无码| 亚洲精品高清视频| 青青青国产免费一夜七次郎| 久久精品无码免费不卡| 丁香婷婷亚洲六月综合色| 伊人久久精品亚洲午夜| 一二三四影视在线看片免费| 一级做a爰片性色毛片免费网站| 免费精品一区二区三区在线观看|