`
awfrun
  • 浏览: 82486 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

(6)hibernate CURD

阅读更多

1. 获取session,SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();

A.Session session = sf.openSession();

B.Session session = sf.getCurrentSession();

 

说明:第一种每次都打开一个新连接,要显示关闭.

         第二种,先从上下文查看有没有session,有就用它没有创建一个新的,一旦commit().就会自动关闭连接,在配置文件中hibernate.cfg.xml 要加入   <property name="current_session_context_class">thread</property>也可能用jta.

 

2. save

Session session = sf.openSession();
  session.beginTransaction();
  session.save(s);
  session.getTransaction().commit();
  session.close();

 

下面可能看出session的关系:

Teacher t = new Teacher();
  t.setName("王老师");
  
  Session session = sf.getCurrentSession();
  session.beginTransaction();
  session.save(t);
  Session session2 = sf.getCurrentSession();
  
  System.out.println(session == session2);
  
  session.getTransaction().commit(); //提交之后此session关闭
  
  Session session3 = sf.getCurrentSession();
  System.out.println(session == session3);

 

3. delete

 

Teacher t = new Teacher();
  t.setName("Miss Wang");
  
  Session session = sf.getCurrentSession();
  session.beginTransaction();
  session.save(t);
  System.out.println(t.getId());
  session.getTransaction().commit();
  
  Session session2 = sf.getCurrentSession();
  session2.beginTransaction();
  session2.delete(t);
  session2.getTransaction().commit();

 

其实只要Id与DB中的Id对应就可以删除,不用管对象处在哪种状态.

 

4.Load

 

Session session = sf.getCurrentSession();
  session.beginTransaction();
  Teacher  t = (Teacher)session.load(Teacher.class, 2);
  System.out.println(t.getName());
  session.getTransaction().commit();
  System.out.println(t.getClass());

 

查出来的对象是一个代理类,只有去查类中的属性才会真正去查数据库.

 

5. Get

 

Session session = sf.getCurrentSession();
  session.beginTransaction();
  Teacher t = (Teacher)session.get(Teacher.class, 2);
  session.getTransaction().commit();
  System.out.println(t.getName());

 

不会产生廷迟加载,立即查询数据库.

 

6. Update

 

下面列举4种:

A.  update

Session session = sf.getCurrentSession();
  session.beginTransaction();
  Teacher t = (Teacher)session.get(Teacher.class, 2);
  session.getTransaction().commit();
  
  t.setName("李老师");
  
  Session session2 = sf.getCurrentSession();
  session2.beginTransaction();
  session2.update(t);
  session2.getTransaction().commit();

 

B.

Session session = sf.getCurrentSession();
  session.beginTransaction();
  Teacher t = (Teacher)session.get(Teacher.class, 2);
  t.setName("白老师");
  session.getTransaction().commit();

 

C.  HQL

Session session = sf.getCurrentSession();
  session.beginTransaction();
  Query query = session.createQuery("update Teacher set name='小明' where id=2");
  query.executeUpdate();
  session.getTransaction().commit();

 

D.  合并

Session session = sf.getCurrentSession();
  session.beginTransaction();
  
  Teacher t = (Teacher)session.get(Teacher.class, 2);
  session.getTransaction().commit();
  
  t.setSex("女");
  Session session2 = sf.getCurrentSession();
  session2.beginTransaction();
  session2.merge(t);
  session2.getTransaction().commit();

 

说明:如果没有做什么设置,除了C以外,其它的更新操作如果你只是对其中一个字段更新hibernate还是会默认更新所有字段,解决方案有使用B或D,在xx.hbm.xml文件中,加入动态更新设置,如下

<class name="Teacher" dynamic-update="true">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <property name="sex"/>
 </class>

 

这样只有要更新的字段才会更新,对于D方案还要提一下,当session提交之后对象处于detached,使用merget()方法,它会先去数据库先查一下放在缓存中与对象比较,然后才能判断哪个字段需要更新.

 

 

7. SaveOrUpdate

 

Teacher t = new Teacher();
  t.setName("XY");
  
  Session session = sf.getCurrentSession();
  session.beginTransaction();
  session.saveOrUpdate(t);
  session.getTransaction().commit();
  
  t.setName("JJ");
  Session session2 = sf.getCurrentSession();
  session2.beginTransaction();
  session2.saveOrUpdate(t);
  session2.getTransaction().commit();

 

8. Clear 清除缓存

 

Session session = sf.getCurrentSession();
  session.beginTransaction();
  Teacher t1 = (Teacher)session.load(Teacher.class, 3);
  System.out.println(t1.getName());
  System.out.println(t1.getSex());
 
  session.clear();
 
  Teacher t2 = (Teacher)session.load(Teacher.class, 3);
  System.out.println(t2.getName());
  
  session.getTransaction().commit();

 

 

 9.Flush

 

Session session = sf.getCurrentSession();
  session.beginTransaction();
  Teacher t = (Teacher)session.load(Teacher.class, 2);
  t.setName("ss");
  session.flush();
  t.setName("mm");
  session.getTransaction().commit();

 

10. SchemaExport

 

new SchemaExport(new AnnotationConfiguration().configure()).create(true, false);

 

说明:create(true,false)第一个boolean代表是否输出ddl,第二个,是否同步数据库.

 

分享到:
评论

相关推荐

    Hibernate构建一个CURD的程序

    在IT行业中,Hibernate是一个非常重要的Java持久化框架,它简化了数据库操作,使得开发者能够更加专注于业务逻辑,而不是底层的数据存取细节。本教程将深入探讨如何使用Hibernate构建一个完整的CRUD(创建、读取、...

    springMVC+spring3=hibernate4整合的CURD项目

    总结来说,这个"springMVC+spring3=hibernate4整合的CURD项目"展示了如何利用SSH框架组合实现一个简单的Web应用。通过Spring MVC处理请求,Spring 3管理依赖和事务,Hibernate 4处理数据持久化,从而构建出一个完整...

    Struts2+Hibernate+Spring整合与增、删、改、查CURD操作

    5. **实现 CURD**:在Service或DAO层,使用Hibernate的Session接口进行CRUD操作,如Session.save()、Session.get()、Session.update()、Session.delete()。 6. **错误和异常处理**:使用Spring的AOP功能,可以全局...

    Struts、Hibernate、Spring实现CURD所用Jar包(Lib1)

    在这个名为"Struts、Hibernate、Spring实现CURD所用Jar包(Lib1)"的压缩包中,包含的是用于实现数据库CRUD操作(创建Create、读取Read、更新Update、删除Delete)所需的基础库文件。 Struts是Apache组织开发的一个...

    struts2+hibernate整合 练习之CURD 完整版

    "CURD"代表创建(Create)、读取(Read)、更新(Update)和删除(Delete),这是任何数据库操作的基础,也是Web应用程序中最常见的功能。 首先,你需要理解Struts2的核心概念,如Action、Result和Interceptor。...

    spring3+hibernate4+maven=springMVC(curd)

    本项目"spring3+hibernate4+maven=springMVC(curd)"整合了这三个框架,创建了一个基于Spring MVC的CRUD(创建、读取、更新、删除)应用。下面将详细介绍这些技术和它们在项目中的应用。 **Spring 3** 是一个全面的...

    使用Mysql+Maven+Hibernate的一对一,一对多的CURD小案例

    在这个“使用Mysql+Maven+Hibernate的一对一,一对多的CURD小案例”中,我们将探讨如何在Java Web开发中结合这三个关键技术实现数据的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作。...

    struts2与hibernate的整合实现数据的crud

    6. **Service层设计**:创建Service接口和实现类,将业务逻辑封装起来,调用DAO层的方法。 7. **Action层设计**:在Struts2的Action类中,注入Service层的实现,根据用户的请求调用相应的Service方法,处理业务逻辑...

    Tapestry5.1+Spring2.5.6+Hibernate3.2.5写得简单CURD的程序

    Tapestry5.1+Spring2.5.6+Hibernate3.2.5写得简单CURD的程序,借鉴了SpringSide3.1.4.2的配置及数据层。实现了添加,列表,修改,删除,显示等操作。内有源码及生成的WAR文件。可以直接使用!

    SpringMVC+Spring3+Hibernate4

    SpringMVC+Spring3+Hibernate4开发环境搭建

    所有使用数据库的Web应用都\"just CURD Apps(只是CURD应用)

    在Web应用中,开发者通常会使用ORM(对象关系映射)工具,如Hibernate或ActiveRecord,它们将这些数据库操作转化为面向对象的编程方式,使得代码更易于理解和维护。 在描述中提到的博文链接虽然没有提供具体内容,...

    hibernate_OneToMany_CURD_demo_and_note

    标题“hibernate_OneToMany_CURD_demo_and_note”暗示了这是一个关于Hibernate框架中一对一(OneToOne)、一对多(OneToMany)关系映射的CRUD操作(创建、读取、更新、删除)的示例和注释。这篇内容可能包含了如何在...

    plugins-utils:Hibernate CURD 分页封装组件,微信(wechat)公众号工具箱,qcloud腾讯云API,aws,s3,sqs,snsAPI封装方便集成使用

    hibernate-query-plugin ​ 提供常用的数据查询,修改,查询,分页查询接口,简化在使用Hibernate的配置,只需要配置数据连接和entity的扫描包即可使用,支持直接在spring boot中使用。详细的文档查看 wechat-plugin...

    Hibernate3框架系列 [ 1 ]

    总结来说,本系列文章将带领读者从零开始搭建Hibernate3环境,理解其配置细节,并通过实例演示如何利用Hibernate实现数据库的CURD操作。这不仅是对Hibernate3基本功能的掌握,也为后续深入学习和应用ORM框架奠定了...

    Struts2+Hibernate实现新闻发布系统

    Struts2和Hibernate是两种非常重要的Java Web开发框架,它们在构建新闻发布系统中起到了关键作用。Struts2作为MVC(Model-View-Controller)架构的一部分,主要负责控制应用程序的流程,而Hibernate则是一个对象关系...

    postgreSQL的CURD和存储过程

    本文将深入探讨PostgreSQL中的CURD操作以及存储过程,并结合jdbc、hibernate、ibatis三种不同的Java数据访问技术进行讲解。 **一、CURD操作** 1. **创建(Create)**:在PostgreSQL中,创建表是最基本的操作。例如,...

    hibernate增删改查和动态sql

    6. **Maven Webapp:** 提到的"curd2 Maven Webapp"可能是指一个使用Maven构建的Web应用程序,其中包含了一个名为"curd2"的模块,这个模块可能包含了上述关于Hibernate CRUD操作和动态SQL的实现。 综上所述,这个...

    java后台+easyui完整curd

    3. **数据库操作**:Java后台通常使用JDBC或者ORM框架如Hibernate、MyBatis来操作数据库。在这个项目中,可能有SQL语句用于插入、查询、更新和删除数据。例如,使用JPA(Java Persistence API)的Repository接口可以...

    传智播客李勇hibernate

    3. **基本概念与CURD操作**: - Domain Object(领域对象):代表业务逻辑中的实体,应包含默认构造方法和主键标识符。 - hbm.xml映射文件:定义对象与数据库表的映射关系,包括字段映射、主键生成策略等。 - ...

Global site tag (gtag.js) - Google Analytics