Hibernate的查询方式有五种:
- OID查询:session的get方法和load方法。一般查单个对象
- 级联查询
- HQL语句查询
- Criteria查询
- 调用本地(数据库)SQL查询
由于第一种OID查询不常用,这里就不多介绍了
级联查询:
在多对多关联映射中用的比较多
可以参照:http://blog.youkuaiyun.com/su1573/article/details/74615709
//先查出学生和老师,再进行增加
// Student stu = (Student)session.get(Student.class, 2);
// System.out.println("学生"+stu.getStuName()+";");
// Teacher tea = (Teacher)session.get(Teacher.class, 4);
// System.out.println("想加入"+tea.getTeaName()+"。");
// stu.getTealist().add(tea);
HQL语句查询:
hql语句查询主要四大类,其中第四类又分为两个小类
public static void main(String[] args) {
// TODO Auto-generated method stub
Configuration cfg = new Configuration().configure();
SessionFactory sf= cfg.buildSessionFactory(new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build());
Session session = sf.openSession();
session.beginTransaction();
String stuName="u";
String stuNameTwo = "%"+stuName+"%";
String stuGender="female";
//1,
// String stuName="su";
// String stuGender="male";
// //1,在hql语句中拼接检索条件
// String hql = "from Student s where stuName like '"+stuName+"' and stuGender like '"+stuGender+"'";
//2,在hql语句中设置"?占位符",由query对象按照占位符传参
// String hql = "from Student s where stuName like ? and stuGender = ?";
//3,在hql语句中设置"变量占位符",由query对象按照变量名传参
String hql = "from Student s where stuName like :stuName1 and stuGender = :stuGender1";
//4,在hql中设置普通对象"属性占位符",由query对象传递对象参数
// String hql = "from Student s where stuName like :stuName and stuGender = :stuGender";
//5,在hql中设置专值对象"属性占位符",由query对象传递对象参数,传递范围对象占位符参数,年龄范围区间
// String hql = "from Student s where stuName like :stuName and stuGender = :stuGender and stuAge >= :firstAge and stuAge <= :secondAge";
Query query = session.createQuery(hql);
//2,为?占位符传参
// query.setString(0, stuNameTwo);
// query.setString(1, stuGender);
//3,为变量占位符传参
query.setString("stuName1", stuNameTwo);
query.setString("stuGender1", stuGender);
//4,传递普通对象占位符参数
// Student one = new Student();
// one.setStuName(stuNameTwo);
// one.setStuGender(stuGender);
// query.setProperties(one);
//5,年龄范围区间,传递范围对象占位符参数
// StudentParam st = new StudentParam();
// st.setStuName(stuNameTwo);
// st.setStuGender(stuGender);
// st.setFirstAge(20);
// st.setSecondAge(25);
// query.setProperties(st);
List<Student> list = query.list();
for(Student stu:list){
System.out.println(stu.getStuName()+"\t"+stu.getStuGender());
}
session.getTransaction().commit();
}
Criteria查询:
Criteria查询概括起来的查询就是往add方法里面设值
public class TestCriteria {
public static void main(String[] args) {
// TODO Auto-generated method stub
Configuration cfg = new Configuration().configure();
SessionFactory sf= cfg.buildSessionFactory(new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build());
Session session = sf.openSession();
session.beginTransaction();
Criteria cri = session.createCriteria(Student.class);
// cri.add(Restrictions.like("stuGender", "%male%"));//like(),模糊查询;eq(),等值查询
cri.add(Restrictions.and
(Restrictions.like("stuGender", "%male%"),
Restrictions.eq("stuName", "su"), //and(, , , ,),多个条件查询
Restrictions.between("stuAge", 20,25))); //between(),查询值范围
List<Student> list = cri.list();
for(Student stu : list){
System.out.println(stu.getStuName());
}
session.getTransaction().commit();
}
}
调用本地SQL查询:
首先在数据库中写好sql语句然后再放到代码中,不然会容易出错
public class TestSQL {
public static void main(String[] args) {
// TODO Auto-generated method stub
Configuration cfg = new Configuration().configure();
SessionFactory sf= cfg.buildSessionFactory(new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build());
Session session = sf.openSession();
session.beginTransaction();
String sql = "select stu_id from stu_tab";
SQLQuery query = session.createSQLQuery(sql);
List<Object[]> list = query.list();
List<Student> stulist = new ArrayList<Student>();
for(Object[] obj : list){
Student stu = new Student();
stu.setStuId(new Integer(((Long)obj[0]).toString()));
}
session.getTransaction().commit();
}
}
到此Hibernate查询已介绍完
Author:su1573