7.6--SSH学习之Hibernate查询

本文详细介绍了Hibernate提供的五种查询方式,包括OID查询、级联查询、HQL语句查询、Criteria查询及调用本地SQL查询,并通过具体示例展示了如何使用这些查询方式。
Hibernate的查询方式有五种:
  1. OID查询:session的get方法和load方法。一般查单个对象
  2. 级联查询
  3. HQL语句查询
  4. Criteria查询
  5. 调用本地(数据库)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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ssy03092919

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值