Hibernate HQL 单表查询
2015-10-02 23:24
302 查看
hql语句分三种情况考虑:
单表;
一对多 & 多对多;
多表结合
需求:查询所有班级信息
结果:cname的值列表 description的值列表
=======================================================
需求:带属性的查询
上面两个查询的结论:带 select 的查询和不带select 的查询结果完全不同。
带select的:查出来的是“对象”;
不带 select 的:查出来的是“数组”。
========================================================
需求:希望在 List 中包含有 JavaBean 的形式的查询
在HQLDao.java 中
======================================================
需求:按条件查询班级,where id= ?
==========================================
需求:查询 cid=1,2,3 的班级
单表;
一对多 & 多对多;
多表结合
需求:查询所有班级信息
public class HQLDao extends HiberanteUtils{ /** * 单表 */ public List<Classes> queryAllClasses(){ Session session = sessionFactory.openSession(); List<Classes> cList = session.createQuery("from Classes").list(); //HQL 语句 session.close(); return cList; } // 工厂模式 public static HQLDao getInstance(){ return new HQLDao(); } }
结果:cname的值列表 description的值列表
=======================================================
需求:带属性的查询
public List queryClasses_Properties(){ Session session = sessionFactory.openSession(); List cList = session.createQuery("select cid, cname from Classes").list(); // 带属性cid, cname的查询 session.close(); return cList; }
上面两个查询的结论:带 select 的查询和不带select 的查询结果完全不同。
带select的:查出来的是“对象”;
不带 select 的:查出来的是“数组”。
========================================================
需求:希望在 List 中包含有 JavaBean 的形式的查询
在HQLDao.java 中
public List<Classes> queryClasses_Constructor(){ Session session = sessionFactory.openSession(); List<Classes> cList = session.createQuery("select new cn.google.hiberate.sh.domain.Classes(cname, description) from Classes").list(); session.close(); return cList; }必要条件: 在 Classes.java 中添加带参数的构造函数
public Classes(String cname, String description){ this.cname = cname; this.description = description; }
======================================================
需求:按条件查询班级,where id= ?
public Classes queryClasses_Condition(){ Session session = sessionFactory.openSession(); Query query = session.createQuery("select new cn.google.hiberate.sh.domain.Classes(cname,description) from Classes where cid=:cid"); query.setLong("cid", 1L); Classes classes = (Classes)query.uniqueResult(); //返回唯一的结果集 System.out.println(classes.getCname()); session.close(); return classes; }
==========================================
需求:查询 cid=1,2,3 的班级
public void queryClasses_SubSelect(){ Session session = sessionFactory.openSession(); List<Classes> cList = session.createQuery("from Classes where cid in(select cid from Classes where cid in(1,2,3))").list(); session.close(); }
相关文章推荐
- Android 调用继承application的类
- 把所有界面的状态栏字体颜色设置为白色--iOS开发系列---项目中成长的知识一
- [BZOJ2194]快速傅立叶之二
- noip2012 同余方程 (扩展欧几里得)
- [leetcode]Best Time to Buy and Sell Stock III
- 【C++】c++实现线性表、链表
- java io流系统介绍
- 2014西安F题
- HTTP内建Authentication机制分析
- 程序自动分析(prog)
- 【C++知识点】可重载与不可重载的操作符
- leetcode笔记:Trapping Rain Water
- 2015第40周五
- 正则表达式记录1
- noip2012 开车旅行 (倍增处理)
- 远程桌面无法复制粘贴
- 9.Python进阶_动态类型
- USACO 2.3 Zero Sum
- DirectX11 漫反射光
- java开发中JDBC连接数据库代码和步骤