Hibernate查询指南:HQL,Criteria与原生SQL
"Hibernate查询-Hibernate,对象/关系映射—Hibernate" 在软件开发中,特别是企业级应用,持久化层是连接业务逻辑和数据库的关键部分。Hibernate作为一种流行的Java ORM(对象关系映射)框架,提供了丰富的功能来解决对象与关系数据库之间的映射问题,以及方便的数据查询机制。 一、持久化层与O/R Mapping 传统的三层架构中,持久化层负责数据的存储和检索。在B/S应用中,业务逻辑层和持久化层不应依赖展现层,以保持良好的解耦。O/R Mapping的核心任务是解决面向对象模型和关系数据库模型之间的不匹配,如粒度、子类型、同一性、关联和导航等问题。Hibernate通过映射文件或注解实现了对象与数据库表的对应,使得开发者可以使用对象模型进行编程,而无需过多关注底层的SQL操作。 二、Hibernate入门 Hibernate的使用通常涉及配置、实体类定义、映射文件(XML或注解)以及Session工厂的创建。实体类对应数据库表,属性对应表中的列。通过SessionFactory,我们可以获取Session实例,它是与数据库交互的主要接口。 三、Hibernate映射声明 映射声明包括了类到表、属性到字段、关系到外键等映射规则。Hibernate支持XML文件(hibernate.cfg.xml和.hbm.xml)和注解两种方式声明映射。例如,User类可以通过以下方式映射到tbl_user表: ```java @Entity @Table(name = "tbl_user") public class User { @Id @Column(name = "name") private String name; @Column(name = "password") private String password; @OneToMany(mappedBy = "user") private List<Address> address; // getters and setters } ``` 四、持久化对象的状态和生命周期 Hibernate管理的对象有四种状态:瞬时态、持久态、托管态和脱管态。持久化对象的生命周期包括实例化、持久化、加载/检索、更新、删除等过程。 五、Hibernate查询 1. **Criteria Query**:通过Criteria API构建查询,提供一种面向对象的查询方式,可读性好,但功能相对有限,不支持复杂的SQL操作。 2. **HQL(Hibernate Query Language)**:是Hibernate提供的面向对象的查询语言,支持继承、多态和关联等特性,官方推荐使用。例如: ```java String hql = "FROM User WHERE name = :name"; Query<User> query = session.createQuery(hql); query.setParameter("name", "John"); List<User> users = query.list(); ``` 3. **Native SQL Queries**:直接使用原生的SQL语句,适用于处理Hibernate不支持或效率更高的查询场景。 六、Hibernate最佳实践 在实际开发中,应遵循一些最佳实践,如合理使用缓存、避免N+1查询问题、批处理更新等,以提高性能和代码的可维护性。 Hibernate简化了Java应用中的数据访问,提供了强大的查询工具,使得开发者可以专注于业务逻辑而不是底层数据库操作。通过熟练掌握Hibernate,开发者能够更高效地开发和维护企业级应用的持久化层。
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/958f7011be15435f83738a105cc39fcd_weixin_42197129.jpg!1)
- 粉丝: 27
- 资源: 2万+
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 解决Eclipse配置与导入Java工程常见问题
- 真空发生器:工作原理与抽吸性能分析
- 爱立信RBS6201开站流程详解
- 电脑开机声音解析:故障诊断指南
- JAVA实现贪吃蛇游戏
- 模糊神经网络实现与自学习能力探索
- PID型模糊神经网络控制器设计与学习算法
- 模糊神经网络在自适应PID控制器中的应用
- C++实现的学生成绩管理系统设计
- 802.1D STP 实现与优化:二层交换机中的生成树协议
- 解决Windows无法完成SD卡格式化的九种方法
- 软件测试方法:Beta与Alpha测试详解
- 软件测试周期详解:从需求分析到维护测试
- CMMI模型详解:软件企业能力提升的关键
- 移动Web开发框架选择:jQueryMobile、jQTouch、SenchaTouch对比
- Java程序设计试题与复习指南
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)