hibernate之查询
Posted fjk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate之查询相关的知识,希望对你有一定的参考价值。
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(); }
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语句的控制,这样整个开发过程及其检索;
以上是关于hibernate之查询的主要内容,如果未能解决你的问题,请参考以下文章