亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        關(guān)于Hibernate查詢方法的探討

        2012-12-31 00:00:00王英瑛

        摘要:本文探討了Hibernate查詢的五種方法:HQL查詢,本地SQL查詢,命名查詢,對(duì)象化查,動(dòng)態(tài)分離查詢。

        關(guān)鍵詞:HQL查詢;本地SQL查詢;命名查詢;對(duì)象化查詢;動(dòng)態(tài)分離查詢

        中圖分類號(hào):TP312.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 20-0000-02

        Hibernate是一個(gè)開源的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,完成數(shù)據(jù)持久化的重任。本文舉例探討了Hibernate查詢的五種方法:

        1 HQL查詢(Hibernate Query Language)

        1.1 HQL是Hibernate查詢語(yǔ)言,是一種面向?qū)ο蟮牟樵冋Z(yǔ)言,操作的對(duì)象是類、實(shí)例、屬性等,是一種select…from的語(yǔ)法結(jié)構(gòu),from后跟的是實(shí)體類名,而不是表名。

        示例1:

        Query query=session.creatQuery(\"from User\");

        List list= query.list();

        查詢返回的類型可以為:Object[]數(shù)組、List類型、Map類型、Java實(shí)體對(duì)象。

        示例2:

        Query query=session.creatQuery(\"select u.name ,u.telephone from User u where name=:name\"); //使用命名參數(shù)查詢

        query.setString(\"name\", name);

        List list = query.list();

        HQL提供一種面向?qū)ο蟮牟樵冋Z(yǔ)言,其語(yǔ)法更接近傳統(tǒng)的SQL語(yǔ)句的查詢語(yǔ)法。使用HQL能夠避免使用JDBC查詢的一些弊端:首先,不需要再編寫繁瑣的SQL語(yǔ)句,將針對(duì)實(shí)體類及其屬性進(jìn)行查詢,其次,查詢結(jié)果是直接存放在List中的對(duì)象,不需要再次封裝。而且HQL獨(dú)立于數(shù)據(jù)庫(kù)。

        2 本地SQL查詢

        HQL查詢功能雖然強(qiáng)大,但是HQL不能涵蓋所有的查詢特性,有時(shí)不得不借助SQL達(dá)到期望的目標(biāo)。HQL對(duì)本地SQL查詢提供了內(nèi)置的支持,稱為本地SQL查詢:

        示例3:

        Query query = session.createSQLQuery(\"select * from t_user\").addEntity(User.class);

        List rs = query.list();

        \"select * from t_user\"為SQL語(yǔ)句,from后為表名。此方法的缺點(diǎn)是破壞跨平臺(tái),不面向?qū)ο蟆?/p>

        3 命名查詢

        Hibernate中可以命名常用的查詢,需要使用的是只需要引用名稱就可以了,命名查詢一般配置在實(shí)體類中。

        3.1 XML配置命名查詢

        示例4:

        <![CDATA[from User where id=:id]] >

        Query query = session.getNamedQuery(\"getUserById\");

        query.setInteger(\"id\", id);

        List list = query.list();

        這種方法以松耦合的方式來(lái)配置查詢語(yǔ)句,從而可以更好地提高程序解耦。

        3.2 @配置命名查詢

        使用@注解配置實(shí)體類時(shí),要使用@注解配置命名查詢,用到的Java注解為@NamedQuery與@NamedNativeQuery。

        示例5:

        @NamedQuery(name=\"all User\" ,query=\"from User\")//命名查詢

        @NamedNativeQuery(name=\"all User\",query=\"select * from tab_user\")//命名本地查詢

        @Entity

        @Table(name=\"tab_user\")

        Public class User{

        }

        Query query=sesssion.getNamedQuery(\"all User\")

        4 對(duì)象化查詢Criteria方法:

        4.1 Criteria查詢采用面向?qū)ο蟮姆绞椒庋b查詢條件,對(duì)SQL語(yǔ)句進(jìn)行封裝,采用對(duì)象的方式來(lái)組合各種查詢條件,由Hibernate自動(dòng)產(chǎn)生SQL查詢語(yǔ)句。

        示例6:

        Criteria criteria=Session.createCriteria(User.class);

        criteria.add(Restrictions.eq(\"name\",name));

        criteria.add(Restrictions.eq(\"pwd\", pwd));

        List list= criteria.list();

        使用Criteria查詢需要首先創(chuàng)建criteria對(duì)象,傳入的參數(shù)是對(duì)應(yīng)的實(shí)體類的類型對(duì)象。

        4.2 Example查詢

        在使用criteria查詢時(shí),設(shè)定查詢條件并非一定要使用Restrictions,如果屬性條件很多,使用Restrictions也不方便。如果已經(jīng)有了一個(gè)對(duì)象,那就可以根據(jù)這個(gè)對(duì)象作為查詢的條件,查詢出屬性與之類似的對(duì)象。

        示例7:

        User user = new user();

        User.setAge(20);

        List users = session.createCriteria(User.class).add(Example.create(user)).list();

        5 動(dòng)態(tài)分離查詢DetachedCriteria

        以上所有查詢都必須是在session保持連接的情況下進(jìn)行的,有時(shí)查詢需要將組織查詢條件與執(zhí)行查詢分開來(lái)進(jìn)行,這時(shí)在創(chuàng)建查詢條件的時(shí)候就不能使用Criteria類了,而須使用DetachedCriteria類;

        示例8:

        a.先創(chuàng)建一個(gè)離線查詢條件對(duì)象

        DetachedCriteria dc = DetachedCriteria.forClass(User.class); //加入查詢條件

        dc.add(Restrictions.ge(\"age\",new Integer(25)));

        b.將創(chuàng)建的離線查詢對(duì)象當(dāng)成參數(shù)傳遞給session來(lái)創(chuàng)建一個(gè)Criteria 對(duì)象,然后執(zhí)行查詢

        Session session = HibernateSessionFactory.getSession();//綁定Session并返回一個(gè)Criteria實(shí)例

        Criteria criteria = dc.getExecutableCriteria(session);

        List userList = criteria.list();

        通過(guò)這種方法可以實(shí)現(xiàn)查詢條件對(duì)象與執(zhí)行查詢分別在兩個(gè)不同類中進(jìn)行;當(dāng)然b最常見應(yīng)該是在一個(gè)類的方法中。

        6 結(jié)束語(yǔ)

        通過(guò)以上示例探討了Hibernate查詢的五種方法,方便Java程序員靈活的運(yùn)用這些方法,操縱數(shù)據(jù)庫(kù),完成數(shù)據(jù)持久化的任務(wù)。

        參考文獻(xiàn):

        [1]夏昕,曹曉剛,唐勇.深入淺出Hibernate [M].北京:電子工業(yè)出版社,2005.

        [2]Christian Bauer、Gavin King. Hibernate 實(shí)戰(zhàn) [M].北京:人民郵電出版社,2008.

        [作者簡(jiǎn)介]

        王英瑛(1978-),女,講師,碩士,主研方向:信息與計(jì)算科學(xué)。

        基金項(xiàng)目:山東工商學(xué)院 校青年基金資助項(xiàng)目(2011QN063)。

        亚洲天堂免费视频| 亚洲情综合五月天| 久久99精品九九九久久婷婷| 色爱区综合激情五月综合小说 | 那有一级内射黄片可以免费看| 亚洲av无码国产精品草莓在线| 四虎影视永久在线精品| 高潮社区51视频在线观看| 精品精品国产三级av在线| 国产乱人偷精品人妻a片| 在线观看av永久免费| 亚洲AV无码中文AV日韩A| 一区二区三区中文字幕在线播放| 国产精品毛片一区二区三区| 亚洲爆乳无码专区| 久久视频在线视频精品| 人妻少妇69久久中文字幕| 成人午夜福利视频镇东影视| 国产精品视频久久久久| 日本熟妇免费一区二区三区| 亚无码乱人伦一区二区| 亚洲精品无播放器在线播放| 久久久久久久综合日本| 国产爽快片一区二区三区| 日本少妇浓毛bbwbbwbbw| 久久亚洲sm情趣捆绑调教| 久久久亚洲精品一区二区| 最新国产熟女资源自拍| 欧美极品色午夜在线视频| 国产在线欧美日韩一区二区| 狠狠综合久久av一区二区三区| 亚洲综合网站久久久| 欧美日韩精品一区二区在线视频 | 天堂av中文在线官网| 曰批免费视频播放免费| 无码精品国产va在线观看| 久久精品国产亚洲AV高清y w| 国产真实一区二区三区| 久久超碰97人人做人人爱| 一本无码人妻在中文字幕| 成人影院羞羞的视频免费观看|