`
chinrui
  • 浏览: 98022 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

HQL 简单使用二

阅读更多
HQL的简单使用2

1、 Category类
package com.edu.hpu;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Category {

	private int id;
	private String name;
	
	@Id
	@GeneratedValue
	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;
	}
}

2、 Msg类
package com.edu.hpu;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Msg {

	private int id;
	private String cont;
	private Topic topic;
	
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getCont() {
		return cont;
	}
	public void setCont(String cont) {
		this.cont = cont;
	}
	
	@ManyToOne
	@JoinColumn(name="topic_ID")
	public Topic getTopic() {
		return topic;
	}
	public void setTopic(Topic topic) {
		this.topic = topic;
	}
}

3、 Topic类
package com.edu.hpu;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

@Entity
public class Topic {

	private int id;
	private String title;
	private Date date;
	private Category category;
	private Set<Msg> msgs = new HashSet<Msg>();
	
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="category_ID")
	public Category getCategory() {
		return category;
	}
	public void setCategory(Category category) {
		this.category = category;
	}
	
	@OneToMany(mappedBy="topic")
	public Set<Msg> getMsgs() {
		return msgs;
	}
	public void setMsgs(Set<Msg> msgs) {
		this.msgs = msgs;
	}
}

4、 测试类
package com.edu.hpu;

import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class TestClass {

	private static SessionFactory sf = null;
	
	@BeforeClass
	public static void beforeClass() {
		Configuration conf = new Configuration().configure();
		ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(conf.getProperties()).buildServiceRegistry();
		sf = conf.buildSessionFactory(sr);
	}
	
	@Test
	public void testExport() {
		new SchemaExport(new Configuration().configure()).create(true ,true);
	}
	
	@Test
	public void testSave() {
		Session session = sf.openSession();
		session.beginTransaction();
		
		for(int i = 0; i < 10; i++) {
			Category c = new Category();
			c.setName("c" + i);
			session.save(c);
		}
		
		for(int i = 0; i < 10; i++) {
			Category c = new Category();
			c.setId(1);
			Topic t = new Topic();
			t.setTitle("t" + i);
			t.setCategory(c);
			session.save(t);
		}
		
		for(int i = 0; i < 10; i++) {
			Topic t = new Topic();
			t.setId(1);
			Msg m = new Msg();
			m.setTopic(t);
			m.setCont("m" + i);
			session.save(m);
		}
		
		session.getTransaction().commit();
		session.close();
	}
	
	@Test
	public void testHQL_19() {
		Session s = sf.getCurrentSession();
		s.beginTransaction();
		Query q = s.createQuery("from Topic t where t.msgs is empty");
		List<Topic> ts = q.list();
		for(Topic t : ts) {
			System.out.println(t.getTitle());
		}
		s.getTransaction().commit();
	}
	
	//like % 代表零个或多个
	@Test
	public void testHQL_20() {
		Session s = sf.getCurrentSession();
		s.beginTransaction();
		Query q = s.createQuery("from Topic t where t.title like '%5'");
		List<Topic> ts = q.list();
		for(Topic t : ts) {
			System.out.println(t.getTitle());
		}
		s.getTransaction().commit();
	}
	
	//like % 代表一个或多个
	@Test
	public void testHQL_21() {
		Session s = sf.getCurrentSession();
		s.beginTransaction();
		Query q = s.createQuery("from Topic t where t.title like '_5'");
		List<Topic> ts = q.list();
		for(Topic t : ts) {
			System.out.println(t.getTitle());
		}
		s.getTransaction().commit();
	}
	
	@Test
	public void testHQL_22() {
		Session s = sf.getCurrentSession();
		s.beginTransaction();
		Query q = s.createQuery("select current_time , current_date , current_timestamp , t.id from Topic t");
		List<Object[]> objs = (List<Object[]>)q.list();
		for(Object[] obj : objs) {
			System.out.println(obj[0] + " " + obj[1] + " " + obj[2] + " " + obj[3]);
		}
		s.getTransaction().commit();
	}
	
	@Test
	public void testHQL_23() {
		Session s = sf.getCurrentSession();
		s.beginTransaction();
		Query q = s.createQuery("from Topic t where t.date < :now");
		q.setParameter("now", new Date());
		List<Topic> ts = (List<Topic>)q.list();
		for(Topic t : ts) {
			System.out.println(t.getId() + " " + t.getTitle());
		}
		s.getTransaction().commit();
	}
	
	@Test
	public void testHQL_24() {
		Session s = sf.getCurrentSession();
		s.beginTransaction();
		Query q = s.createQuery("select t.title , count(*) from Topic t group by t.title");
		List<Object[]> objs = (List<Object[]>)q.list();
		for(Object[] obj : objs) {
			System.out.println(obj[0] + " " + obj[1]);
		}
		s.getTransaction().commit();
	}

	@Test
	public void testHQL_25() {
		Session s = sf.getCurrentSession();
		s.beginTransaction();
		Query q = s.createQuery("select t.title , count(*) from Topic t group by t.title having count(*) >= 1");
		List<Object[]> objs = (List<Object[]>)q.list();
		for(Object[] obj : objs) {
			System.out.println(obj[0] + " " + obj[1]);
		}
		s.getTransaction().commit();
	}
	
	@Test
	public void testHQL_26() {
		Session s = sf.getCurrentSession();
		s.beginTransaction();
		Query q = s.createQuery("from Topic t where t.id < (select avg(t.id) from Topic t)");
		List<Topic> ts = q.list();
		for(Topic t : ts) {
			System.out.println(t.getId() + " " + t.getTitle());
		}
		s.getTransaction().commit();
	}
	
	@Test
	public void testHQL_27() {
		Session s = sf.getCurrentSession();
		s.beginTransaction();
		Query q = s.createQuery("from Topic t where t.id < ALL (select t.id from Topic t where mod(t.id , 2) = 0)");
		List<Topic> ts = (List<Topic>)q.list();
		for(Topic t : ts) {
			System.out.println(t.getId() + "  " + t.getTitle());
		}
		s.getTransaction().commit();
	}
	
	//exists 可以用in来实现,如果exists 执行效率高
	@Test
	public void testHQL_28() {
		Session s = sf.getCurrentSession();
		s.beginTransaction();
		//Query q = s.createQuery("from Topic t where not exists (select m.id from Msg m where m.topic.id = t.id)");
		Query q = s.createQuery("from Topic t where t.id in (select t.id from Msg m where m.topic.id != t.id)");
		List<Topic> ts = (List<Topic>)q.list();
		for(Topic t : ts) {
			System.out.println(t.getId() + " " + t.getTitle());
		}
		s.getTransaction().commit();
	}
	
	@Test
	public void testHQL_29() {
		Session s = sf.getCurrentSession();
		s.beginTransaction();
		Query q = s.createQuery("update Topic t set t.title = upper(t.title)");
		q.executeUpdate();
		q = s.createQuery("from Topic");
		List<Topic> ts = (List<Topic>)q.list();
		for(Topic t : ts) {
			System.out.println(t.getId() + " " + t.getTitle());
		}
		s.createQuery("update Topic t set t.title = lower(t.title)" ).executeUpdate();
		s.getTransaction().commit();
	}
	
	@Test
	public void testHQL_30() {
		Session s = sf.getCurrentSession();
		s.beginTransaction();
		SQLQuery sq = s.createSQLQuery("select * from category limit 2,4").addEntity(Category.class);
		List<Category> cs = (List<Category>)sq.list();
		for(Category c : cs) {
			System.out.println(c.getId() + " " + c.getName());
		}
		s.getTransaction().commit();
	}
	
	@AfterClass
	public static void afterClass() {
		sf.close();
	}
}

分享到:
评论

相关推荐

    HQL简易介绍(DOC文档)

    HQL作为Hibernate的核心组成部分,不仅提供了与Criteria查询类似的面向对象封装,还具有更丰富的查询特性,使得复杂的查询操作变得简单易懂。 【HQL基本结构】 HQL查询语句主要包括以下几个部分: 1. `SELECT`:...

    精通HQL(word格式)

    总之,HQL作为Hibernate的重要组成部分,为开发者提供了强大且灵活的数据检索能力,使得在Java应用中操作数据库变得更加简单和直观。在实际开发中,掌握HQL的使用能极大地提升开发效率和代码质量。

    全面解析HQL语句 非常详细直接的HQL语句的功能介绍

    标题:“全面解析HQL语句 非常详细直接的HQL语句的功能介绍” 描述:“非常详细直接实用的HQL语句的功能介绍看过的人保准都说好” 本篇文章将深入探讨HQL(Hibernate Query Language)的核心功能及其在数据查询...

    精通HQL.doc

    - HQL的查询结果通常是一个对象列表,而不是简单的值列表。 - 虽然HQL与SQL相似,但并非所有SQL特性都适用于HQL,因为HQL是面向对象的,而非面向关系的。 - HQL可以和Criteria API结合使用,提供更强大的查询能力。 ...

    Spring中hql语句的常用方法

    ### Spring框架中HQL语句的使用方法 在学习Spring框架与Hibernate集成的过程中,掌握HQL(Hibernate Query Language)的使用方法是十分重要的。本文档将详细介绍如何在Spring环境中运用HQL进行数据查询操作,包括...

    HQL语言大全 高清晰可复制版

    例如,一个简单的HQL查询可能如下所示: ```sql FROM Employee e WHERE e.name = 'John' ``` 这条语句将返回所有名字为'John'的员工对象。 3. **HQL的查询类型** - **基本查询**:如上所示,从一个实体类中...

    HQL查询语言基础知识

    HQL 中的单表查询使用 FROM 语句,例如:FROM eg.Cat as cat,其中 cat 只是一个别名,为了用其他子语句的时候书写简单。 2.多表查询 HQL 中的多表查询使用 FROM 语句,例如:FROM eg.Cat as cat, eg.Dog as dog。...

    HQL批量插入、更新和删除

    2. **使用Session的缓存机制**:利用Hibernate的二级缓存功能来缓存待插入的数据,减少与数据库的交互次数,提高性能。 3. **清理Session缓存**:在完成一次批量插入后,及时清除Session中的缓存数据,释放内存资源...

    Hibernate-HQL.rar_HQL_hibernate hql

    2. 避免在HQL中使用SQL函数:尽量用Hibernate提供的函数,以确保跨数据库兼容性。 3. 优化查询性能:合理设计数据库索引,避免全表扫描,尽量减少JOIN操作。 总之,Hibernate-HQL是Java开发中处理数据库查询的重要...

    HQL查询及语法

    #### 二、HQL查询流程 在进行HQL查询时,通常遵循以下步骤: 1. **获取Hibernate Session对象**:首先,需要通过SessionFactory或当前线程获取Session对象,这是与数据库交互的主要接口。 2. **编写HQL语句**:...

    Hql详解[文].pdf

    - `auto_import`配置允许在Hql中使用类的简单名称,若设为`true`,则无需指定完整的包名。 2. **Hql查询操作** - **普通查询**:`FROM`后面跟类名,如`String hql="FROM User";` - **带过滤条件的查询**:`WHERE...

    HQL语句大全HQL语句大全

    #### 二、HQL的基本用法 1. **获取Hibernate Session** - 在执行任何HQL查询之前,首先需要通过`SessionFactory`获取一个`Session`实例。 ```java Session session = HibernateUtil.getSessionFactory()....

    Hibernate之HQL查询

    例如,假设我们有一个`Student`类,包含`name`和`age`属性,一个简单的HQL查询可能如下: ```sql SELECT s FROM Student s WHERE s.age &gt; 18 ``` 这个查询会返回所有年龄大于18岁的学生对象。 **2. HQL的SELECT...

    hibernateHQL关联查询

    #### 二、数据库表连接概述 在理解Hibernate HQL关联查询之前,我们需要先回顾一下数据库表连接的基本概念及其分类。数据库表连接主要分为以下几种: 1. **内连接(Inner Join)**:只返回两个表中满足连接条件的...

    HQL详解

    #### 二、HQL的大小写敏感性 HQL在处理关键字时并不区分大小写,这意味着`SELECT`、`SeLeCT`和`sELEct`被视为相同。然而,当涉及到Java类名和属性名时,则需要遵循Java的命名规则,即区分大小写。例如,`org....

    HQL语句详解Select/update/deletefromwhere...

    String hql = "from User user where (user.age % 2) = 1"; // 组合条件查询 String hql = "from User user where user.age = 20 and user.name like '%zx%'"; ``` #### 二、更新与删除 HQL支持数据的更新与删除...

    HQL的几钟常见写法

    这个简单的HQL语句用于查询`DesignActivity`表中的所有记录。这里的`DesignActivity`应该是指代一个实体类名,该类映射到名为`DesignActivity`的数据表。此查询返回所有`DesignActivity`实体的列表。 #### 2. 查询...

    hibernate hql大全

    在HQL中,你可以像SQL一样执行简单的查询,例如: ```java from Employee e ``` 这个查询会返回所有`Employee`实体的列表。 ### 2. **条件查询** HQL支持多种条件语句,如`WHERE`、`AND`、`OR`、`BETWEEN`、`IN`...

    Hibernate hql查询语法总结

    注意,执行`from Student, Course`这样的HQL会返回两个对象的笛卡尔积,而非简单的联合查询,通常在实际应用中很少使用。 3. 属性查询: HQL支持查询单个或多个属性。例如,查询所有学生的姓名和年龄: ```java // ...

Global site tag (gtag.js) - Google Analytics