zoukankan      html  css  js  c++  java
  • dynamic-insert和dynamic-update属性

    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:设置了此属性只对进行了改变的值进行更新
  • 相关阅读:
    28完全背包+扩展欧几里得(包子凑数)
    HDU 3527 SPY
    POJ 3615 Cow Hurdles
    POJ 3620 Avoid The Lakes
    POJ 3036 Honeycomb Walk
    HDU 2352 Verdis Quo
    HDU 2368 Alfredo's Pizza Restaurant
    HDU 2700 Parity
    HDU 3763 CDs
    POJ 3279 Fliptile
  • 原文地址:https://www.cnblogs.com/hfx123/p/9981804.html
Copyright © 2011-2022 走看看