1.Query对象
通过写hql语句来对数据库进行crud操作,hql语句和普通sql语句很相似,区别在于hql语句操作的对象是实体类和属性,而sql操作的对象是数据库的表和字段。
演示例子:
结果:
2.Criteria对象
使用这个对象查询操作,但是使用这个对象时候,不需要写语句,直接调用方法实现
实现过程
(1)创建criteria对象
(2)调用对象里面的方法得到结果
//使用criteria对象 @Test public void testCriteria() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getSessionFactory(); session = sessionFactory.openSession(); //开启事务 tx = session.beginTransaction(); //1 创建criteria对象 //方法里面参数是实体类class Criteria criteria = session.createCriteria(User.class); /** * 作用:or()用法 * 说明:通过or()返回的是实体对象集合 * add(Criterion criterion)用来添加查询条件 * Restrictions通过内置的静态方法,可以创建criterion */ //2 调用方法得到结果 List<User> list = criteria.add(Restrictions.or(Restrictions.eq("username", "小明"), Restrictions.eq("username", "小红") )) .list(); for (User user : list) { System.out.println(user); } //提交事务 tx.commit(); }catch(Exception e) { e.printStackTrace(); //回滚事务 tx.rollback(); }finally { //关闭操作 session.close(); sessionFactory.close(); } }
常用的Restrictions方法:
Restrictions.eq 等于 Restrictions.allEq 使用Map,使用key/value进行多个等于的比对 Restrictions.gt 大于 > Restrictions.ge 大于等于 >= Restrictions.lt 小于 < Restrictions.le 小于等于 <= Restrictions.between 对应SQL的BETWEEN子句 Restrictions.like 对应SQL的LIKE子句 Restrictions.in 对应SQL的in子句 Restrictions.and and关系 Restrictions.or or关系
3.SQLQuery对象
调用底层sql实现
//使用SQLQuery对象 @Test public void testSQLQuery() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getSessionFactory(); session = sessionFactory.openSession(); //开启事务 tx = session.beginTransaction(); //1 创建对象 //参数普通sql语句 SQLQuery sqlQuery = session.createSQLQuery("select * from t_user"); //返回的list中每部分是对象形式 sqlQuery.addEntity(User.class); //调用sqlQuery里面的方法 List<User> list = sqlQuery.list(); for (User user : list) { System.out.println(user); } //提交事务 tx.commit(); }catch(Exception e) { e.printStackTrace(); //回滚事务 tx.rollback(); }finally { //关闭操作 session.close(); sessionFactory.close(); } }
结果: