成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hibernate SQL優化小技巧

開發 后端
最近正在拜讀Hibernate之父大作《Java Persistence with Hibernate》,頗有收獲。在我們熟悉的Hibernate映射文件中也大有乾坤,很多值得我注意的地方,本文是一些體會。

Hibernate SQL優化小技巧使用dynamic-insert="true" dynamic-update="true"

最近正在拜讀Hibernate之父大作《Java Persistence with Hibernate》,頗有收獲。在我們熟悉的Hibernate映射文件中也大有乾坤,很多值得我注意的地方。
在Hibernate的映射文件的class tag使用dynamic-insert,dynamic-update,可以優化生成的Hibernate SQL語句,提高Hibernate SQL執行效率,最終可以提高系統性能。

如,有一個User類。

  1. public class User {     
  2.     /** Creates a new instance of User */  
  3.     public User() {  
  4.     }  
  5.     private long id;  
  6.     private int age;  
  7.  
  8.     private String firstname;  
  9.     private String lastname;  
  10.     private Set emailAddresses;  
  11. //省略getter 和setter方法  

Hibernate映射文件(User.hbm.xml,省略了文件頭聲明)定義為:

  1. <hibernate-mapping> 
  2.     <class name="model.User" table="Users" > 
  3.         <id name="id" column="ID"> 
  4.             <generator class="native"/> 
  5.         </id> 
  6.         <property name="age"/> 
  7.         <property name="firstname"/> 
  8.         <property name="lastname"/> 
  9.           
  10.         <set name="emailAddresses" table="PERSON_EMAIL_ADDR"> 
  11.             <key column="PERSON_ID"/> 
  12.             <element type="string" column="EMAIL_ADDR"/> 
  13.         </set> 
  14.     </class> 
  15. </hibernate-mapping> 

我們寫一個測試類進行測試UserTest。

  1. public class UserTest extends TestCase {  
  2.       
  3.     public UserTest(String testName) {  
  4.         super(testName);  
  5.     }      
  6.     private Session session;  
  7.     private SessionFactory sessionFactory;  
  8.       
  9.     protected void setUp() throws Exception {  
  10.         sessionFactory=HibernateUtil.getSessionFactory();  
  11.         session=sessionFactory.openSession();  
  12.         session.getTransaction().begin();  
  13.     }     
  14.     protected void tearDown() throws Exception {  
  15.         session.getTransaction().commit();  
  16.         session.close();          
  17.     }     
  18.     /**  
  19.      * Test of getAge method, of class model.User.  
  20.      */  
  21.     public void testSaveUser() {  
  22.         System.out.println("================testSaveUser=================");  
  23.           
  24.         User user = new User();  
  25.         user.setAge(29);  
  26.         session.save(user);  
  27.         assertNotNull("id is assigned !",user.getId());  
  28.     }  
  29.     public void testUpdateUser() {  
  30.         System.out.println("================testUpdateUser=================");  
  31.           
  32.         User user = new User();  
  33.         user.setAge(29);  
  34.         session.save(user);  
  35.         assertNotNull("id is assigned !",user.getId());  
  36.           
  37.         User _user=(User) session.get(User.class, user.getId());  
  38.         _user.setFirstname("Array");  
  39.         session.update(_user);         
  40.     }      

運行測試后,此時會生成完整的Hibernate SQL語句(注意將hibernate屬性show_sql設置成true)。

  1. ================testSaveUser=================  
  2. Hibernate: insert into Users (age, firstname, lastname) values (?, ?, ?)  
  3. ================testUpdateUser=================  
  4. Hibernate: insert into Users (age, firstname, lastname) values (?, ?, ?)  
  5. Hibernate: update Users set age=?, firstname=?, lastname=? where ID=? 

如果我們在<class ...>中加上 dynamic-insert="true" dynamic-update="true",變成如下。

  1. <class name="model.User" table="Users" dynamic-insert="true" dynamic-update="true"> 

再次運行測試類,就會發現生成的Hibernate SQL中涉及的字段只包含User類中修改的屬性所對應的表字段。

  1. ================testSaveUser=================  
  2. Hibernate: insert into Users (age) values (?)  
  3. ================testUpdateUser=================  
  4. Hibernate: insert into Users (age) values (?)  
  5. Hibernate: update Users set firstname=? where ID=? 

如果一個表的結構很復雜,字段很多的情況下,使用dynamic-insert,dynamic-update能夠性能上的少許提升。

 

【編輯推薦】

  1. 強人Hibernate文檔筆記(上)
  2. 強人Hibernate文檔筆記(中)
  3. 強人Hibernate文檔筆記(下)
  4. Hibernate優化方法解析
  5. Hibernate的性能優化
責任編輯:仲衡 來源: 百度博客
相關推薦

2009-06-16 16:39:49

Hibernate性能

2021-11-10 18:52:42

SQL技巧優化

2024-10-28 08:34:06

2015-09-15 08:30:23

Android代碼優化

2022-07-04 08:51:43

條件語句JavaScript

2023-09-25 13:15:50

SQL數據庫

2011-05-10 17:06:05

SEO

2015-09-16 14:47:14

Android性能優化代碼

2021-03-25 15:19:33

深度學習Pytorch技巧

2010-09-27 15:10:12

SQL Server

2021-02-03 10:46:31

SQL數據庫技巧

2022-11-24 10:34:05

CSS前端

2021-05-07 16:02:54

Python代碼優化

2021-06-16 10:50:16

Python代碼優化

2024-06-21 08:21:44

2022-03-10 08:01:06

CSS技巧選擇器

2009-06-16 16:10:59

Hibernate性能

2020-12-24 09:18:51

SQL數據庫函數

2020-01-16 18:30:07

技術SQL優化

2021-07-02 09:45:13

Python優化代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线播放视频 | 午夜影院在线观看视频 | 一区精品视频在线观看 | 日韩最新网址 | 国产欧美精品一区 | 中文字幕亚洲欧美日韩在线不卡 | 视频在线h | 亚洲欧洲精品在线 | 久久久久久久一级 | 精品一二区 | 午夜免费福利片 | 久久国产欧美日韩精品 | 午夜视频在线观看网址 | 色偷偷噜噜噜亚洲男人 | 免费一区二区 | 国产精品18hdxxxⅹ在线 | 91精品一区| 欧美中文字幕一区二区三区亚洲 | 亚洲www| 国产成人精品a视频 | 国产精品久久久久久妇女6080 | 国产成人精品综合 | 成人免费大片黄在线播放 | 在线免费观看亚洲 | 97av视频在线 | 精品美女| 一区观看| 日韩视频中文字幕 | 国产探花在线观看视频 | 日韩a视频 | 午夜寂寞福利视频 | 一呦二呦三呦国产精品 | 久久久69 | 中文字幕日韩欧美一区二区三区 | 中文字幕免费在线 | 久久精品国产亚洲夜色av网站 | 精品国产一区探花在线观看 | 日韩国产精品一区二区三区 | 中文字幕在线一区二区三区 | 最新毛片网站 | av中文字幕在线观看 |