hibernate_查询简介: 分页, 数据总数, 结果集的包装, 位置参数的设置
2017-09-21 09:51
671 查看
//使用原生sql 查询 employee 表中以"T"或"A"开头的数据 @Test public void testSql(){ Session session = HibernateUtil.getInstance().getSession(); NativeQuery query = session.createNativeQuery("SELECT * FROM EMPLOYEE WHERE name LIKE ? OR name LIKE ?"); query.setParameter(0, "T%"); query.setParameter(1, "A%"); List<Object> l = query.list(); for(Object o : l){ System.out.println(Arrays.toString((Object[])o)); } session.close(); } //使用hql 查询 employee 表中以"T"或"A"开头的数据 @Test public void testHql(){ Session session = HibernateUtil.getInstance().getSession(); List<Employee> l = session.createQuery("SELECT e FROM Employee e WHERE e.name LIKE ? OR e.name LIKE ?") .setParameter(0, "T%") .setParameter(1, "A%") .list(); for(Employee e : l){ System.out.println(e); } session.close(); } @Test public void testCri(){ Session session = HibernateUtil.getInstance().getSession(); List<Employee> l = session.createCriteria(Employee.class) .add(Restrictions.or( Restrictions.like("name", "T", MatchMode.START), Restrictions.like("name", "A", MatchMode.START))) .list(); for(Employee e : l){ System.out.println(e); } session.close(); } //分页 @Test public void testPage(){ int currentPage = 2;//第几页数据 int pageSize = 3;//每页多少条数据 Session session = HibernateUtil.getInstance().getSession(); //limit ?, ? List<Employee> l = session.createQuery("FROM Employee") .setFirstResult((currentPage-1)*pageSize) .setMaxResults(pageSize) .list(); for(Employee e : l){ System.out.println(e); } session.close(); } //查询总数 @Test public void testTotalCount(){ Session session = HibernateUtil.getInstance().getSession(); //select count(*) from employee // List l = session.createQuery("SELECT COUNT(e) FROM Employee e").list(); // System.out.println(l.get(0)); Long total = (Long) session.createQuery("SELECT COUNT(e) FROM Employee e").uniqueResult(); System.out.println(total); session.close(); } //查询所有员工的名字 @Test public void testResult(){ Session session = HibernateUtil.getInstance().getSession(); List<String> l = session.createQuery("SELECT e.name FROM Employee e").list(); System.out.println(l); session.close(); } //查询所有员工的id, 名字(返回Object[]集合) @Test public void testResult2(){ Session session = HibernateUtil.getInstance().getSession(); List<Object[]> l = session.createQuery("SELECT e.id,e.name FROM Employee e").list(); for(Object[] o : l){ System.out.println(Arrays.toString(o)); } session.close(); } //查询员工的所属部门(Department) @Test public void testResult3(){ Session session = HibernateUtil.getInstance().getSession(); List<Department> l = session.createQuery("SELECT e.dept FROM Employee e").list(); for(Department d : l){ System.out.println(d); } session.close(); } //查询员工所在部门的地址的街道 @Test public void testResult4(){ Session session = HibernateUtil.getInstance().getSession(); List<String> l = session.createQuery("SELECT e.dept.address.street FROM Employee e").list(); for(String s : l){ System.out.println(s); } session.close(); } /** * 结果集的包装 */ @Test public void testResult5(){ Session session = HibernateUtil.getInstance().getSession(); List<Object[]> l = session.createQuery("SELECT e.id,e.name,e.dept.id,e.dept.name FROM Employee e").list(); List<Object[]> l2 = session.createQuery("SELECT NEW LIST(e.id,e.name,e.dept.id,e.dept.name) FROM Employee e").list(); List<Object[]> l3 = session.createQuery("SELECT NEW MAP(e.id,e.name,e.dept.id,e.dept.name) FROM Employee e").list(); List<Object[]> l4 = session.createQuery("SELECT NEW MAP(e.id as eid,e.name as ename,e.dept.id as did,e.dept.name as dname) FROM Employee e").list(); //可以在xxx.hbm.xml 文件中为 cd.itcast.day4.extend.ResultValue 取别名,如下: //<import class="cd.itcast.day4.extend.ResultValue" rename="ResultValue"/> List<ResultValue> l5 = session.createQuery("SELECT NEW cd.itcast.day4.extend.ResultValue(e.id,e.name,e.dept.id,e.dept.name)").list(); session.close(); } /** * =============================== HQL 中的位置参数================ */ //使用位置参数查询名字首字母是"T"或"A"的员工 @Test public void testResult6(){ Session session = HibernateUtil.getInstance().getSession(); List<Employee> l = session.createQuery( "SELECT e FROM Employee e WHERE e.name LIKE :param1 OR e.name LIKE :param2") .setParameter("param1", "T%") .setParameter("param2", "A%") .list(); session.close(); } //查询所属部门为市场部和技术部的所有员工 @Test public void testResult7(){ Session session = HibernateUtil.getInstance().getSession(); List<Employee> l = session.createQuery( "SELECT e FROM Employee e WHERE e.dept.name in(:params)") .setParameterList("params", new String[]{"市场部", "技术部"}) .list(); session.close(); } //需求: 查询和某员工同一个部门的所有员工(不确定部门的主键是不是复合主键) //解决方案: 直接比较部门实体, 让hibernate 去拼接主键. @Test public void testResult8(){ Session session = HibernateUtil.getInstance().getSession(); Department d = session.get(Department.class, 1L); List<Employee> l = session .createQuery("SELECT e FROM Employee e WHERE e.dept = :param") .setParameter("param", d) .list(); session.close(); }
相关文章推荐
- hibernate_数据分页, 查询总数
- Hibernate(二)HQL&SQL参数绑定、投影和分页以及命名查询
- Hibernate(二)HQL&SQL参数绑定、投影和分页以及命名查询
- 基于Dapper的分页实现,支持筛选,排序,结果集总数,多表查询,非存储过程
- hibernate查询oracle中Date类型数据设置的一种方法
- MySQL中数据结果集分页功能的实现方法;数据库查询返回特定结果即分页查询
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- Hibernate的查询 HQL查询 参数,分页,分组
- jpa分页标签保存条件查询参数的设置
- Hibernate命名参数和Query的分页查询
- hibernate分组查询后,求分组总数的实现方法(管理系统分页)
- hibernate HQL查询参数设置
- hibernate 分页后,查询总数 使用hql和sql
- Hibernate 分页中,查询指定页面的数据
- Hibernate的查询 HQL查询 参数,分页,分组,占位符
- hibernate 查询两个时间段的数据和分页实现
- Mybatis 分页查询数据(借用map来封装参数)
- oracle分页查询从结果集取数据不稳定解决办法
- Hibernate查询数据的几种方式以及HQL用法及参数的几种使用方法
- Hibernate分页查询oracle数据库显示结果集与实际查询不匹配