`
xiaotao.2010
  • 浏览: 211970 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Hibernate-学习笔记04-数据更新方法

阅读更多

 

试验目的:

更新数据库中某一字段,其余字段不变。

 

(1)使用Update()方法

查阅Hibernate API(Hibernate_3.2.0_Reference_zh_CN.chm)得到Update()方法有:

update(Object object)
update(Object object, Serializable id)
update(String entityName, Object object)
update(String entityName, Object object, Serializable id)

 

很不幸运的事我的MyEclipse中只有一下方法(我用的是hibernate3.3.2,比API版本要高...我表示无语)

update(Object object)

update(String entityName, Object object)

 

测试代码:

	Teacher teacher = new Teacher();
		teacher.setId(4);
		teacher.setName("Marry");
		teacher.setBirthDate(new Date());
		
		SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
		Session session = sf.getCurrentSession();
		session.beginTransaction();
                session.update(teacher);
		session.getTransaction().commit();
 
生成的Hibernate SQL 写道
update
_Teacher
set
birthDate=?,
name=?,
title=?
where
id=?

 数据库中结果:

  4 | 2011-04-13 19:52:52 | Marry | NULL

 

结论:使用Update()方法来更新数据得到的是数据对象的整体更新,不存在保留未修改选项,此方法不符合要求。

 

 

(2)使用Persistence 来更新

代码:

 

	SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
		Session session = sf.getCurrentSession();
		session.beginTransaction();
		teacher = (Teacher)session.get(Teacher.class, 5);
		teacher.setName("Marry");
		session.getTransaction().commit();

生成SQL语句

update
        _Teacher
    set
        birthDate=?,
        name=?,
        title=?
    where
        id=?

 

数据库显示结果:

  5 | 2011-04-13 08:22:21 | Marrys | XX

 

结论:数据库中只修改了某一字段值,其余没有改变,符合要求。

 

 

(3)      延伸一下问题,若是使用persistence 来更新数据中的对象信息时Hibernate会发送全部字段的更新信息,有时候会降低效率,若是只发送需要修改的某一字段的信息?

      HQL语句 : Hibernate Quary Language 是Hibernate使用的面向对象的数据查询语言。

代码:

	Teacher teacher = new Teacher();
		
		SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
		Session session = sf.getCurrentSession();
		session.beginTransaction();
		Query query = session.createQuery("update Teacher t set t.name='Toms' where t.id=5");
		query.executeUpdate();
		session.getTransaction().commit();
		

 Hibernate产生SQL语句:

 update
        _Teacher
    set
        name='Toms'
    where
        id=5

数据显示结果:

 5 | 2011-04-13 08:22:21 | Toms  | XX

 

结论:该方法同样可以满足实验要求,同时又能做到执行时候只发送需要修改字段的SQL语句,同时有使用到了HQL面向对象的语句,这种方法在项目中比较常用,是解决Update的首选方法。

 

 

 

分享到:
评论

相关推荐

    Hibernate - 学习笔记

    使用Hibernate对数据进行操作时会牵涉到3种类型的文件:Java类(实体类),映射文件(test.hbm.xml),数据库的表结构(表结构的创建).从理论上说只要知道其中一个,另外两个就可以从知道的那个文件中生成出来,这就涉及到先...

    Hibernate学习笔记,使用Hibernate做数据层非常方便

    Hibernate学习笔记,使用Hibernate做数据层非常方便

    Hibernate---我的Hibernate学习笔记

    三层架构:数据表现层业务逻辑层数据持久层SUN的桌面应用SwingAWT普通Java类JDBCSUN的WEB基本应用JSP普通ServletJDBCSUN的WEB高级应用JSFSessionBeanPersistenceWEB国内流行开源StrutsSpringHibernate一、对象持久化...

    Hibernate学习笔记(1)

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

    Hibernate学习笔记(3)

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

    Hibernate学习笔记(2)

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

    Hibernate3.1_学习源码

    04 04Hibernate_Composite : 复合主键的使用,在开发中很少用到,一般良好的设计都会为一个表添加一个自动增长的主键标识列。其中重点配置方法和Hibernate中普遍采用的方法链编程的使用。还需注意可以将组合主键构建...

    学习笔记,hibernate框架入门

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JaveEE架构中取代CMP,完成数据持久化的重任。

    Hibernate学习笔记

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任

    hibernate学习笔记

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

    SSH整合学习笔记之struts2+spring+hibernate+c3p0源码

    SSH整合学习笔记之struts2+spring+hibernate+c3p0源码

    整合spring3-hibernate的小项目(一)

    【SSH学习笔记】整合spring3-hibernate的小项目(一) 配套资源 需求分析: 1、使用spring注入dataSourse数据源 2、使用BaseDao获取注入SessionFactory并返回Session 3、实现查询所有和按字符串查询的方法 4、...

    JSP网络编程学习笔记源代码 part2

    第四篇为“数据库访问技术”,主要讲述JDBC技术及JSP和Servlet如何通过JDBC访问数据库,以及如何改进数据库的访问和目前流行的Hibernate、iBATIS及Spring集成访问的支持;第五篇为“标签语言和表达式语言”,主要...

    Java/JavaEE 学习笔记

    Hibernate学习笔记..........180 第一章 Hibernate入门.....................180 第二章 对象/关系映射基础.............183 第三章 关联关系映射......................185 第四章 操纵持久化对象....................

    Spring的学习笔记

    (二) 构造方法Constructor Injection 10 四、 id、name 11 五、 简单属性的注入 11 六、 Bean的作用范围scope 12 七、 集合注入 12 八、 自动装配autowire 13 (一) byName 13 (二) byType 14 (三) 注意 14 九、 生命...

    Java学习笔记-个人整理的

    {1.4}数据类型}{23}{section.1.4} {1.4.1}整数与浮点数}{23}{subsection.1.4.1} {1.4.1.1}浮点数原理}{24}{subsubsection.1.4.1.1} {1.4.2}格式化输出浮点数}{24}{subsection.1.4.2} {1.4.3}\texttt {char}}{24...

    整合spring3-hibernate的小项目(二)

    【SSH学习笔记】整合spring3-hibernate的小项目(二) 配套资源 需求分析: 1、使用spring注入dataSourse数据源 2、使用BaseDao获取注入SessionFactory并返回Session 3、用generic接口及其实现类,实现泛型化的...

    spring2.5 学习笔记

    (二) 构造方法Constructor Injection 10 四、 id、name 11 五、 简单属性的注入 11 六、 Bean的作用范围scope 12 七、 集合注入 12 八、 自动装配autowire 13 (一) byName 13 (二) byType 14 (三) 注意 14 九、 生命...

    J2EE学习笔记(J2ee初学者必备手册)

    Hibernate学习笔记..........180 JavaEE@xuxiang 3 Java/JavaEE学习笔记Jonny xuxiang5612@sina.com 第一章 Hibernate入门.....................180 第二章 对象/关系映射基础.............183 第三章 关联关系映射....

Global site tag (gtag.js) - Google Analytics