`
chaoyi
  • 浏览: 306323 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate 使用DetachedCriteria操作

 
阅读更多

如题:

建立一个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("==========================================");
	}
}

 

效果图:



 

 

  • 大小: 63.8 KB
  • 大小: 41 KB
分享到:
评论

相关推荐

    Hibernate - DetachedCriteria 的完整用法

    Hibernate 的 Criteria 和 DetachedCriteria 是两个不同的概念,虽然它们都是用于查询数据的,但它们在创建和使用上有所不同。 首先,Criteria 是在线的,需要通过 Hibernate Session 来创建,即使用 `session....

    Hibernate(24): 为什么用DetachedCriteria不能表连接地取数据?

    在Java的持久化框架Hibernate中,DetachedCriteria是一个强大的查询工具,它允许我们在不与Session交互的情况下构建查询条件。然而,DetachedCriteria在处理复杂的关联查询,尤其是涉及到表连接(JOIN)时,可能存在...

    Hibernate_使用示例代码

    **标题:“Hibernate_使用示例代码”** **描述:** 这篇资源主要提供了关于Hibernate框架的实战应用示例,作者在iteye博客上分享了相关的代码实现。通过学习这些示例,开发者可以更好地理解和掌握如何在实际项目中...

    Hibernate_query查询数据表中的一个字段.

    在Java的持久化框架中,Hibernate是一个非常重要的工具,它提供了ORM(对象关系映射)功能,使得开发者能够更方便地操作数据库。...正确理解和使用Hibernate,能够大大提高Java开发中的数据库操作效率。

    Hibernate执行持久层访问步骤

    在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的方式进行数据操作,而无需关注底层的SQL语句。本文将深入探讨Hibernate执行持久层访问的详细...

    韩顺平.2011版.hibernate笔记.zip

    Hibernate是Java开发领域中广泛使用的对象关系映射(ORM)框架,它极大地简化了数据库操作,使开发者能够更加专注于业务逻辑,而不是数据库层面的细节。这份笔记涵盖了Hibernate的核心概念、配置、实体管理、会话...

    hibernate3使用手册

    《Hibernate3使用手册》是Java开发领域中一本重要的参考资料,主要涵盖了如何利用Hibernate3这个流行的持久化框架进行数据库操作的相关知识。Hibernate3作为Java对象关系映射(ORM)工具的代表,极大地简化了数据库...

    使用Hibernate开发租房系统第12章课件包含代码

    8. 批量操作:学习如何使用Hibernate进行批量插入、更新和删除,以提高效率,例如Session的saveOrUpdateAll()、deleteAll()和flush()方法。 9. 第二级缓存:了解Hibernate的缓存机制,特别是第二级缓存,它可以提高...

    Hibernate中Criteria的使用

    Hibernate 中 Criteria 的使用 Hibernate 中 Criteria 的使用是 ...Hibernate 中 Criteria 的使用可以灵活地根据查询条件的组装来进行查询,使用 Criterion 和 Projection 设置查询条件,可以实现复杂的查询操作。

    《深入浅出Hibernate》.pdf

    Hibernate是一个强大的工具,它简化了Java应用程序与数据库之间的交互,通过提供一种抽象机制,使得开发者无需直接编写SQL代码就能进行数据操作。 一、Hibernate概述 Hibernate是一个开源的ORM框架,它将Java类与...

    hibernate in action 中文版书籍

    Hibernate是Java开发中广泛使用的开源框架,它简化了数据库操作,将复杂的SQL语句与Java对象之间建立映射关系,从而实现数据的透明管理。 这本书籍主要涵盖了以下几个核心知识点: 1. **Hibernate概述**:介绍...

    孙卫琴精通hibernate part2

    - 学习如何使用Criteria API创建查询,包括添加限制条件、排序、分页等,以及如何使用DetachedCriteria进行延迟加载。 3. **Chapter 10:一对多与多对一关系映射** - Hibernate支持多种关系映射,本章将深入讲解...

    Hibernate 3.2.0 中文官方文档

    4. **CRUD操作**:了解如何使用Hibernate进行创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)操作。包括Session的save(), saveOrUpdate(), get(), load(), update(), delete()等方法的使用。 5. **查询...

    Hibernate 手册中文版chm格式

    5. Criteria API和DetachedCriteria:进一步深入,探讨如何使用Criteria API执行复杂的查询,并介绍DetachedCriteria,用于在不同会话间构建和执行查询。 6. Native SQL:当需要充分利用数据库特定特性时,可以使用...

    Hibernate3中文文档

    1. **对象关系映射(ORM)**:Hibernate通过ORM机制将Java对象与数据库表进行映射,允许开发者使用面向对象的方式操作数据库,避免了SQL语句的编写,提高了开发效率。 2. **配置文件**:`hibernate.cfg.xml`是...

    传智播客_hibernate

    本教程主要基于传智播客的PPT资料,旨在帮助学习者深入理解Hibernate的核心概念和使用方法。 Hibernate是一个强大的Java持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是数据库交互。通过...

    Hibernate 在查询操作中要使用分页+命名参数+排序技术

    本文将深入探讨如何在使用Hibernate框架时,有效地结合这些技术进行数据操作。 首先,我们来了解**分页查询**。在处理大数据量时,一次性加载所有数据不仅会消耗大量内存,还可能导致用户界面响应缓慢。为解决这个...

    hibernate官网jar包

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为对象操作,从而简化数据库编程。在Java应用中,Hibernate 提供了一种便捷的方式,将数据库中的数据与Java对象进行绑定,避免了...

    hibernate各种操作

    【描述】:Hibernate是一个强大的Java持久化框架,它简化了数据库操作,提供了对象关系映射(ORM)功能,使得开发者可以使用面向对象的方式来处理数据库事务。本教程将深入探讨Hibernate的各种操作,包括配置、实体...

Global site tag (gtag.js) - Google Analytics