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的查询,就学习到这里。

0 0
原创粉丝点击