dynamic-insert
作用:設置對象中沒有值的字段 insert並不會對其進行插入.
實體類映射配置如下
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- name實體類路徑 table數據庫表名 schema表的擁有者--> <class name="entity.Emp" table="emp" schema="scott"> <!-- 此id屬性表示 持久化的OID和表的主鍵映射 name為實體類中的屬性名稱 type為數據類型 column為數據庫中的列名 --> <id name="empno" type="java.lang.Integer" column="empno"> <!-- 此屬性用於指定具體注解生成策略 assigned策略,就是不使用主鍵生成策略,由手工輸入ID. --> <generator class="assigned"/> </id> <!-- name為實體類中的屬性名稱 type為數據類型 column為數據庫中的列名 not-null="true"表示不允許為空 --> <property name="ename" type="string" not-null="true" column="ename"/> <property name="deptNo" type="java.lang.Integer" column="deptNo"/> <property name="job" type="string" column="job"/> <property name="MGR" type="java.lang.Double" column="MGR"/> <property name="hiretDate" type="java.sql.Date" column="hireDate"/> <property name="sal" type="java.lang.Double" column="sal"/> <property name="comm" type="java.lang.Double" column="comm"/> </class> </hibernate-mapping>
首先是設置了dynamic-insert屬性的
public static void main(String[] args){ EmpSerivce empSerivce = new EmpSerivce(); Emp emp = new Emp(); emp.setEmpno(7903); emp.setEname("張三"); empSerivce.add(emp); }
結果如上,可以看到string類型未賦值的屬性都沒有對其進行插入,數值類型因為默認值是0所以會進行插入,deptNo因為是外鍵所以沒有進行插入
沒設置dynamic-insert屬性的
public static void main(String[] args){ EmpSerivce empSerivce = new EmpSerivce(); Emp emp = new Emp(); emp.setEmpno(7905); emp.setEname("張三"); empSerivce.add(emp); }
結果如上 全部字段都進行了插入
dynamic-update
作用:設置對象空字段不對其進行更新
不設置dynamic-update
public void updateEmp(){ Transaction tx = null; try { tx= HibernateUtil.currentSession().beginTransaction(); Emp empUpdate = empDao.update(7900); empUpdate.setSal(9999); tx.commit(); } catch (HibernateException e) { e.printStackTrace(); if(tx!=null) tx.rollback(); //回滾事務 } }
可以看到在代碼中我只更新了sal列
可以看到,對全部的列進行了更新
sal 列也變成了 9999
設置了dynamic-update
設置了之后只對我們更新過的列進行更新
總結
- dynam-insert:設置了此屬性對中的空值並不會進行insert,數值型除外
- dynam-update:設置了此屬性只對進行了改變的值進行更新