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:设置了此属性只对进行了改变的值进行更新
  • 相关阅读:
    Crazypony四轴飞行器代码框架
    Python中 sys.argv[]的用法简明解释
    详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!(转)
    jquery——所有版本下载
    jsop跨域请求方式--及中文乱码解决方案
    js ---任何浏览器关闭当前网页的代码
    jquery ajax跨域请求 IE9及以下不支持---调试
    poi---Excel导入数据-ClassNotFoundException
    ajax获取json数据为undefined--原因解析
    可变参数 / 枚举--详解
  • 原文地址:https://www.cnblogs.com/hfx123/p/9981804.html
Copyright © 2011-2022 走看看