Query对象

    方便的对数据库和持久化对象进行查询,两种表达方式:HQL和SQL;

    Query经常用来绑定查询参数,限制查询条数。并最终执行查询语句。

HQL

查询一个简单类(查询所有)

	@Test //修改方法
public void test3(){
Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
// 操作
Query query = session.createQuery("from User");
List list = query.list();
System.out.println(list);
//不需要关闭Configuration 因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
//configuration相当于连接池
session.close();
}

 分页查询

		@Test //修改方法
public void test3(){
Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
// 操作
Query query = session.createQuery("from User");
query.setFirstResult(0);//设置开始的位置
query.setMaxResults(10);//设置查询多少条
List list = query.list();
for (Object object : list) {
System.out.println(object);
}
//不需要关闭Configuration 因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
//configuration相当于连接池
session.close();
}

 查看指定列

          @Test //查询指定列
public void test4(){
Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
// 操作
//查询指定列时,必须在javabean中提供该字段的构造方法 其他列为空
Query query = session.createQuery("select new User(username,password) from User");
List<User> list = query.list();
for (User u : list) {
System.out.println(u);
}
//不需要关闭Configuration 因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
//configuration相当于连接池
session.close();
}

条件查询

	@Test //条件查询(无名称参数)
public void test5(){
Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
// 操作
//查询指定列时,必须在javabean中提供默认的构造方法(无参构造)
//因为有参会替换无参 然而在条件查询时会调用无参构造
/*条件查询(无名称参数)
* Query query = session.createQuery("from User where username=?");
query.setParameter(0, "zhangsan111");*/
//条件查询(有名称参数)
Query query = session.createQuery("from User where username=:myusername");
query.setParameter("myusername", "zhangsan111");
User user = (User) query.uniqueResult();
System.out.println(user);
//不需要关闭Configuration 因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
//configuration相当于连接池
session.close();
}

 命名查询

在customer.hbm.xml中class标签外定义一个<query>标签

 <query name="select1">
from Customer where id=?
</query>

  测试方法

        @Test	//测试命名查询
public void test03(){
Session session = HibernateUtils.getSession();
Transaction bt = session.beginTransaction();
Query qy = session.getNamedQuery("select1");
qy.setParameter(0, 1);//添加参数
Customer ct = (Customer) qy.uniqueResult();
System.out.println(ct.getId());
//操作
bt.commit();
session.close();
}

  

 SQL

  查询所有

          @Test //sql查询
public void test6(){
Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
// 操作
SQLQuery query = session.createSQLQuery("select * from user"); List<Object[]> list = query.list();
for (Object object : list) {
//打印地址值
System.out.println(object);
}
/*object对象指向User类
* query.addEntity(User.class);
List<User> list = query.list();
for (User user : list) {
System.out.println(user);
}*/
//不需要关闭Configuration 因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
//configuration相当于连接池
session.close();
}

  条件查询

          @Test //sql条件查询()
public void test7(){
Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
// 操作
SQLQuery query = session.createSQLQuery("select * from user where username=?");
query.setParameter(0, "zhangsan111");
//object对象指向User类
query.addEntity(User.class);
User user = (User) query.uniqueResult();//转换时还是会让Query对象识别到User这个类
System.out.println(user);
//不需要关闭Configuration 因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
//configuration相当于连接池
session.close();
}

Criteria对象

查询所有

          @Test //Criteria查询全部
public void test8(){
Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
// 操作
Criteria criteria = session.createCriteria(User.class);
List list = criteria.list();
for (Object object : list) {
System.out.println(object);
}
//不需要关闭Configuration 因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
//configuration相当于连接池
session.close();
}

  单条件查询/多条件查询

          @Test //Criteria条件查询查询
public void test9(){
Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
// 操作
Criteria criteria = session.createCriteria(User.class);
               //条件1
criteria.add(Restrictions.eq("username", "zhangsan111"));
               //条件2
               criteria.add(Restrictions.eq("username","zhangsan111"));
List list = criteria.list();
for (Object object : list) {
System.out.println(object);
}
//不需要关闭Configuration 因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
//configuration相当于连接池
session.close();
}

  条件或

@Test //Criteria条件查询查询or
public void test10(){
Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
// 操作
Criteria criteria = session.createCriteria(User.class);
//条件1
criteria.add(Restrictions.or(Restrictions.eq("username", "zhangsan111"),Restrictions.eq("username", "fanjiankang"))); List list = criteria.list();
for (Object object : list) {
System.out.println(object);
}
//不需要关闭Configuration 因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
//configuration相当于连接池
session.close();
}

  Cariteria只是对于criteria的方法进行对于sql语句的控制,这样整个开发过程及其检索;

使用离线查询

@Test	//测试离线查询
public void test04(){
DetachedCriteria dc=DetachedCriteria.forClass(Order.class);
dc.add(Restrictions.between("id", 10, 20));
Session session = HibernateUtils.getSession();
Transaction bt = session.beginTransaction();
Criteria criteria = dc.getExecutableCriteria(session);
List list = criteria.list();
System.out.println(list);
bt.commit();
session.close();
}

  多表关联查询

    交叉连接

    内连接

      显式内连接  inner join with(where) 

       @Test	//测试显式连接查询
public void test05(){
Session session = HibernateUtils.getSession();
Transaction bt = session.beginTransaction();
          // 表一 inner join 表二
String hql="from Customer c inner join c.orders";//"from Customer c inner join c.orders with c.id=1"
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
for (Object[] objects : list) {
for (Object obj : objects) {
System.out.println(obj);
}
}
//操作
bt.commit();
session.close();
}

      隐式内连接

          隐式内连接: 使用 "逗号"将表分开,使用 WHERE 来消除迪卡尔积

	@Test	//测试隐式内连接查询
public void test06(){
Session session = HibernateUtils.getSession();
Transaction bt = session.beginTransaction();
String hql="from Order o where o.c.id=1";
Query query = session.createQuery(hql);
List<Order> list = query.list();
for (Order o : list) {
System.out.println(o);
}
//操作
bt.commit();
session.close();
}

      迫切连接

迫切内连接得到的结果是直接封装到 PO 类中,而内连接得到的是 Object[]数组,数组中封
装的是 PO 类对象。
@Test //测试迫切内连接查询
public void test08(){
Session session = HibernateUtils.getSession();
Transaction bt = session.beginTransaction();
String hql="from Order o inner join fetch o.c";
Query query = session.createQuery(hql);
List<Order> list = query.list();
for (Order o : list) {
System.out.println(o);
}
//操作
bt.commit();
session.close();
}

    外连接

      左外连接

        @Test	//测试左外连接查询
public void test09(){
Session session = HibernateUtils.getSession();
Transaction bt = session.beginTransaction();
String hql="from Customer c left outer join c.orders";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
for (Object[] objects : list) {
for (Object obj : objects) {
System.out.println(obj);
}
}
//操作
bt.commit();
session.close();
}

      迫切左外连接

        @Test	//测试左迫切外连接查询
public void test10(){
Session session = HibernateUtils.getSession();
Transaction bt = session.beginTransaction();
String hql="from Order o left outer join fetch o.c ";
Query query = session.createQuery(hql);
List<Order> list = query.list();
for (Order o : list) {
System.out.println(o);
}
//操作
bt.commit();
session.close();
}

      右外连接

	@Test	//测试左外连接查询
public void test11(){
Session session = HibernateUtils.getSession();
Transaction bt = session.beginTransaction();
String hql="from Customer c right outer join c.orders";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
for (Object[] objects : list) {
for (Object obj : objects) {
System.out.println(obj);
}
}
//操作
bt.commit();
session.close();
}

  

hibernate之查询的更多相关文章

  1. hibernate模糊查询

    hibernate模糊查询-Restrictions.ilike & Expression.like Criteria criteria = session.createCriteria(Ta ...

  2. Hibernate的查询方式总结

    Hibernate的查询方式大体有三种,分别是HQL QBC和SQL三种.在网上查阅一一些资料,做了一个简单的总结. 1. SQL sql 是面向数据库表查询,from 后面跟的是表名,where 后 ...

  3. atitit。 hb Hibernate sql 查询使用

    atitit. hb  Hibernate sql 查询使用 #----------返回list<map>法..这个推荐使用.      q.setResultTransformer(Tr ...

  4. Hibernate高级查询QBC条件设置——Restrictions用法 引自:http://www.cnblogs.com/evon168/archive/2010/10/29/1863059.html

    方法说明 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge ...

  5. Hibernate HQL查询:

    Hibernate HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查 ...

  6. Hibernate HQL查询语句总结

    Hibernate HQL查询语句总结 1. 实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql="from User user ";L ...

  7. Hibernate的查询,二级缓存,连接池

    Hibernate的查询,二级缓存,连接池 1.Hibernate查询数据 Hibernate中的查询方法有5中: 1.1.Get/Load主键查询 使用get或者load方法来查询,两者之间的区别在 ...

  8. hibernate sql查询转换成VO返回list

    hibernate sql查询转换成VO @Override public List<FenxiVo> getTuanDuiFenxiList(FenxiVo FenxiVo,Intege ...

  9. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  10. Hibernate【查询、连接池、逆向工程】

    前言 在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式....到目前为止,我们都是使用一些简单的主键查询阿...使用HQL查询所有的数据....本博文主要讲解Hiberna ...

随机推荐

  1. sql backup

    create or replace procedure P_updateasbegin update security_price p set p.closing_price = (select MI ...

  2. 梦殇 chapter one

    梦殇 chapter one 星梦 天空中飘着几片云,喝着小鸟的欢呼声,这一切似乎显得愈加可爱了. 不觉间已经到了2013年,错过的12年,似乎在向我们招手,不知道远方的朋友们,你们还好吗? 是否也会 ...

  3. 主机在无线网络的情况下,设置centos7.2虚拟机网络联通

    1.vmvare中,编辑-虚拟网络编辑器 2.虚拟机设置 3.进入linux登录后 输入nmtui 4激活连接 5大功告成,输入ping www.baidu.com  发现ping通了

  4. 在iOS 8及以后使用UIAlertController 等各种弹出警告通知

    原文转自:在iOS 8中使用UIAlertController 感谢作者分享,自我学习之用 iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UI ...

  5. Java的OOP三大特征之一——多态

    OOP(面对对象)三大特征之一——多态 What:多态性是指允许不同类的对象对同一消息作出响应,多态性包括参数化多态性和包含多态性,多态性语言具有灵活.抽象.行为共享.代码共享的优势,很好的解决了应用 ...

  6. Unix和Windows文件格式转化

    可能的原因有: 1)执行权限的问题 解决方法: chmod +x ***.py 2)python版本的问题 解决方法:在执行时或者在py文件中选择好对应的Python的版本 3)python文件格式的 ...

  7. Spring相关知识点

    1.注解@qualifier 只能注在属性上 作用:当一个接口有多个实现类时,用Autowired装配时,因为Autowired是按类型装配的(Resource按名称),所以多个实现类会出现冲突,这是 ...

  8. spring 的 ApplicationContext.getBean(type) 无法获取bean,报错

    具体问题请看   https://q.cnblogs.com/q/108101/ 研究了两天: 经过上文中的排除法: 造成问题的原因是要获取的bean 中 有被切入的方法.. 就是可能该类会使用反射生 ...

  9. Ubuntu下Tomcat绑定80端口(zz)

    Ubuntu下Tomcat绑定80端口 来源:本站转载 作者:佚名 时间:2011-02-22 TAG: 工作环境迁移到了Ubuntu,很多东西发生了变化,比如原先配置tomcat端口.只需要配置se ...

  10. Android——编译release版签名系统

    http://blog.csdn.net/jscese/article/details/24243171 在我的第一篇博客里面http://blog.csdn.net/jscese/article/d ...