Hibernate5-查询与排序

1.创建项目,项目名称hibernatedemo4,目录结构如图所示

2.在项目中创建lib目录存储jar文件,目录结构如图所示

3.在src目录中创建实体Bean Forum,包名(com.mycompany.demo.bean),如图所示

4.实体Bean Forum的内容如下

package com.mycompany.demo.bean;

public class Forum {
	private int fid;
	private String name;

	public Forum() {
		super();
	}
	public Forum(String name) {
		super();
		this.name = name;
	}
	public int getFid() {
		return fid;
	}
	public void setFid(int fid) {
		this.fid = fid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + fid;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Forum other = (Forum) obj;
		if (fid != other.fid)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
}

5.在src目录中创建实体Bean Forum的映射文件Forum.hbm.xml,包名(com.mycompany.demo.bean),如图所示

6.映射文件Forum.hbm.xml的内容如下

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<!--
	package:指定<class/>所在的包 
 -->
<hibernate-mapping package="com.mycompany.demo.bean">
	<!--
		name:类名
		table:表名 
		catalog:数据库名称,默认为hibernate.cfg.xml中配置的数据库名称
	 -->
   <class name="Forum" table="hnsq_forum" catalog="b_shequ_two">
      <meta attribute="class-description">
         This class contains the forum detail. 
      </meta>
      <!--
      	name:属性名
      	colum:列名 
       -->
      <id name="fid" type="int" column="fid">
      		<!--
      			increment:hibernate维护主键值
      			identity:数据库自增长
      			sequence:序列
      			native:根据不同的数据库选择生成策略
      			uuid:通过UUID算法生成,实际使用较多
      			assigned:手工设置
      		 -->
         <generator class="native"/>
      </id>
      
      <!--
      	length:字节长度
      	type:字段类型,支持java和hibernate类型
      	not-null:非空约束
      	unique:唯一性约束
       -->
      <property name="name" column="name" type="string" length="50" not-null="true" unique="false"/>
   </class>
</hibernate-mapping>

7.在src目录中创建工具类 HbnUtil,包名(com.mycompany.demo.util),如图所示

8.工具类 HbnUtil的内容如下

package com.mycompany.demo.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HbnUtil {
	private static SessionFactory sessionFactory;

	public static Session getSession(){
		if(sessionFactory == null || sessionFactory.isClosed()){
			sessionFactory = new Configuration().configure().buildSessionFactory();
		}

		return sessionFactory.getCurrentSession();
	}
}

9.在src目录中创建Hibernate的配置文件hibernate.cfg.xml,如图所示

10.Hibernate的配置文件hibernate.cfg.xml的内容如下

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
   <session-factory>
   	<!-- 方言,可以从Hibernate核心jar(hibernate-core-x.x.x.Finall.jar)
   	文件中的or.hibernate.dialect包中找到相应的类,类的全名就是 -->
	   <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
	   <!-- 驱动 -->
	   <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

	   <!-- 数据库连接地址 -->
	   <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/b_shequ_two</property>
	   <!-- 用户名 -->
	   <property name="hibernate.connection.username">
	      root
	   </property>
	   <!-- 密码 -->
	   <property name="hibernate.connection.password"></property>
	   <!--
	   		create:每次都新创建,如果存在就删除
	   		create-drop:创建新表,sessionFactory关闭,表会删除
	   		update :表字段增加,会同步,字段减少不同步,数据改变会同步修改
	    -->
	   <property name="hibernate.hbm2ddl.auto">update</property>
	   <!-- 输出sql -->
	   <property name="hibernate.show_sql">true</property>
	   <!-- 格式化sql -->
	   <property name="hibernate.format_sql">true</property>
	   <!-- 事务环境一个线程对一个事务
	   		thread:本地事务环境
	   		jta:分布式事务环境
	   		SpringSessionContext:用于ssh整合
	    -->
	   <property name="hibernate.current_session_context_class">thread</property>	  
	   
	   <!-- 使用c3p0数据源 -->
	   <property name="hibernate.connection.provider_class">
	       org.hibernate.c3p0.internal.C3P0ConnectionProvider
	   </property> 

	   <!-- List of XML mapping files -->
	   <mapping resource="com/mycompany/demo/bean/Forum.hbm.xml"/>
</session-factory>
</hibernate-configuration>

11.在项目中创建test目录存储测试文件,文件名称ManageForum,包名(com.mycompany.demo.bean),目录结构如图所示

12.ManageForum测试类的内容如下

package com.mycompany.demo.bean;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.junit.Before;
import org.junit.Test;

import com.mycompany.demo.util.HbnUtil;

public class ManageForum {

	private Session session;

	@Before
	public void init(){
		session = HbnUtil.getSession();
	}

	/*
	 * 添加数据
	 */
	@Test
	public void testSave(){
		try {
			session.beginTransaction();
			for(int i = 0;i < 10;i++){
				Forum forum = new Forum("forum"+i);
				session.save(forum);
			}

			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}

	/*
	 * 查询所有-SQL
	 */
	@Test
	public void testQueryForSql(){
		try {
			session.beginTransaction();
			String sql = "SELECT * FROM hnsq_forum";
			List<Forum> forums = session.createSQLQuery(sql).addEntity(Forum.class).list();
			for (Forum forum : forums) {
				System.out.println(forum.getName());
			}
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}

	/*
	 * 查询所有-HQL
	 */
	@Test
	public void testQueryForHQL(){
		try {
			session.beginTransaction();
			String hql = "FROM Forum";
			List<Forum> forums = session.createQuery(hql).list();
			for (Forum forum : forums) {
				System.out.println(forum.getName());
			}
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}

	/*
	 * 查询所有-QBC
	 */
	@Test
	public void testQueryForQBC(){
		try {
			session.beginTransaction();
			List<Forum> forums = session.createCriteria(Forum.class).list();
			for (Forum forum : forums) {
				System.out.println(forum.getName());
			}
			session.getTransaction().commit();
		} catch (HibernateException e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}

	/*
	 * 对查询结果进行排序-SQL
	 */
	@Test
	public void testOrderForSQL(){
		try {
			session.beginTransaction();
			String sql = "SELECT * FROM hnsq_forum ORDER BY fid desc";
			List<Forum> forums = session.createSQLQuery(sql).addEntity(Forum.class).list();
			for (Forum forum : forums) {
				System.out.println(forum.getName());
			}
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}

	/*
	 * 对查询结果进行排序-HQL
	 */
	@Test
	public void testOrderForHQL(){
		try {
			session.beginTransaction();
			String hql = "FROM Forum ORDER BY fid desc";
			List<Forum> forums = session.createQuery(hql).list();
			for (Forum forum : forums) {
				System.out.println(forum.getName());
			}
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}

	/*
	 * 对查询结果进行排序-QBC
	 */
	@Test
	public void testOrderForQBC(){
		try {
			session.beginTransaction();
			List<Forum> forums = session.createCriteria(Forum.class)
			.addOrder(Order.desc("fid")).list();
			for (Forum forum : forums) {
				System.out.println(forum.getName());
			}
			session.getTransaction().commit();
		} catch (HibernateException e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}

}

时间: 2024-07-28 13:54:14

Hibernate5-查询与排序的相关文章

iOS之SQLite中的查询与排序 访问手机相册 向手机相册中存图

Day05 SQLite中的查询与排序 按查询结果排序:[[email protected][NSSortDescriptor sortDescriptorWithKey:@"age"ascending:yes]]; 设置查询条件: NSPredicate  *pre=nil; 1.比较运算符 > <  >=  <= == != pre=[NSPridicate [email protected]“age>40”]; 2. 范围运算符 IN  BETWEE

mysql中条件查询加排序和索引的关系

跟一个朋友,不错公司的主管交流时,对于mysql中条件查询和排序时 与索引的关系 mysql> explain select * from article where title='希望光伏企业挺过2个月' o rder by id desc\\\\\\\\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: article type: index pos

在ASP.NET MVC中使用Boostrap实现产品的展示、查询、排序、分页

在产品展示中,通常涉及产品的展示方式.查询.排序.分页,本篇就在ASP.NET MVC下,使用Boostrap来实现. 源码放在了GitHub: https://github.com/darrenji/ProductsSearchSortPage 先上效果图: 最上面是搜索和排序,每次点击搜索条件.排序,或者删除搜索条件都会触发异步加载. 中间部分为产品展示,提供了列表和格子这2种显示方式. 最下方为分页. 能实现的功能包括: ○ 点击某一个搜索条件,该搜索条件被选中,选中项以标签的形式显示到"

限定查询与排序显示(章节摘要)

1,数据查询的标准语法. SELECT [DISTINCT] * | 列 [AS][别名],列[AS][别名],... FROM 表名称 [别名] [WHERE 限定条件(s)] [ORDER BY 排序字段 [ASC | DESC][,排序字段[ASC | DESC]...]]; 2,多个字句的执行顺序为FROM,WHERE,SELECT,ORDER BY,其中ORDER BY字句永远放在最后执行. 3,在使用限定查询时,所讲解的若干个限定条件为关系运算,逻辑运算,BETWEEN...AND,

oracle SQL语句练习MERGE、模糊查询、排序、

Oracle支持的SQL指令可分为数据操作语言语句.数据定义语言语句.事务控制语句.会话控制语句等几种类型:1.数据操作语言语句数据操作语言语句(Data manipulation language,DML)用于进行数据的检索和更新操作.数据检索是数据库应用中使用频率最高的操作类型,因此数据检索的效率对数据库的整体性能影响显著.数据更新包括数据的插入.修改和删除等操作,数据更新操作具有一定的风险性,在其执行过程中DBMS必须保证数据的一致性,以确保数据有效.SELECT.INSERT.DELET

浅析SQL查询语句未显式指定排序方式,无法保证同样的查询每次排序结果都一致的原因

本文出处:http://www.cnblogs.com/wy123/p/6189100.html 标题有点拗口, 先抛出问题:一个查询没有明确指定排序方式,那么,第二次执行这个同样的查询的时候,查询结果会不会与第一次的查询结果排序方式完全一样? 答案是不确定的,两个完全一样的查询,结果也完全一样,两次(多次)查询结果的排序方式有可能一致,有可能不一致. 如果不一致,又是什么原因导致同样的查询默认排序方式不一致? 以下简单分析几种情况,说明为什么查询同样的查询会出现默认排序结果不一样的情况.当然对

《卸甲笔记》-限定查询与排序显示

限定查询与排序显示 限定查询指的是在数据查询时设置一系列的过滤条件,只有满足指定的条件后才可以进行显示 在SQL标准中限定查询的语法如下: select [distinct] *|列名称 [as] [列别名],列名称 [as] [列别名], … from 表名称 [表别名] [where 条件(s)] 1查看emp表中的数据量 Oracle SQL> select count(*) from emp; COUNT(*) ---------- 14 PPAS scott=# select coun

【Hibernate】Hibernate的聚类查询、分组查询、排序与时间之差

在Hibernate中的HQL语句其实能够基本能够实现SQL语句所做的事情,正如jQuery至于javascript一样.虽然HQL语句是对类的查询,但是HQL在实行聚类查询.分组查询.排序与时间之差等查询,也无须把查询结果查询出来,再通过对List的处理才得到结果. 比如有一张如下的Testtable表: 要像<[Mysql]求出离最近相差X天的项,sql语句关于日期的比对>(点击打开链接)一样,查询date字段离现在具有30年的项有多少,SQL语句则这样写: select count(*)

MySQL自定义查询字段排序

同事在做抽奖排名的时候有个问题 需要按照 一等奖 二等奖 三等奖 未中奖 的形式输出数据 问到我如何排序. 数据库设计如下 用一个prize_code字段标示了是否中奖 1是一等奖 2是二等奖 3是三等奖 0是未中奖 思考许久 本来开始想用union 写出SQL如下 select * from (SELECT * FROM data where prize_code>0 order by prize_code asc) as tmp UNION select * from data where

不简单的SQL查询和排序语句

真不简单!! 一:使用select语句进行查询 语法: SELECT    <列名> FROM      <表名> [WHERE    <查询条件表达式>] [ORDER BY <排序的列名>[ASC或DESC]] eg1: SELECT               SCode,SName,SAddress FROM   Students WHERE               SSEX = 0 ORDER BY   SCode 二:查询所有列和行: eg: