hibernate的多种查询方式(CH05)

使用HQL语句

hibernate支持的三种查询语句:HQL查询,Criteria查询即原生SQL(Native)查询

查询

两种方式执行插叙语句并获得查询语句: list(), iterate()方法
区别:

list()方法返回的是一条SQL查询语句,查询所有符合条件的记录, iterate 方法
首先查询所有符合条件的主键值,然后在需要某以对象的其他属性值时,才能生成主键查询的SQL语句,所有当查询出主键的内容是,会生成1+N条HQL语句

绑定参数

1.按参数位置绑定(?占位符)

Query query=session.cretaeQuery(“from Emp where job =? and salary>?”);
query.setstring(0,job);
query.setstring(1,salary);

2.按参数绑定

Query query=session.cretaeQuery(“from Emp where job = :empJob and salary >:empSalary”);
query.setstring("empJob",emoJob);
query.setDouble("empSalary",empSalary);

3.按对象绑定

	public List<Emp> findEmp(Emp emp) {
		String hql = "from Emp where job=:job and sal>:sal";
		Query query = currentSession().createQuery(hql);
		query.setProperties(emp);
		return query.list();
	}

4.动态查询

tx = empDao.currentSession().beginTransaction();
			StringBuilder hql = new StringBuilder("from Emp as emp where 1=1");
			if (emp.getJob() != null && emp.getJob().length() > 0) {
				hql.append(" and emp.job=:job");
			}
			if (emp.getSal() != 0) {
				hql.append(" and emp.sal>:sal");
			}
			if (null != emp.getHireDateStart()) {
				hql.append(" and emp.hireDate>:hireDateStart");
			}
			if (null != emp.getHireDateEnd()) {
				hql.append(" and emp.hireDate<:hireDateEnd");
			}
			emps = empDao.findByEmp(hql.toString(), emp);

5.使用uniqueResult()方法获取唯一值

public Long count(double sal) {
		String hql = "select count(id) from Emp where sal>=:sal";
		return (Long) currentSession().createQuery(hql).setDouble("sal", sal)
				.uniqueResult();
	}

注意:当查询结果不唯一,则不发生报错

分页

setFirstResult() 设置需要返回的第一条记录的位置
setMaxResults() 最大记录条数

public List<User> selectFenYe(int pageNo, int pageSize) {
		String hql = "select new User(name,telephone) from User";
		return currentSession().createQuery(hql)
				.setFirstResult((pageNo - 1) * pageSize)
				.setMaxResults(pageSize).list();
	}

投影

(1).返回一个结果集

public List<String> select() {
		String hql = "select deptnaem from User";
		return currentSession().createQuery(hql).list();
	}

(2)返回不止一个结果列

public List<Object[]> select() {
		String hql = "select deptno,deptname from User";
		return currentSession().createQuery(hql).list();
	}

(3)通过构造方法封装对象

public List<Dept> select() {
		String hql = "select new User(name,telephone) from User";
		return currentSession().createQuery(hql).list();
	}

猜你喜欢

转载自blog.csdn.net/qq_43051879/article/details/84393479
今日推荐