<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无码一区二区乱子伦as| 精品熟女少妇aⅴ免费久久| 亚洲开心婷婷中文字幕| 久草免费福利在线| 国产亚洲精品一品区99热| 国产成人精品无码免费看| 亚洲自偷自拍另类12p| 日本黄网站动漫视频免费| 亚洲综合色丁香婷婷六月图片 | 亚洲AV本道一区二区三区四区| 最近中文字幕完整版免费高清| 亚洲一级高清在线中文字幕| 国内自产少妇自拍区免费| 香蕉视频在线观看免费| 亚洲日本va中文字幕久久| 99国产精品视频免费观看| 亚洲婷婷第一狠人综合精品| 国产一区视频在线免费观看| 国产99精品一区二区三区免费| 亚洲色图国产精品| 色吊丝最新永久免费观看网站| 免费一级毛片在线播放放视频| 亚洲第一区香蕉_国产a| 成人免费视频软件网站| 巨胸喷奶水www永久免费| 亚洲欧洲在线播放| 国产一区二区视频免费| 最近免费mv在线观看动漫| 亚洲国产成人99精品激情在线| 亚洲国产黄在线观看| 免费无遮挡无码永久视频 | 亚洲人成在线播放| av在线亚洲欧洲日产一区二区| 久久ww精品w免费人成|