最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Java的Hibernate框架中使用SQL語句的簡單介紹

 更新時間:2016年01月03日 15:23:54   作者:cxshun  
這篇文章主要介紹了在Java的Hibernate框架中使用SQL語句的方法,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下

Hibernate中有HQL查詢語法。但我們用得比較熟的還是數(shù)SQL語句,那么應該怎么來讓Hibernate支持SQL呢?這個不用我們?nèi)タ紤]了,Hibernate團隊已經(jīng)早就做好了。
       廢話不說,直接來例子啦。

select * from t_user usr 

 
  上面是一條SQL語句,又是廢話,是個人都知道。我們想讓Hibernate執(zhí)行這條語句,怎么辦呢?看代碼:

Query query = session.createSQLQuery("select * from t_user usr"); 

  就這樣,剩下來的,大家應該都知道了,平常的查詢。
        那查詢完之后,返回的是什么東西呢?

while(iter.hasNext()){ 
 Object[] objs = (Object[])iter.next(); 
 for (int i = 0; i < objs.length; i++) { 
 System.out.print(objs[i]); 
 } 
 System.out.println(); 
} 

  返回的每個結果都是Object[]數(shù)組,
     
        這時又有人跑出來說面向對象啦。對,就是面向對象,唉,沒辦法。
        我們繼續(xù)看:

select {usr.*} from t_user usr 

  看到這里,估計某些童鞋開始雞動啦,那個大括號什么東西啦?
    別急,慢慢來。我們先繼續(xù)看代碼。

復制代碼 代碼如下:

Query query = session.createSQLQuery("select {usr.*} from t_user usr").addEntity(TUser.class);

  我們看到跟前面不同的是,我們加了一個addEntity,是什么意思呢?
    我們直接API,看到這樣一串解釋:
 addEntity
SQLQuery addEntity(String tableAlias,
   Class entityType)
Declare a "root" entity
Parameters:
tableAlias - The SQL table alias
entityType - The java type of the entity to add as a root

       有跟沒一個樣,杯具。只能自己動手用用。
       第一個參數(shù)是指表的別名,就像上面的語句,我們表的別名是usr,所以第一個參數(shù)為usr,而第二個是指查詢到的結果需要映射到哪個類,這里由于我們在映射文件中是通過TUser映射到t_user表,所以我們這里當然也就是TUser啦。然后一查,有SQL語句出來,而且查到的結果是TUser類型的。
       我們查到的結果是:

org.hibernate.tutorial.domain6.TUser@198cb3d 

  當然,你們的肯定跟我不一樣的。不要雞動。
 
    也許我們并不需要全部進行查出,這時,我們需要的只是設定別名即可:

select u.id as {usr.id},u.name as {usr.name},u.age as {usr.age} from t_user u 

  我們看到我們用了as指定了字段的別名,程序中還是一樣:

復制代碼 代碼如下:

Query query = session.createSQLQuery("select u.id as {usr.id},u.name as {usr.name},u.age as {usr.age} from t_user u").addEntity("usr",TUser.class);

  這個簡單,不多說。
 
         以前我們講到,有些團隊會規(guī)定不給在代碼中寫SQL語句,這又需要配置文件出馬啦。
         我們可以在配置文件中添加:
<sql-query name="queryTUser"> 
 <return alias="usr" entity-name="org.hibernate.tutorial.domain6.TUser" /> 
 select {usr.*} from t_user usr where name=:name 
</sql-query> 

  注意,這里的entity-name需要寫完整的包名,不然會報錯的。這里我們有子標簽return,它指定了表的別名和類名,這樣我們在運行時就不需要再addEntity了。
    看代碼:

Query query = session.getNamedQuery("queryTUser"); 
query.setParameter("name","shun"); 
List list = query.list(); 
Iterator iter = list.iterator(); 

 
  我們直接這樣就OK了,注意,我們并沒有加addEntity了,主要還是歸功于配置文件中的配置。
    注意,如果在配置文件中配置,一定要有return子標簽指定表別名和類名。這個主要是避免了我們讀取語句時的重復判斷。
  
 
    上面講了這么久,我們一直在講有別名的表,那么如果我們的表沒有別名,但又想返回的結果封裝在對象內(nèi),我們應該怎樣呢?

select * from t_user usr 

  很簡單,只要調(diào)用addEntity的重載方法addEntity(Class clazz)就行了,只需要提供一個類名,而不需要表別名。
 
    當然,hibernate也支持存儲過程,只需要在配置文件中把sql-query的callable屬性設為true即表示當前調(diào)用的是存儲過程,由于存儲過程我接觸地不多,以后多研究一下再跟大家一起研究。
  
    我們在調(diào)用session.save等相應的對數(shù)據(jù)操作的方法時,它會轉換成hibernate內(nèi)置的SQL語句,但如果我們想自己控制SQL語句的格式呢,怎么辦?
    Hibernate實際上也想到了。
    我們直接在映射文件中加入:

<sql-insert> 
 INSERT INTO T_USER (NAME,AGE) values (?,?) 
 </sql-insert> 
 <sql-update> 
 UPDATE USER SET USER_NAME=?,AGE=? WHERE uSER_ID=? 
</sql-update> 

  
  注意,這個需要添加在class標簽內(nèi),作為子標簽。我們這里全部是大寫字母,是為了跟hibernate默認的語句分清,沒有其他意思。
    我們先來看一下insert的調(diào)用:

User user = new User(); 
user.setName("shun123123"); 
user.setAge(23); 

  當我們調(diào)用保存時,hibernate的語句是:
Hibernate: 

INSERT INTO USER(USER_NAME,AGE) values(?,?) 

  它調(diào)用了我們配置的sql-insert標簽內(nèi)的語句
我們再來看一下update的調(diào)用:

User user = (User)session.get(User.class,new Long(29)); 
user.setName("shun123123"); 
user.setAge(23); 
session.save(user); 

  我們調(diào)用保存,它會自動調(diào)用更新,此時的語句是:
Hibernate: 

UPDATE USER SET USER_NAME=?,AGE=? WHERE uSER_ID=? 

  我們看到輸出的語句是大寫的,也就是調(diào)用了我們配置的語句。
 
    delete語句也是同樣的配置。

相關文章

  • java利用注解實現(xiàn)簡單的excel數(shù)據(jù)讀取

    java利用注解實現(xiàn)簡單的excel數(shù)據(jù)讀取

    這篇文章主要為大家詳細介紹了java利用注解實現(xiàn)簡單的excel數(shù)據(jù)讀取,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • ElasticSearch整合SpringBoot搭建配置

    ElasticSearch整合SpringBoot搭建配置

    這篇文章主要為大家介紹了ElasticSearch整合SpringBoot搭建配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 全網(wǎng)最新springboot整合mybatis-plus的過程

    全網(wǎng)最新springboot整合mybatis-plus的過程

    在本文中,介紹了 MyBatis-Plus 的核心功能和使用方法,包括如何配置分頁插件、編寫分頁查詢代碼、使用各種 Wrapper 構建復雜查詢條件等,通過這些內(nèi)容,相信你已經(jīng)對 MyBatis-Plus 有了更深入的了解,并能夠在實際項目中靈活應用這些功能,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • java的main方法中調(diào)用spring的service方式

    java的main方法中調(diào)用spring的service方式

    這篇文章主要介紹了在java的main方法中調(diào)用spring的service方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot自動裝配之@Import深入講解

    SpringBoot自動裝配之@Import深入講解

    由于最近的項目需求,需要在把配置類導入到容器中,通過查詢,使用@Import注解就能實現(xiàn)這個功能,@Import注解能夠幫我們吧普通配置類(定義為Bean的類)導入到IOC容器中
    2023-01-01
  • Spring MVC中基于自定義Editor的表單數(shù)據(jù)處理技巧分享

    Spring MVC中基于自定義Editor的表單數(shù)據(jù)處理技巧分享

    Spring MVC中基于自定義Editor的表單數(shù)據(jù)處理技巧。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • 淺談java多線程wait,notify

    淺談java多線程wait,notify

    這篇文章主要介紹了java多線程wait,notify,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,下面小編和大家一起來學習一下吧
    2019-05-05
  • 基于SpringBoot和PostGIS的某國基地可視化實戰(zhàn)

    基于SpringBoot和PostGIS的某國基地可視化實戰(zhàn)

    本文以Java開發(fā)語言為例,使用SpringBoot框架來進行后臺開發(fā),詳細講解如何使用Leaflet對PostGIS的全球基地信息進行Web可視化,最后分享Web可視化結果,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Centos下SpringBoot項目啟動與停止腳本的方法

    Centos下SpringBoot項目啟動與停止腳本的方法

    這篇文章主要介紹了Centos下SpringBoot項目啟動與停止腳本的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Mybatis全局配置及映射關系的實現(xiàn)

    Mybatis全局配置及映射關系的實現(xiàn)

    本文主要介紹了Mybatis全局配置及映射關系的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

英超| 桐柏县| 玛沁县| 宣化县| 河西区| 遵义市| 界首市| 黎川县| 罗源县| 华宁县| 普兰县| 巴里| 那曲县| 武安市| 贵溪市| 东明县| 嘉鱼县| 昌都县| 东城区| 宁阳县| 景德镇市| 南宁市| 长宁区| 兴隆县| 高陵县| 天长市| 滦平县| 陇川县| 伊春市| 西和县| 阿拉尔市| 克山县| 黔西县| 化隆| 乐安县| 兴隆县| 确山县| 金山区| 永顺县| 尼勒克县| 定州市|