Hibernate(3)-使用HQL语句进行数据查询

使用HQL语句进行数据查询

-熟练掌握HQL语句的查询
-掌握Criteria查询


为什么使用HQL语句?
因为session.get()或load方法只可以获取单个对象,不能获取结果集。

HQL Hibernate Query language 是官方推荐的标准查询语句,语句结构与标准的SQL相似,但使用面向对象的方式进行数据操作。

HQL语句是SQL与JavaBean的结合体,在HQL中使用数据表的映射类来进行编写。
使用HQL语句的步骤:(查询不可以创建事务)
        (1)创建session对象
        (2)编写HQL语句
        (3)创建Query对象
        (4)执行查询
   
   
  1. Configuration config = new Configuration().configure();
  2. SessionFactory factory = config.buildSessionFactory();
  3. Session session = factory.openSession();

(1)整表查询(from 类名的整表查询可以直接通过泛型获取该表映射的集合类)
    
    
  1. Query query = session.createQuery("from User");
  2. List<User> list = query.list();
  3. for(User u : list){
  4. System.out.println(u.getUserName());
  5. }
(2)查询指定属性 返回Object[]
    
    
  1. Query query = session.createQuery("select userId,userName,password,sex from User");
  2. //进行查询
  3. List<Object[]> list = query.list();
  4. for(Object[] array : list){
  5. System.out.println(array[0]+"\t"+array[1]+"\t"+array[2]+"\t"+array[3]);
  6. }

(3)根据条件查询
     
     
  1. Query query = session.createQuery("from User where userName='admin'");
  2. User user = (User) query.list().get(0);
  3. System.out.println(user.getPassword());

(4)使用占位符(HQL提供类似于PreparedStatement的参数注入方式进行数据查询
      
      
  1. Query query = session.createQuery("from User where userName=?");
  2. //注入参数,索引从0开始
  3. query.setString(0, "tom");
  4. User user = (User) query.list().get(0);
  5. System.out.println(user.getPassword());
(5)复杂的SQL语句执行
       
       
  1. Query query = session.createQuery("from Employee where dep.depId=(select depId from Department where depName=?) ");
  2. query.setString(0, "IT");
  3. List<Employee> list = (List<Employee>) query.list();
  4. for(Employee emp : list){
  5. System.out.println(emp.getFirstName()+"\t"+emp.getDep().getDepName());
  6. }

(6)分页查询
        
        
  1. //设置当前页数
  2. int page = 2;
  3. //设置每页的记录条数
  4. int count = 5;
  5. //设置每页的起始索引 第一页从0开始
  6. int index = count*(page-1);
  7. Query query = session.createQuery("from Employee");
  8. query.setFirstResult(index);
  9. query.setMaxResults(count);
  10. List<Employee> list = (List<Employee>) query.list();
  11. for(Employee emp : list){
  12. System.out.println(emp.getEmpId()+"\t"+emp.getFirstName());
  13. }


(7)查询单行单列数据
         
         
  1. Query query = session.createQuery("select count(*) from Employee");
  2. Long count = (Long) query.uniqueResult();
  3. System.out.println(count);

(8)表连接查询(当为表起别名后,在访问属性时必须要前缀别名)
          
          
  1. Query query = session.createQuery("select emp.firstName,dep.depName from Employee as emp,Department as dep where emp.dep.depId=dep.depId");
  2. List<Object[]> list = query.list();
  3. for(Object[] array : list){
  4. System.out.println(array[0]+"\t"+array[1]);
  5. }


criteria
Criteria是Hibernate标准的对象查询方式,操作的方式更类似于JAVA对象的操作。
(1)创建Criteria(2) 添加查询的规则(3) 执行查询
           
           
  1. Criteria criteria = session.createCriteria(Employee.class);
  2. criteria.add(Restrictions.eq("firstName", "Steven"));
  3. List<Employee> list = criteria.list();
  4. for(Employee emp : list){
  5. System.out.println(emp.getEmpId()+"\t"+emp.getFirstName());
  6. }












  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值