hibernate的HQL查询
来源:互联网 发布:电视机网络机顶盒破解 编辑:程序博客网 时间:2024/05/02 00:31
hibernate中使用面向对象的查询语句HQL(hibernate query language)语句 :它的基本构成和MySQL的查询语句差不多,但是查询的是对象。查询基本语法结构如下 :
其实和sql的语法一模一样,FROM是必须的元素,下面举一个查询的例子:
数据源 :
对应的类 :
package com.cd.model;public class Student { private int id; private String name; private String sex; //无参数的构造方法 public Student() {} //带参数的构造方法1 public Student(String name, String sex) { this.name = name; this.sex = sex; } //带参数的构造方法2 public Student(int id, String name) { this.id = id; this.name = name; } //get/set方法}
如果是查询所有的数据,那么SELECT 不是必须的,只需要FROM子句就可以了,返回的仍然是Student对象:test类:
package com.cd.test;import com.cd.model.Book;import com.cd.model.Bookstore;import com.cd.model.Student;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;import org.junit.After;import org.junit.Before;import org.junit.Test;import java.util.ArrayList;import java.util.HashSet;import java.util.Iterator;import java.util.List;public class MainTest { private Session session; private SessionFactory sessionFactory; private Transaction transaction; @Before public void init() { Configuration configuration = new Configuration().configure(); ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()) .buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(registry); session = sessionFactory.openSession(); transaction = session.beginTransaction(); } @After public void end() { transaction.commit(); session.close(); sessionFactory.close(); } @Test public void test() { String hql = "FROM Student"; //查询所有的数据 Query query = session.createQuery(hql); List result = query.list(); //保存到list中 Iterator<Student> iterator = result.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next().getName()); } }}这里值得注意的是要区分大小写,因为查询的Student是一个类,这个和sql不一样。
如果不查询所有的列,那么返回的就不是Student对象了。
只查询一列的情况 :
@Test public void test() { String hql = "SELECT name FROM Student"; //只查询name Query query = session.createQuery(hql); List result = query.list(); Iterator<Object> iterator = result.iterator(); //返回的是Object集合 while (iterator.hasNext()) { System.out.println((String) iterator.next()); } }查询两列的情况:
@Test public void test() { String hql = "SELECT name,sex FROM Student"; Query query = session.createQuery(hql); List result = query.list(); Iterator<Object[]> iterator = result.iterator(); //返回的是Object[]集合 while (iterator.hasNext()) { Object[] attrs = iterator.next(); String name = (String) attrs[0]; System.out.println(name); } }对于这样的不是返回原对象而是返回Object[ ]的情况还有两种解决办法 :
a.如果Student有能用的构造函数(如果没有对应的构造函数,还要勉强要这样做的话会输出的是null):
@Test public void test() { String hql = "SELECT new Student (id,name) FROM Student"; Query query = session.createQuery(hql); List result = query.list(); Iterator<Student> iterator = result.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next().getName()); } }b.如果Student没有能用的构造函数,可以使用map集合:
@Test public void test() { String hql = "SELECT new map (id as id,name as name) FROM Student"; Query query = session.createQuery(hql); List result = query.list(); Iterator<Map> iterator = result.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next().get("name")); } }这里有两个点说明: new map 是小写;不写as会返回null.
下面是一个其他子句一起使用的例子,因为和mysql相似就不一一举例了:
@Test public void test() { String hql = " FROM Student WHERE id > 0 GROUP BY sex HAVING id < 4 ORDER BY id DESC"; Query query = session.createQuery(hql); List result = query.list(); Iterator<Student> iterator = result.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next().getName()); } }
0 0
- Hibernate的Hql查询
- hibernate的HQL查询
- Hibernate的HQL查询
- hibernate的hql查询
- Hibernate的HQL查询
- Hibernate的HQL查询
- hibernate的HQL查询
- Hibernate的HQL查询
- [Hibernate]Hibernate的HQL查询
- Hibernate的查询 HQL查询
- Hibernate HQL的子查询
- hibernate hql不支持的查询
- 关于Hibernate的HQL查询
- hibernate的HQL查询语言
- hibernate的hql查询语句
- Hibernate 的hql查询简介
- Hibernate的查询 HQL查询 查询某几列
- Hibernate的查询 HQL查询 查询某几列
- Android中EditText如何限制为手机号码
- Mysql字符串字段判断是否包含某个字符串的2种方法
- jzoj C组 2017.1.18 比赛
- TQ2440 网络烧写篇 TFTP
- Android 数据库—ORMlite 框架详情
- hibernate的HQL查询
- 在vps上搭建自己的vpn服务器
- 投影与三维视觉——本征矩阵和基础矩阵
- Ubuntu14.04安装GCC的方法
- 终极 Shell——Zsh
- SylixOS热插拔概述
- LNA噪声级联简介
- 中介者模式(Mediator)
- 博为峰JavaEE技术文章 ——MyBatis Mapper XML