<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
    以上實例有一個限制,即查詢對象只能根據id值來查詢。
    我們可以通過完善HibernateUtil來實現更多更能。
    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();
                      }

        }

    }
    以上代碼就能實現常用的增、刪、改以及根據id查詢的功能了!

    HQL(Hibernate Query Language)
    面向對象的查詢語言,與SQL不同,HQL中的對象名是區分大小寫的(除了JAVA類和屬性其他部分不區分大小寫);HQL中查的是對象而不是表,并且支持多態;
    HQL主要通過Query接口來操作,Query的創建方式:
       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更面向對象的查詢方式。Criteria的創建方式:
          Criteria  crit = session.createCriteria(DomainClass.class);
          簡單屬性條件如: criteria.add(Restrictions.eq(propertyName,value));
                                            criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName));

    實例操作
      新建一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(); //當查詢結構唯一的時候可以使用
                
    //System.out.print(u);
                for(User user : list){
                    System.out.println(user.getName());
                }

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

        }

    }

    觀察輸出結果


    Oracle中 實體類或屬性名與數據庫關鍵字沖突問題
    以上是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類默認關聯的表名為user,但是user在oracle中是關鍵字
    我們可以設置表名為tuser。
    如果tuser已經存在,給表明加一對反引號,`user` 即可。不過最好還是只改表明。

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

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

    Query接口的兩個方法實現分頁查詢
                query.setFirstResult(200); //從第200條記錄開始
                query.setMaxResults(10);   //共set 10條記錄
    利用方言可以實現各個數據庫的分頁查詢。
    posted on 2009-05-04 15:11 特立獨行 閱讀(308) 評論(0)  編輯  收藏 所屬分類: Hibernate框架
    主站蜘蛛池模板: 亚洲一日韩欧美中文字幕在线| 亚洲狠狠久久综合一区77777| 亚洲一区二区三区无码国产| 99视频免费观看| 久久久综合亚洲色一区二区三区 | 一级毛片在线免费看| 久久91亚洲人成电影网站| 九九99热免费最新版| 亚洲人JIZZ日本人| 青青草原1769久久免费播放| 亚洲av无码专区在线播放| 免费视频成人片在线观看| 亚洲综合久久久久久中文字幕| 亚洲国产精品免费在线观看| 亚洲精品中文字幕无码AV| 91免费资源网站入口| 亚洲成a人无码亚洲成www牛牛| 免费一级国产生活片| 成人A毛片免费观看网站| 亚洲av午夜成人片精品网站| 亚洲免费视频播放| 亚洲日韩精品无码专区加勒比 | 国产日韩在线视频免费播放| 丝袜熟女国偷自产中文字幕亚洲| 免费网站观看WWW在线观看| 在线电影你懂的亚洲| 好吊妞在线新免费视频| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 国产伦精品一区二区三区免费下载 | 两个人看的www免费| 亚洲激情在线观看| 免费国产黄线在线观看| 一级毛片a免费播放王色电影 | 美国毛片亚洲社区在线观看| 最新亚洲成av人免费看| 亚洲视频免费观看| 污视频网站在线免费看| 亚洲色图国产精品| 亚洲AⅤ视频一区二区三区| 一级毛片视频免费| 亚洲人成黄网在线观看|