如题:
建立一个Book类模拟图书馆高级搜索(使用DetachedCriteria操作),包含动态查找。
name 书名
author作者
decribe 描述(模糊找主题词)
publish 出版社
Book 实体类
package entity; /** * Book 实体类 * */ public class Book { private int id; // 编号 private String name;// 作者 private String author;// 书名 private String decribe;// 描述 private String publish;// 出版社 /* * 构造方法 */ public Book() { } public Book(String name, String author, String decribe, String publish) { this.name = name; this.author = author; this.decribe = decribe; this.publish = publish; } /* * 封装方法 */ public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getDecribe() { return decribe; } public void setDecribe(String decribe) { this.decribe = decribe; } public String getPublish() { return publish; } public void setPublish(String publish) { this.publish = publish; } }
Book 实体类的XML配置文件
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="entity.Book"> <id name="id"> <generator class="sequence"> <param name="sequence">seq_book</param> </generator> </id> <property name="name"></property> <property name="author"></property> <property name="decribe"></property> <property name="publish"></property> </class> </hibernate-mapping>
hibernate.cfg.xml 为配置文件进行映射
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 数据库URL --> <property name="connection.url"> jdbc:oracle:thin:@localhost:1521:oracle11 </property> <!-- 数据库用户 --> <property name="connection.username">A_hr</property> <!-- 数据库用户密码 --> <property name="connection.password">123456</property> <!-- 数据库 JDBC 驱动 --> <property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver </property> <!-- 是否将运行期生成的 SQL 输出到日志以供调试 --> <property name="show_sql">true</property> <!-- 每个数据库都有其对应的 Dialect 以匹配其平台特征 --> <property name="dialect"> org.hibernate.dialect.Oracle10gDialect </property> <property name="hbm2ddl.auto">create</property> <mapping resource="entity/Book.hbm.xml" /> </session-factory> </hibernate-configuration>
进行数据操作
package test; import java.util.List; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Restrictions; import entity.Book; import util.HibernateSessionFactory; /** * 建立一个Book类模拟图书馆高级搜索(使用DetachedCriteria操作),包含动态查找。 * */ public class DetachedCriteriaTest { public static void main(String[] args) { add();// 添加数据 // 动态查找 Book searchBook = new Book(); searchBook.setId(1); searchBook.setName("java开发实战经典"); searchBook.setAuthor("李兴华"); searchBook.setDecribe("通俗易懂的语言"); searchBook.setDecribe(null); // 使用DetachedCriteria操作 detachedCriteriaSearch(searchBook); } // 添加数据 private static void add() { // 实例化 HibernateSessionFactory 工厂类 Session session = HibernateSessionFactory.getSession(); // 创建事务(增删改用事务) Transaction tx = null; try { // 打开事务 tx = session.beginTransaction(); // 实例化 Book 对象并传参 Book book1 = new Book("java开发实战经典", "李兴华", "本书用通俗易懂的语言和丰富多彩的实例", "网易出版社"); Book book2 = new Book("PHP开发实战经典", "何开", "本书用通俗易懂的语言和丰富多彩的实例", "新浪出版社"); Book book3 = new Book("C#开发实战经典", "李兴华", "这是一本书", "新浪出版社"); Book book4 = new Book("C++开发实战经典", "李炎恢", "这还是一本书", "网易出版社"); // 发送 insert Sql 语句 session.save(book1); session.save(book2); session.save(book3); session.save(book4); // 提交事务 tx.commit(); System.out.println("成功!"); } catch (HibernateException e) { e.printStackTrace(); // 回滚事务 tx.rollback(); } finally { // 关闭 session,释放资源 HibernateSessionFactory.closeSession(); } } // 使用DetachedCriteria操作 private static void detachedCriteriaSearch(Book searchBook) { //实例化 DetachedCriteria DetachedCriteria dc = DetachedCriteria.forClass(Book.class); try { /* * 判断参数是否为空,为空则不添加到 DetachedCriteria 的对象里面去 * */ if (searchBook.getId() != 0) { dc.add(Restrictions.eq("id", searchBook.getId())); } if (searchBook.getName() != null) { dc.add(Restrictions.eq("name", searchBook.getName())); } if (searchBook.getAuthor() != null) { dc.add(Restrictions.eq("author", searchBook.getAuthor())); } if (searchBook.getDecribe() != null) { dc.add(Restrictions.like("decribe", "%" + searchBook.getDecribe() + "%")); } if (searchBook.getPublish() != null) { dc.add(Restrictions.eq("publish", searchBook.getPublish())); } // 线程休眠3秒 Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } //实例化 Criteria,实际占用session从这里开始 Criteria critera = dc.getExecutableCriteria(HibernateSessionFactory .getSession()); List<Book> books = critera.list(); System.out.println("================显示列表结果=================="); //打印结果 for (Book book : books) { System.out.println(book.getId() + " " + book.getName() + " " + book.getAuthor() + " " + book.getDecribe() + " " + book.getPublish()); } System.out.println("=========================================="); } }
效果图:
相关推荐
Hibernate 的 Criteria 和 DetachedCriteria 是两个不同的概念,虽然它们都是用于查询数据的,但它们在创建和使用上有所不同。 首先,Criteria 是在线的,需要通过 Hibernate Session 来创建,即使用 `session....
在Java的持久化框架Hibernate中,DetachedCriteria是一个强大的查询工具,它允许我们在不与Session交互的情况下构建查询条件。然而,DetachedCriteria在处理复杂的关联查询,尤其是涉及到表连接(JOIN)时,可能存在...
**标题:“Hibernate_使用示例代码”** **描述:** 这篇资源主要提供了关于Hibernate框架的实战应用示例,作者在iteye博客上分享了相关的代码实现。通过学习这些示例,开发者可以更好地理解和掌握如何在实际项目中...
在Java的持久化框架中,Hibernate是一个非常重要的工具,它提供了ORM(对象关系映射)功能,使得开发者能够更方便地操作数据库。...正确理解和使用Hibernate,能够大大提高Java开发中的数据库操作效率。
在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的方式进行数据操作,而无需关注底层的SQL语句。本文将深入探讨Hibernate执行持久层访问的详细...
Hibernate是Java开发领域中广泛使用的对象关系映射(ORM)框架,它极大地简化了数据库操作,使开发者能够更加专注于业务逻辑,而不是数据库层面的细节。这份笔记涵盖了Hibernate的核心概念、配置、实体管理、会话...
《Hibernate3使用手册》是Java开发领域中一本重要的参考资料,主要涵盖了如何利用Hibernate3这个流行的持久化框架进行数据库操作的相关知识。Hibernate3作为Java对象关系映射(ORM)工具的代表,极大地简化了数据库...
8. 批量操作:学习如何使用Hibernate进行批量插入、更新和删除,以提高效率,例如Session的saveOrUpdateAll()、deleteAll()和flush()方法。 9. 第二级缓存:了解Hibernate的缓存机制,特别是第二级缓存,它可以提高...
Hibernate 中 Criteria 的使用 Hibernate 中 Criteria 的使用是 ...Hibernate 中 Criteria 的使用可以灵活地根据查询条件的组装来进行查询,使用 Criterion 和 Projection 设置查询条件,可以实现复杂的查询操作。
Hibernate是一个强大的工具,它简化了Java应用程序与数据库之间的交互,通过提供一种抽象机制,使得开发者无需直接编写SQL代码就能进行数据操作。 一、Hibernate概述 Hibernate是一个开源的ORM框架,它将Java类与...
Hibernate是Java开发中广泛使用的开源框架,它简化了数据库操作,将复杂的SQL语句与Java对象之间建立映射关系,从而实现数据的透明管理。 这本书籍主要涵盖了以下几个核心知识点: 1. **Hibernate概述**:介绍...
- 学习如何使用Criteria API创建查询,包括添加限制条件、排序、分页等,以及如何使用DetachedCriteria进行延迟加载。 3. **Chapter 10:一对多与多对一关系映射** - Hibernate支持多种关系映射,本章将深入讲解...
4. **CRUD操作**:了解如何使用Hibernate进行创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)操作。包括Session的save(), saveOrUpdate(), get(), load(), update(), delete()等方法的使用。 5. **查询...
5. Criteria API和DetachedCriteria:进一步深入,探讨如何使用Criteria API执行复杂的查询,并介绍DetachedCriteria,用于在不同会话间构建和执行查询。 6. Native SQL:当需要充分利用数据库特定特性时,可以使用...
1. **对象关系映射(ORM)**:Hibernate通过ORM机制将Java对象与数据库表进行映射,允许开发者使用面向对象的方式操作数据库,避免了SQL语句的编写,提高了开发效率。 2. **配置文件**:`hibernate.cfg.xml`是...
本教程主要基于传智播客的PPT资料,旨在帮助学习者深入理解Hibernate的核心概念和使用方法。 Hibernate是一个强大的Java持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是数据库交互。通过...
本文将深入探讨如何在使用Hibernate框架时,有效地结合这些技术进行数据操作。 首先,我们来了解**分页查询**。在处理大数据量时,一次性加载所有数据不仅会消耗大量内存,还可能导致用户界面响应缓慢。为解决这个...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为对象操作,从而简化数据库编程。在Java应用中,Hibernate 提供了一种便捷的方式,将数据库中的数据与Java对象进行绑定,避免了...
【描述】:Hibernate是一个强大的Java持久化框架,它简化了数据库操作,提供了对象关系映射(ORM)功能,使得开发者可以使用面向对象的方式来处理数据库事务。本教程将深入探讨Hibernate的各种操作,包括配置、实体...