<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框架
    主站蜘蛛池模板: 亚洲卡一卡2卡三卡4麻豆| 亚洲成A人片在线观看无码3D| 特级无码毛片免费视频尤物| 两性色午夜视频免费网| 97在线视频免费公开视频| 中国内地毛片免费高清| 在线观看免费视频一区| 免费看无码特级毛片| 亚洲电影免费在线观看| 3d成人免费动漫在线观看| 久久免费看黄a级毛片| 亚州免费一级毛片| 欧美日韩国产免费一区二区三区| 免费人成在线视频| 日韩一区二区免费视频| 免费va在线观看| 久久99亚洲综合精品首页| 亚洲VA中文字幕无码毛片 | 午夜免费啪视频在线观看| 99爱在线精品视频免费观看9| 0588影视手机免费看片| 免费精品一区二区三区在线观看| 日韩在线免费电影| 亚洲婷婷国产精品电影人久久| 国产亚洲综合网曝门系列| 亚洲国产精品久久久久网站| 亚洲乱码一二三四区麻豆| 亚洲gay片在线gv网站| 一级女人18片毛片免费视频| 久久精品私人影院免费看| 100000免费啪啪18免进| 国产精品免费电影| 亚洲成色WWW久久网站| 亚洲一区二区三区免费观看| 亚洲av无码专区在线观看亚| 男人j进女人p免费视频| 国产成人无码区免费内射一片色欲 | 亚洲精品高清一二区久久| 亚洲阿v天堂在线| 久久精品国产亚洲AV忘忧草18| 羞羞网站在线免费观看|