声明:本贴只用于个人学习和总结,没有任何商业用途,如果侵权或问题,请尽早联系,本人马上删贴。
Hibernate--POJO对象的操作
POJO对象其实就是我们的实体,这篇博客总结一下框架对POJO对象对应数据库主键的生成策略,和一些对POJO对象的简单增删改查的操作。
hibernate框架中主键的生成策略有三种方式:
数据库负责生成主键(代理主键)
- native:表示由设置的方言决定采用什么数据库生成主键方式,例如:在MySQL中会采用自增长的方式,主键字段必须都是整形类型;在Oracle数据库中,会采用序列的增长方式。
- sequence:表示采用数据库的序列生成主键,适用于Oracle,DB2数据库中。
- identity:表示采用自增长的主键生成方式,适用于MySQL,SQL Server中。
Hibernate框架负责生成主键值(代理主键)
- increment:表示由框架本身提供计数器,累加数据,获取主键。
- uuid:由框架根据参数(IP地址,JVM虚拟机启动时间,系统时间,计数器等)生成32位16进制的数字字符串。
- 用户提供主键值(自然主键):
Assigned:业务(自己)提供主键
当然这里常用的是native,uuid和Assigned三值。在设置POJO类与表映射时,进行主键设置,标签为<id>,在其中的<generator>标签中进行设置,例如:
<!-- id标签用来映射主键字段 name属性表示类的属性 column属性表示表的字段 --> <id name="usercode" column="usercode" length="32" type="java.lang.String"> <!-- 主键生成策略 --> <generator class="assigned"/> </id>
Hibernate框架下的POJO对象的三种状态
瞬时状态(临时状态):Transient Object
对象和数据库的数据没有关联,并且没有和框架关联在一起。例如,我们刚刚 new User();
持久化状态:Persistent Object
对象和数据库的数据存在关联,并且和框架关联在一起。例如我们刚刚进行保存的 session.sava(user);
游离状态(离线状态,托管状态)Detached Object
对象和数据库的数据存在关联,但是和框架没有关联。例如保存后session关闭的user。
看一下三种状态POJO对象的转换吧:
Hibernate,对三种状态下的POJO的增删改查操作:
保存(Save):
通过session.save(user);就可以保存数据了,但是这里想提一下,主键的生成策略不同,框架发送sql语句的时间是不同的:
- native:在调用save方法时发送insert语句。
- uuid主键生成策略和assigned主键生成策略:在提交事务时发送insert语句。
这是因为主键的生成时机不同,由于native是在数据库中生成的,所以发送的比较早。
更新(Update):
这里想说一下对游离对象的更新:
删除(delete):
这里只要提供主键,可以根据主键id删除,只要id存在即可。
查询:
主键查询:
get:返回结果可能是:持久化对象或null,所以需要对结果进行非空判断。它利用了缓存,是立即查询。
//get方法查询如果成功,那么返回的对象状态是持久化状态
Objectobj = session.get(User.class, "admin");
load:返回结果可能是:持久化对象或cglib代理对象或异常,利用缓存,默认为延迟加载。
//load方法第一查询结果存放到缓存中,支持延迟加载,效率更高,但是主要
Objectobj = session.load(User.class, "admin");
普通查询(面向对象查询):后边会介绍
Query:HQL (HibernateQuery Language),HQL语言是对SQL语言的封装,是面向对象的查询语言。例如:SQL : select * from t_user(表名) whereusername(字段)="tom"
HQL : from User(类名) where username(属性)="tom"
//分页查询 String hql = "from User u "; //面向对象查询 HQL!!!!! Query query = session.createQuery(hql); int pageno = 3 ; int pagesize = 2 ; int index = (pageno - 1) * pagesize ; query.setFirstResult(index);//某页的第一个下标 query.setMaxResults(pagesize); //页数的大小 //条件查询 String hql = "from User u where u.usercode=? and u.userpswd=?"; //面向对象查询 HQL!!!!! Query query = session.createQuery(hql); query.setString(0, "admin"); //索引从0开始 query.setString(1, "admin");
Criteria:将所有的操作都以面向对象的方式进行完成。
Criteria cra = session.createCriteria(User.class); cra.setFirstResult(0); //开始索引 cra.setMaxResults(2); //每页数量 //排序 Criteria cra = session.createCriteria(User.class); cra.addOrder(Order.desc("username")); //条件查询 Criteria cra = session.createCriteria(User.class); cra.add(Restrictions.eq("username", "aaa")); cra.add(Restrictions.eq("usercode", "aaa"));
综上为Hibernate对POJO对象的简单操作,主要是做好映射,简单的配置,然后利用Hibernate里边的方法进行配置。这里这是举了几个简单的例子涉及的知识较少,我们可以查看Hibernate的帮助文档中进行查看参考,会帮助我们很多的!
相关推荐
在Java的持久化层开发中,Hibernate作为一款强大的ORM(对象关系映射)框架,极大地简化了数据库操作。然而,手动编写实体类和映射文件(hbm.xml)的过程仍需消耗大量时间。为了解决这一问题,两个工具——hibernate...
Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。`hibernate-mapping`是Hibernate配置文件中的一部分,用于定义Java对象与数据库表之间的映射关系。 1. `default-...
Hibernate是Java领域内最受欢迎的对象关系映射(ORM)框架之一,它简化了Java应用程序与关系型数据库之间的交互,使得开发人员能够用面向对象的方式处理数据库操作,而无需深入了解SQL语法或数据库API。通过将Java...
POJO通常用来表示简单的数据载体,可以被其他对象引用和操作。例如: - **用途**:作为基础的数据模型,可以自由定义和使用。 - **特点**: - 没有特定的含义或约束; - 可以被其他对象引用和操作。 ### O/R ...
在Java开发中,Eclipse是一款广泛使用的集成开发环境(IDE),而Hibernate则是一个优秀的对象关系映射(ORM)框架,它极大地简化了数据库操作。为了提高开发效率,开发者经常使用Hibernate Tools来反向工程数据库...
1. **POJO对象**:POJO(Plain Old Java Object)是没有任何特定框架限制的简单Java对象。在Hibernate中,这些对象被用来映射数据库中的记录。它们需要有一个默认构造函数,并且需要定义一个标识符(ID),这个ID...
Hibernate作为一种ORM(Object-Relational Mapping)框架,它能够自动地将对象模型映射到关系型数据库模型,并提供了一种高级接口来操作数据库。 **1.2 体系结构** Hibernate的核心架构由以下几个部分组成: - **POJO...
《Hibernate - 符合Java习惯的关系数据库持久化》是一份关于Hibernate框架的详细教程,旨在帮助Java开发者理解和应用Hibernate进行数据库操作。Hibernate是Java领域中的一款流行的对象关系映射(ORM)工具,它允许...
Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,而无需编写大量的SQL语句。在开发过程中,手动创建所有对应的Java POJO(Plain Old Java Object,简单Java对象)类...
在持久化类部分,文档讲解了如何设计符合Hibernate规范的Java类,包括POJO的实现、继承机制、equals()和hashCode()方法的重写,以及持久化生命周期中的回调。此外,XDoclet标记示例展示了如何利用注解简化映射过程。...
这三个框架分别负责不同的职责:Struts处理用户请求和视图展示,Spring提供依赖注入和事务管理,Hibernate则作为ORM(对象关系映射)工具,简化了数据库操作。 在这个整合实例中,我们首先创建一个基于Java EE 5.5...
通过Hibernate,开发者可以将对象模型映射到关系型数据库中,从而实现对数据库的操作而无需编写复杂的SQL语句。在实际开发过程中,为了提高效率并减少出错的可能性,通常会利用工具自动生成与数据库表对应的POJO...
4. **执行生成操作**:在IDE中使用Hibernate Tools的代码生成功能,选择对应的HBM文件,工具会根据文件中的映射信息自动生成对应的POJO类,包括属性、getter和setter方法,以及可能的构造函数。 5. **检查和修改**:...
Hibernate作为Java领域中著名的对象关系映射(ORM)框架,极大地简化了数据库操作。而Hibernate Annotations则是Hibernate框架的一部分,它引入了注解来声明对象与数据库表之间的映射关系,从而避免了XML配置文件的...
Hibernate,作为Java领域中最流行的ORM(对象关系映射)框架之一,极大地简化了数据库操作,使得开发者可以使用面向对象的方式处理数据。而Hibernate Annotations是Hibernate的一个重要组件,它通过在Java类和字段上...
**Hibernate**是一种流行的开源对象关系映射(ORM)框架,用于在Java应用程序中简化与数据库的交互。它提供了一种将Java对象映射到数据库表以及SQL字段的方式,允许开发人员用面向对象的方式来处理数据存储,而无需...
总结来说,通过MyEclipse生成的Hibernate映射文件和POJO类,我们可以轻松地在Java应用中处理"订单信息"数据,而无需手动编写大量数据库操作代码。这种面向对象的方式使得代码更易于理解和维护,同时保持了与数据库的...