Hibernate的dynamic-insert和dynamic-update的使用
Hibernate在初始化的时候,默认按照配置为表预定义insert,delete,update,select(by id)的SQL语句放在session中,其中insert,update
Hibernate在初始化的时候,默认按照配置为表预定义insert,delete,update,select(by id)的SQL语句放在session中,其中insert,update,select操作都是对表的所有字段操作.如果在一个表有很多字段的时候,在做初次inser的时候有比较多的字段为空值,或者经常update某少部分字段,应该在配置文件的
如有这样一张表:create table hbtest(id int,val1 varchar2(100),val2 varchar2(100));
1,在 dynamic-insert没有设置的时候
tbo.setId(new Integer(2));
tbo.setVal1("val1");
sessionFactory.getCurrentSession().save(tbo);
某些字段为空做insert,hibernate会用全字段的insert sql语句,如下:
insert into HBTEST(VAL1, VAL2,ID) values(?, ?,?)
2,将dynamic-insert设置为true,同样的保存,hibernate会动态生成SQL语句,没有值的字段不会出现在insert语句中.
insert into HBTEST(VAL1, ID) values(?, ?)
3,在 dynamic-update没有设置的时候
Hbtest tbo = (Hbtest) sessionFactory.getCurrentSession().load(Hbtest.class,new Integer(1));
tbo.setVal1("valXX");
tx.commit();
只更新部分字段,hibernate仍然对所有字段做更新:
update HBTEST set VAL1=?,VAL2=? where ID=?
4,同样的操作如果把设置为true的话,sql语句只包含更新的字段:update HBTEST set VAL1=? where ID=?
5,Hibernate这种动态SQLupdate的特性是利用在对象从数据库加载到hibernate session的时候保存了一份快照,做更新的时候与这个快照做比较,只更新改动过的值.
所以下面这种情况就会用全部字段进行更新:,不设值的字段会被更新成null.
Hbtest tbo = new Hbtest();
tbo.setId(new Integer(1));
tbo.setVal1("val1ZZZ");
sessionFactory.getCurrentSession().update(tbo);
这种情况应该利用Hibernate提供的对SQL的支持,用SQL做更新操作.

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在SpringBoot專案中整合Hibernate前言Hibernate是一個流行的ORM(物件關係映射)框架,它可以將Java物件映射到資料庫表,從而方便地進行持久化操作。在SpringBoot專案中,整合Hibernate可以幫助我們更輕鬆地進行資料庫操作,本文將介紹如何在SpringBoot專案中整合Hibernate,並提供相應的範例。 1.引入依賴在pom.xml檔案中引入以下依賴:org.springframework.bootspring-boot-starter-data-jpam

Java是一種物件導向程式語言,它被廣泛地應用於軟體開發領域。 Hibernate是一種流行的Java持久化框架,它提供了一種簡單且高效的方式來管理Java物件的持久化。然而,開發過程中經常會遇到Hibernate錯誤,這些錯誤可能會導致程式的異常終止或不穩定。如何處理和避免Hibernate錯誤成為了Java開發者必須掌握的能力。本文將介紹一些常見的Hib

hibernate和mybatis的差別:1、實作方式;2、效能;3、物件管理的比較;4、快取機制。詳細介紹:1、實作方式,Hibernate是一個完整的物件/關係映射解決方案,將物件與資料庫表進行映射,MyBatis則需要開發者手動編寫SQL語句以及ResultMap;2、效能,Hibernate在開發速度上可能比MyBatis快,因為Hibernate簡化了DAO層等等。

Hibernate的一對多和多對多Hibernate是一個優秀的ORM框架,它簡化了Java應用程式與關係型資料庫之間的資料存取。在Hibernate中,我們可以使用一對多和多對多的關係來處理複雜的資料模型。 Hibernate的一對多在Hibernate中,一對多關係是指一個實體類別對應多個另一個實體類別。例如,一個訂單(Order)可以對應多個訂單項目(OrderItem),一個使用者(User)可以對應多個訂單(Order)。要在Hibernate中實作一對多關係,需要在實體類別中定義一個集合屬性來存

Hibernate是一個開放原始碼的ORM框架,它將關係型資料庫和Java程式之間的資料映射相互綁定,這樣可以讓開發人員更方便地存取資料庫中的資料。使用Hibernate框架可以大幅減少編寫SQL語句的工作,並提高應用程式的開發效率和可重複使用性。以下從以下幾個方面來介紹Hibernate框架。一、Hibernate框架的優點物件關係映射,隱藏資料庫存取細節,使開發

快取有助於減少執行查詢時的資料庫網路呼叫。一級緩存與會話連結。它是隱式實現的。一級緩存存在直到會話物件存在為止。一旦會話物件終止/關閉,將會有沒有快取物件。二級緩存適用於多個會話物件。它是連結的與會話工廠。二級緩存物件可供所有會話使用單一會話工廠。當特定會話發生時,這些快取物件將被終止工廠已關閉。實作二級快取我們需要新增以下相依性才能使用二級快取。 <!--https://mvnrepository.com/artifact/net.sf.ehcache/ehcache--><de

1.hibernate映射配置class標籤,用來建立類別與表之間的關係name:類別名,table:表名id標籤,建立中的屬性與表中的主鍵的對應關係property,建立類別中的普通屬性與表格的欄位的對應關係(1)首先我們要學會如何編寫映射配置文件,大家要知道編寫完的映射配置文件應與實體類在同一個包下,並且名稱應是類名.hbm.xml,所以我們要在com.meimeixia.hibernate.demo01套件下建立一個Customer.hbm.xml文件,但是它的限制該怎麼寫呢?可以在Hiberna

在本文中,我們將看到如何在Hibernate中執行批次插入/更新。每當我們執行一條sql語句時,我們都是透過對資料庫進行網路呼叫來完成的。現在,如果我們必須在資料庫表中插入10個條目,那麼我們必須進行10次網路呼叫。相反,我們可以透過使用批次來優化網路呼叫。批次允許我們在單一網路呼叫中執行一組SQL語句。為了理解和實作這一點,讓我們定義我們的實體−@EntitypublicclassParent{@Id@GeneratedValue(strategy=GenerationType.AUTO)
