HQL查询
1 hql:hibernate query language,hibernate提供一种查询语言,hql语言和普通sql很相似,区别:普通sql操作数据库表和字段,hql操作实体类和属性 2 常用的hql语句 (1)查询所有: from 实体类名称 (2)条件查询: from 实体类名称 where 属性名称=? (3)排序查询: from 实体类名称 order by 实体类属性名称 asc/desc 3 使用hql查询操作时候,使用Query对象 (1)创建Query对象,写hql语句 (2)调用query对象里面的方法得到结果 |
查询所有
1 查询所有客户记录 (1)创建Query对象,写hql语句 (2)调用query对象里面的方法得到结果 2 查询所有: from 实体类名称 具体: //演示查询所有 @Test public void testSelect1() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getSessionFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); //1 创建query对象 Query query = session.createQuery("from Customer"); //2 调用方法得到结果 List<Customer> list = query.list(); for (Customer customer : list) { System.out.println(customer.getCid()+"::"+customer.getCustName()); } tx.commit(); }catch(Exception e) { tx.rollback(); }finally { session.close(); sessionFactory.close(); } } |
条件查询
1 hql条件查询语句写法: (1) from 实体类名称 where 实体类属性名称=? and实体类属性名称=? from 实体类名称 where 实体类属性名称 like ? 2 代码 //1 创建query对象 //SELECT * FROM t_customer WHERE cid=? AND custName=? Query query = session.createQuery("from Customer c where c.cid=? and c.custName=?"); /** *2 设置条件值 * 向?里面设置值 * setParameter方法两个参数 * 第一个参数:int类型是?位置,?位置从零开始 * 第二个参数:具体参数值 */ //设置第一个?值 query.setParameter(0, 1); //设置第二个?值 query.setParameter(1, "小李"); //3 调用方法得到结果 List<Customer> list= query.list(); for(Customer customer : list) { System.out.println(customer.getCid() + ":" + customer.getCustName()); }
模糊查询 //1 创建query对象 //SELECT * FROM Customer c c.custName LIKE '%新浪%' Query query = session.createQuery("from Customer c where c.custName like ?"); //2 设置?的值 // %浪% query.setParameter(0, "%浪%"); //3 调用方法得到结果 List<Customer> list= query.list(); for (Customer customer : list) { System.out.println(customer.getCid() + ":"+ customer.getCustName()); } |
排序查询
1 hql排序语句写法 (1)from 实体类名称 order by 实体类属性名称 asc/desc //1 创建query对象 //SELECT * FROM t_customer ORDER BY cid ASC Query query = session.createQuery("from Customer c order by cid asc"); //2 调用方法得到结果 List<Customer> list= query.list(); for (Customer customer : list) { System.out.println(customer.getCid() + ":"+ customer.getCustName()); } |
分页查询
1 mysql实现分页 (1)使用关键字 limit实现 0表示从0开始,3表示每页显示3条记录 2 在hql中实现分页 (1)在hql操作中,在语句里面不能写limit,hibernate的Query对象封装两个方法实现分页操作 //1 创建query对象 //写查询所有的语句 Query query = session.createQuery("from Customer"); //2 设置分页数据 //2.1设置开始位置 query.setFirstResult(0); //2.2设置每页记录数 query.setMaxResults(3); //3 调用方法得到结果 List<Customer> list = query.list(); for (Customer customer : list) { System.out.println(customer.getCid() + ":"+ customer.getCustName()); } |
投影查询
1 投影查询:查询不是所有字段值,而是部分字段的值 2 投影查询hql语句写法: (1)select 实体类属性名称1, 实体类属性名称2 from 实体类名称 (2)select 后面不能写 * ,不支持的 3 具体实现 //1 创建query对象 Query query = session.createQuery("select custName from Customer"); //2 调用方法得到结果 List<Object> list = query.list(); for (Object object : list) { System.out.println(object); } |
聚集函数使用
1 常用的聚集函数 (1)count、sum、avg、max、min 2 hql聚集函数语句写法 (1)查询表记录数 - select count(*) from 实体类名称 //1 创建query对象 Query query = session.createQuery("select count(*) from Customer"); //2 调用方法得到结果 //query对象里面有方法,直接返回对象形式 Object obj = query.uniqueResult(); //返回int类型 // int count = (int) obj; //首先把object变成long类型,再变成int类型 Long lobj = (Long) obj; int count = lobj.intValue(); System.out.println(count); |