hibernate学习(查询)
来源:互联网 发布:学知不足 教然后知困 编辑:程序博客网 时间:2024/06/04 01:06
数据查询是hibernate的一个亮点,hibernate为程序猿提供了多种的查询方式,分为以下三种:
1.hibernate语言查询,也就是我们今天需要说的hql查询,这种查询是完全面向对象的方式来查询,将查询语句封装为对象来进行操作。符合面向对象的思维来维护数据库。
2.hibernate标准化查询:(criteria query)将查询语句封装成对象进行操作。
3.原声sql查询:直接使用标准sql语言来进行查询。
hql查询所有
在学习hql查询之前,我先插入一些记录到userinfo表中:
//解析hibernate.cfg.xml文件Configuration cfg = new Configuration().configure();//创建SessionFactory(创建连接池)SessionFactory factory = cfg.buildSessionFactory();//创建sessionSession session = factory.openSession();Transaction transaction = session.beginTransaction();for (int i = 0; i < 80; i++) { UserInfo info = new UserInfo(); info.setUserName("test"+i); info.setUserPass(String.valueOf(Math.random()*1)); session.save(info);}transaction.commit();
这里我给userinfo表中一次性插入了80条记录。解下来使用hql查询所有的数据:
String hql = "from UserInfo";Query query = session.createQuery(hql);List<UserInfo>lists = query.list();for (UserInfo userInfo : lists) { System.out.println(userInfo.getUserName());}
这里,查询所有并没像sql中有”select *”那样,而是直接省略了该语句,其实hql和sql是一样的,只不过一切都是面向对象的查询,将需要查询的表名换成对应的实体类名称,将需要查询的字段换成对应实体类的属性,即可。
hql条件查询
1.查询id>10并且id<20的记录
String hql = "from UserInfo where userId > 10 and userId < 20 ";//或者String hql = "from UserInfo where userId between 10 and 20 ";
2.按照userId降序排列
String hql = "from UserInfo order by userId desc";
3.使用参数占位符查询
String hql = "from UserInfo where userId between ? and ? order by userId desc";Query query = session.createQuery(hql);query.setInteger(0, 30);query.setInteger(1,40);List<UserInfo>lists = query.list();
4.绑定有意义的参数占位符
String hql = "from UserInfo where userId between :begin and :end order by userId desc";Query query = session.createQuery(hql);query.setInteger("begin", 20);query.setInteger("end",40);List<UserInfo>lists = query.list();
5.查询userId值最大的记录
String hql = "select max(userId) from UserInfo";Query query = session.createQuery(hql);List<UserInfo>lists = query.list();Object result = query.uniqueResult();System.out.println(result);
可以看到由于这里只会查询出一条记录,所以使用query.uniqueResult();来查询。
6.hql分页查询
查询从第3条记录开始,间隔5条记录
String hql = "from UserInfo";Query query = session.createQuery(hql);query.setFirstResult(3);query.setMaxResults(5);List<UserInfo>lists = query.list();
7.只查询某些字段
String hql = "select new com.mydb.entity.UserInfo(userId,userPass) from UserInfo";Query query = session.createQuery(hql);List<UserInfo>lists = query.list();
这里需要注意就是由于这里使用了两个参数的构造函数,因此,需要在UserInfo实体类当中添加这两个参数的构造方法。
或者可以这样写:
String hql = "select userId,userPass from UserInfo";Query query = session.createQuery(hql);List lists = query.list();for (Object object : lists) { Object[]objects = (Object[]) object; System.out.println(objects[0]+"----++++"+objects[1]);}
sql查询
查询userinfo表中的所有数据
String sql = "select * from userinfo";SQLQuery sqlQuery = session.createSQLQuery(sql);sqlQuery.addEntity(UserInfo.class);List<UserInfo> lists = sqlQuery.list();for (UserInfo userInfo : lists) { System.out.println(userInfo.getUserName());}
说明一点:sqlQuery.addEntity(UserInfo.class);是添加hibernate查询以后从object转换到的类型。
好了,关于hibernate的查询,就学习到这里。
- Hibernate学习:Hibernate数据查询
- hibernate学习:级联查询
- Hibernate学习:查询缓存
- hibernate学习(查询)
- Hibernate学习之多表查询
- Hibernate学习笔记之查询
- hibernate框架学习---HQL查询
- Hibernate基本查询(学习笔记)
- Hibernate学习笔记 查询简介
- Hibernate学习之---条件查询
- Hibernate学习之---SQL查询
- Hibernate学习---单表查询
- hibernate学习教程-数据库查询
- Hibernate学习之HQL查询
- 【spring+hibernate学习文档】---中文参数查询
- Hibernate 3.2 学习笔记 查询和检索
- hibernate的QBC查询学习记录
- Hibernate学习笔记:Criteria条件查询
- 俄罗斯方块之IO流
- JavaWeb系列之九(jsp,javabean,el表达式)
- JavaWeb系列之十(jstl)
- 系统分区
- javaWeb系列之十一(数据库)
- hibernate学习(查询)
- 横眉冷对千夫指,论人生,论技术,论商业,论发展
- 连awk都不熟悉还搞什么Linux后台开发啊-----顺便分享一下与awk有关的笔试、面试经历
- 对常见的功能测试点的整合_Phoenix-晶
- JavaWeb系列之十二(jdbc)
- Android Studio分模块自动化构建实战
- 架构师速成5-小学
- JavaWeb系列之十三(jdbc事务与连接池)
- 对象与函数参数