Hibernate 框架总结(五):查询

Hibernate 框架总结(一):简单开发

Hibernate 框架总结(二):session的获取方式及hibernate对象的生命周期

Hibernate 框架总结(三):主键的生成策略

Hibernate 框架总结(四):多张表的关联映射

Hibernate 框架总结(六):缓存机制

前面几节学到了通过get和load 方式查询,不过那只能够通过主键来查询。

Hibernate对数据库查询的三种方式:

1.criteria查询

Hibernate 框架总结(五):查询_第1张图片

先录入几条数据,进行查询

package sdibt.fly.dao;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import sdibt.fly.entity.Student;
import sdibt.fly.util.HibernateUtils;
public class UserDao {
	public static void main(String[] args) {	
		//从util中拿到session
		Session session = HibernateUtils.getSession();
		//获取Student表中的数据
		Criteria c = session.createCriteria(Student.class);
		//添加查询条件,通过Restrictions类来添加条件
		//查询大于18岁的学生
		c.add(Restrictions.gt("age", 18));
		
		//将查询到的数据存放在list集合当中
		List list = c.list();
		//循环遍历集合,拿到数据
		for (Student student : list) {
			System.out.println(student.getStuName());
		}		
		//关闭资源
		HibernateUtils.closeSession(session);
	}
}

查询到的结果

Hibernate 框架总结(五):查询_第2张图片

可以添加多个add方法来过滤条件,Restrictions过滤条件:

Hibernate 框架总结(五):查询_第3张图片

分页条件:查询第6到10条数据,

c.setFirstResult(5);设置从第几条数据开始查询,下标从0开始

c.setMaxResults(5);共查询几条数据

2.hql查询

类似sql,不过sql是通过表来查询,hql是通过实体类来查询

//从util中拿到session
		Session session = HibernateUtils.getSession();
		//获取Student表中的数据
		Query q = session.createQuery("form Student");
		
		//将查询到的数据存放在list集合当中
		List list = q.list();

可以在后面添加where字句

Query q = session.createQuery("from Student where age>18");

如果要查询部分列,那么查询到的集合的泛型是object[],数组中存储的每一行的数据,比如list集合中的第一个元素,存放的就是查询到的第一行的元素,

Hibernate 框架总结(五):查询_第4张图片

关联查询:查询' 计算机' 班的学生姓名

因为classes是Student类的属性,这里就直接引用,和其他类没法使用该方法

//获取Student表中的数据
		Query q = session.createQuery("select s.stuName,s.age from Student s where s.classes.clsName='计算机'");
		
		//将查询到的数据存放在list集合当中
		List list = q.list();
		
		//循环遍历集合,拿到数据
		for (Object[] obj : list) {
			System.out.println(obj[0]);
		}	

为防止sql注入,可以使用?代替参数

Query q = session.createQuery("select s.stuName,s.age from Student s where s.classes.clsName=?");
		q.setParameter(0, "计算机");
		//将查询到的数据存放在list集合当中
		List list = q.list();

同样的,hql也可以用来增删改

删除姓名是'zhangsan'的学生,进行增删改的操作要开启事务

//获取Student表中的数据
		Query q = session.createQuery("delete from Student where stuName=?");
		q.setParameter(0, "zhangsan");
		//开启事务
		Transaction tx = session.beginTransaction();
		//进行删除操作
		q.executeUpdate();
		//提交事务
		tx.commit();

3.sql查询

sql就比较熟悉了,直接对表进行查询

查询到的数据会是object[]泛型的list集合,如果确定查找的是一个完整的列并且是一个表中的数据,就可以将查询到的数据转换成实体类

//获取Student表中的数据
		SQLQuery sq = session.createSQLQuery("select * from tb_student");
		//查询到的数据变成实体对象
		sq.addEntity(Student.class);
		List list = sq.list();
		
		for (Student student : list) {
			System.out.println(student.getStuName());
		}



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