hibernate的Query和Criteria

hibernate作为持久层框架目前虽然是市场的最优选择,但是其中的设计理念与思想还是需要学习的;

这里就我自己遇到的查询部分代码做个总结。

使用Query和Criteria和标准sql都在下边了

@Test
	public void testGetLimit() {
		Session session = sessionFactory.openSession();
		Transaction tx1 = null;
		try {
			tx1 = session.beginTransaction();
			
			/*1	Hql语句是hibernate独有的语句
			 * 更接近于面向对象的思维方式。 
			 * 查询得到对象集合
			 * */
			String hql = "from User where id>?";//User是对象不是表字段
			Query query = session.createQuery(hql);//
			query.setInteger(0, 3);//基0操作
			List list = query.list();    
//			分页操作
//			query.setFirstResult(起始位置);
//			query.setMaxResults(记录数量);
//			List list = query.list();   
			
			
			/*
			 * 2Criteria 完全是 面向对象的方式在进行数据查询,看不到有sql语句的痕迹
			 * */
			Criteria c = session.createCriteria(Product.class);
			String name = "iphon";
			c.add(Restrictions.like("name", "%"+name+"%"));
			c.setFirstResult(5);
			c.setMaxResults(10);
			List list1 = c.list();
			
			/*
			 * 3Hibernate依然保留了对标准SQL语句的支持,在一些场合,
			 * 比如多表联合查询,并且有分组统计函数的情况下,标准SQL语句依然是效率较高的一种选择
			 * 
			 * 得到的是Object[]数组每个数组对应一个对象信息
			 * */
			String sql = "select * from product_ p where p.id > 1";
	         
	        Query q= session.createSQLQuery(sql);
	        List list2= q.list();
	        for (Object[] os : list2) {
	            for (Object filed: os) {
	                System.out.print(filed+"\t");
	            }
	            System.out.println();
	        }
			
			tx1.commit();
		}catch(RuntimeException e) {
			tx1.rollback();
			throw e;
		} finally {
			session.close();
		}
	}
不完整,待续。。。。

你可能感兴趣的:(框架)