<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 特立獨行 閱讀(299) 評論(0)  編輯  收藏 所屬分類: Hibernate框架
    主站蜘蛛池模板: 亚洲av纯肉无码精品动漫| 亚洲制服中文字幕第一区| 亚洲欧美熟妇综合久久久久| 亚洲视频在线免费播放| 久久亚洲精品中文字幕无码| 嫩草成人永久免费观看| 亚洲欧洲国产精品你懂的| 久久精品中文字幕免费| 亚洲校园春色小说| 日韩欧毛片免费视频| 亚洲日韩AV无码一区二区三区人 | 国产视频精品免费视频| 国产中文在线亚洲精品官网| 中文字幕在线视频免费观看| 国产偷国产偷亚洲清高动态图| 中国videos性高清免费| 亚洲AV无码国产精品麻豆天美| 久久w5ww成w人免费| 亚洲欧洲日产国码二区首页| 思思99re66在线精品免费观看| 亚洲JIZZJIZZ妇女| 亚洲国产精品自产在线播放| 精品免费视在线观看| 亚洲午夜精品一区二区公牛电影院| 国产99视频精品免费观看7| 亚洲狠狠婷婷综合久久蜜芽| 亚洲欧洲久久av| 人人玩人人添人人澡免费| 亚洲国产日韩在线成人蜜芽| 免费的一级片网站| 国产高潮久久免费观看| 久久久久亚洲精品日久生情| 免费无码又爽又刺激毛片| a级毛片免费观看在线| 亚洲色偷偷偷网站色偷一区| 日本免费中文字幕在线看| 韩国免费A级毛片久久| 亚洲人成日本在线观看| 国产日产亚洲系列最新| jjizz全部免费看片| AV激情亚洲男人的天堂国语|