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,第二个,是否同步数据库.
分享到:
相关推荐
在IT行业中,Hibernate是一个非常重要的Java持久化框架,它简化了数据库操作,使得开发者能够更加专注于业务逻辑,而不是底层的数据存取细节。本教程将深入探讨如何使用Hibernate构建一个完整的CRUD(创建、读取、...
总结来说,这个"springMVC+spring3=hibernate4整合的CURD项目"展示了如何利用SSH框架组合实现一个简单的Web应用。通过Spring MVC处理请求,Spring 3管理依赖和事务,Hibernate 4处理数据持久化,从而构建出一个完整...
5. **实现 CURD**:在Service或DAO层,使用Hibernate的Session接口进行CRUD操作,如Session.save()、Session.get()、Session.update()、Session.delete()。 6. **错误和异常处理**:使用Spring的AOP功能,可以全局...
在这个名为"Struts、Hibernate、Spring实现CURD所用Jar包(Lib1)"的压缩包中,包含的是用于实现数据库CRUD操作(创建Create、读取Read、更新Update、删除Delete)所需的基础库文件。 Struts是Apache组织开发的一个...
"CURD"代表创建(Create)、读取(Read)、更新(Update)和删除(Delete),这是任何数据库操作的基础,也是Web应用程序中最常见的功能。 首先,你需要理解Struts2的核心概念,如Action、Result和Interceptor。...
本项目"spring3+hibernate4+maven=springMVC(curd)"整合了这三个框架,创建了一个基于Spring MVC的CRUD(创建、读取、更新、删除)应用。下面将详细介绍这些技术和它们在项目中的应用。 **Spring 3** 是一个全面的...
在这个“使用Mysql+Maven+Hibernate的一对一,一对多的CURD小案例”中,我们将探讨如何在Java Web开发中结合这三个关键技术实现数据的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作。...
6. **Service层设计**:创建Service接口和实现类,将业务逻辑封装起来,调用DAO层的方法。 7. **Action层设计**:在Struts2的Action类中,注入Service层的实现,根据用户的请求调用相应的Service方法,处理业务逻辑...
Tapestry5.1+Spring2.5.6+Hibernate3.2.5写得简单CURD的程序,借鉴了SpringSide3.1.4.2的配置及数据层。实现了添加,列表,修改,删除,显示等操作。内有源码及生成的WAR文件。可以直接使用!
SpringMVC+Spring3+Hibernate4开发环境搭建
在Web应用中,开发者通常会使用ORM(对象关系映射)工具,如Hibernate或ActiveRecord,它们将这些数据库操作转化为面向对象的编程方式,使得代码更易于理解和维护。 在描述中提到的博文链接虽然没有提供具体内容,...
标题“hibernate_OneToMany_CURD_demo_and_note”暗示了这是一个关于Hibernate框架中一对一(OneToOne)、一对多(OneToMany)关系映射的CRUD操作(创建、读取、更新、删除)的示例和注释。这篇内容可能包含了如何在...
hibernate-query-plugin 提供常用的数据查询,修改,查询,分页查询接口,简化在使用Hibernate的配置,只需要配置数据连接和entity的扫描包即可使用,支持直接在spring boot中使用。详细的文档查看 wechat-plugin...
总结来说,本系列文章将带领读者从零开始搭建Hibernate3环境,理解其配置细节,并通过实例演示如何利用Hibernate实现数据库的CURD操作。这不仅是对Hibernate3基本功能的掌握,也为后续深入学习和应用ORM框架奠定了...
Struts2和Hibernate是两种非常重要的Java Web开发框架,它们在构建新闻发布系统中起到了关键作用。Struts2作为MVC(Model-View-Controller)架构的一部分,主要负责控制应用程序的流程,而Hibernate则是一个对象关系...
本文将深入探讨PostgreSQL中的CURD操作以及存储过程,并结合jdbc、hibernate、ibatis三种不同的Java数据访问技术进行讲解。 **一、CURD操作** 1. **创建(Create)**:在PostgreSQL中,创建表是最基本的操作。例如,...
6. **Maven Webapp:** 提到的"curd2 Maven Webapp"可能是指一个使用Maven构建的Web应用程序,其中包含了一个名为"curd2"的模块,这个模块可能包含了上述关于Hibernate CRUD操作和动态SQL的实现。 综上所述,这个...
3. **数据库操作**:Java后台通常使用JDBC或者ORM框架如Hibernate、MyBatis来操作数据库。在这个项目中,可能有SQL语句用于插入、查询、更新和删除数据。例如,使用JPA(Java Persistence API)的Repository接口可以...
3. **基本概念与CURD操作**: - Domain Object(领域对象):代表业务逻辑中的实体,应包含默认构造方法和主键标识符。 - hbm.xml映射文件:定义对象与数据库表的映射关系,包括字段映射、主键生成策略等。 - ...