hibernate高级查询分三种查询方式:
第一种,标准化对象查询
主要由四部分组成:Criteria、Critertion、Order、Projection
一般查询条件封装示例:
Criteria cri = session.createCriteria(Student.class);
Criterion cron = Restrictions.like("张三",name); //查询条件
cri.add(cron);
cri.addOrder(Order.asc("age")) //排序
List<Student> list = cri.list();
聚合:
Criteria cri = session.createCriteria(Student.class);
cri.setProjection(Projections.rowCount()); //聚合分组
cri.setProjection(Projections.groupProperty("name"));
List<Long> list = (List<Long>)cri.list();
离线查询:
DetachedCriteria dc = DetachedCriteria.forClass(Student.class)Criteria cri = dc.getExecutableCriteria(session);
List<Student> list = cri.list();
第二种,HQL语言查询(fetch一次查询查询出相关联的对象)
相关示例如下:
String sql = "select * from Student a ";
List<Student> list = session.createQuery(sql ).list();
String sql2 = "select * from Student a inner join a.score s with s.score = 100 ";
List<Student> list2 = session.createQuery(sql2).list();
fetch和with不能同时使用
第三种,原生Native sql查询:
一般查询相关示例如下:
String sql = "select * from t_bd_student s";
SQLQuery query = session.createSQLQuery(sql).addEntity(Student.class);
List<Student> list = query.list();
关联查询示例:
String sql = "select {a.*},{s.*} from t_bd_student s join t_bd_score c on s.studentId= c.studentId";
SQLQuery query = session.createSQLQuery(sql).addEntity("a",Student.class).addEntity("b",Score.class);
List list = query.list();
for(int i = 0 ;i<list.size();i++){Object[] obj = (Object[])list.get(i);
Student s = (Student)obj[0];
Score c = (Score)obj[1];
}
SQLQuery query = session.createSQLQuery("{call findStudents(:id)}").addEntity(Student.class);
query.setInteger("id",1);
List<Student> list = query.list();