当前位置: 首页 > news >正文

Hibernate学习10——Hibernate 查询方式

本章主要是以查询Student的例子:

Student.java:

package com.cy.model;

public class Student {
    private int id;
    private String name;
    private int age;
    
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
    
    
    
}
View Code

Student.hbm.xml:

<hibernate-mapping package="com.cy.model">

    <class name="Student" table="t_student">
        <id name="id" column="stuId">
            <generator class="native"></generator>
        </id>
        <property name="name" column="stuName"></property>
        <property name="age" column="stuAge"></property>
    </class>

</hibernate-mapping>
View Code

数据库中student数据:

 

第一节:Hibernate 查询方式简介                                    

导航对象图是说from Student s where s.name = xxx and s.age = xxx这样可以对象.属性这样子;
OID查询方式:比如Session.get(Student.class, 1);根据ID查询这样子;
 
 
第二节:本地SQL 查询方式                                  
/**
     * 本地sql查询,不带参数
     */
    @Test
    public void testSQLQuery(){
        String sql = "select * from t_student";
        Query query = session.createSQLQuery(sql).addEntity(Student.class);    //查询student,绑定Student实体
        List<Student> studentList = query.list();
        for(Student s: studentList){
            System.out.println(s);
        }
        
        /**
         *  Hibernate: select * from t_student
            Student [id=1, name=张三, age=10]
            Student [id=2, name=李四, age=15]
            Student [id=3, name=王五, age=13]
         */
    }

    /**
     * 本地sql查询,带参数
     * 查询姓名张开头,且10岁
     */
    @Test
    public void testSQLQuery2(){
        String sql = "select * from t_student where stuName like :stuName and stuAge = :stuAge";
        Query query = session.createSQLQuery(sql).addEntity(Student.class);    //查询student,绑定Student实体
        query.setString("stuName", "张%");
        query.setInteger("stuAge", 10);
        List<Student> studentList = query.list();
        for(Student s: studentList){
            System.out.println(s);
        }
        
        /*
         *  Hibernate: select * from t_student where stuName like ? and stuAge = ?
            Student [id=1, name=张三, age=10]
         */
    }
View Code

 

第三节:HQL 查询方式                                        

package com.cy.service;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.cy.model.Student;
import com.cy.util.HibernateUtil;

public class StudentTest {

    private SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
    private Session session;
    
    @Before
    public void setUp() throws Exception {
        session=sessionFactory.openSession(); 
        session.beginTransaction();
    }

    @After
    public void tearDown() throws Exception {
         session.getTransaction().commit();
         session.close();
    }
    
    /**
     * 本地sql查询,不带参数
     */
    @Test
    public void testSQLQuery(){
        String sql = "select * from t_student";
        Query query = session.createSQLQuery(sql).addEntity(Student.class);    //查询student,绑定Student实体
        List<Student> studentList = query.list();
        for(Student s: studentList){
            System.out.println(s);
        }
        
        /**
         *  Hibernate: select * from t_student
            Student [id=1, name=张三, age=10]
            Student [id=2, name=李四, age=15]
            Student [id=3, name=王五, age=13]
         */
    }

    /**
     * 本地sql查询,带参数
     * 查询姓名张开头,且10岁
     */
    @Test
    public void testSQLQuery2(){
        String sql = "select * from t_student where stuName like :stuName and stuAge = :stuAge";
        Query query = session.createSQLQuery(sql).addEntity(Student.class);    //查询student,绑定Student实体
        query.setString("stuName", "张%");
        query.setInteger("stuAge", 10);
        List<Student> studentList = query.list();
        for(Student s: studentList){
            System.out.println(s);
        }
        
        /*
         *  Hibernate: select * from t_student where stuName like ? and stuAge = ?
            Student [id=1, name=张三, age=10]
         */
    }
    
    
    /**
     * HQL查询
     */
    @Test
    public void testHQLQuery(){
        String hql = "from Student";
        Query query = session.createQuery(hql);
        List<Student> studentList = query.list();
        for(Student s : studentList){
            System.out.println(s);
        }
        
        /*
         *  Hibernate: select student0_.stuId as stuId1_0_, student0_.stuName as stuName2_0_, student0_.stuAge as stuAge3_0_ from t_student student0_
            Student [id=1, name=张三, age=10]
            Student [id=2, name=李四, age=15]
            Student [id=3, name=王五, age=13]
         */
    }
    
    /**
     * HQL 带条件查询
     */
    @Test
    public void testHQLQuery2(){
        String hql = "from Student where name like :stuName and age = :stuAge ";
        Query query = session.createQuery(hql);
        query.setString("stuName", "张%");
        query.setInteger("stuAge", 10);
        List<Student> studentList = query.list();
        for(Student s : studentList){
            System.out.println(s);
        }
        
        /*
         *  Hibernate: select student0_.stuId as stuId1_0_, student0_.stuName as stuName2_0_, student0_.stuAge as stuAge3_0_ from t_student student0_ where (student0_.stuName like ?) and student0_.stuAge=?
            Student [id=1, name=张三, age=10]
         */
    }
    
    /**
     * HQL 使用别名
     * from Student as s 
     * 或者
     * from Student s
     */
    @Test
    public void testHQLQuery3(){
        String hql="from Student as s where s.name like :stuName and s.age=:stuAge";
        Query query=session.createQuery(hql);
        query.setString("stuName", "张%");
        query.setInteger("stuAge", 10);
        List<Student> studentList= query.list();
        for(Student s : studentList){
            System.out.println(s);
        }
    }
    
    /**
     * HQL查询 对结果排序
     * 按照年龄降序排列
     */
    @Test
    public void testHQLQuery4(){
        String hql = "from Student order by age desc";
        Query query = session.createQuery(hql);
        List<Student> studentList = query.list();
        for(Student s : studentList){
            System.out.println(s);
        }
        
        /*
         *  Hibernate: select student0_.stuId as stuId1_0_, student0_.stuName as stuName2_0_, student0_.stuAge as stuAge3_0_ from t_student student0_ order by student0_.stuAge desc
            Student [id=2, name=李四, age=15]
            Student [id=3, name=王五, age=13]
            Student [id=1, name=张三, age=10]
         */
    }
    
    /**
     * HQL查询  分页查询
     */
    @Test
    public void testHQLQuery5(){
        String hql="from Student";
        Query query=session.createQuery(hql);
        //第1条记录开始,取2条;
        query.setFirstResult(1);        
        query.setMaxResults(2);            
        List<Student> studentList = query.list();
        for(Student s : studentList){
            System.out.println(s);
        }
        
        /*
         *  Hibernate: select student0_.stuId as stuId1_0_, student0_.stuName as stuName2_0_, student0_.stuAge as stuAge3_0_ from t_student student0_ limit ?, ?
            Student [id=2, name=李四, age=15]
            Student [id=3, name=王五, age=13]
         */
    }
    
    /**
     * HQL查询  查询单个对象
     * 查询出一条记录,完全能确定是一条记录,这里就不是list了,uniqueResult
     * 比如查询总记录数,就可以用uniqueResult
     */
    @Test
    public void testHQLQuery6() {
        String hql="from Student";
        Query query=session.createQuery(hql);
        query.setFirstResult(1);
        query.setMaxResults(1);
        Student s = (Student) query.uniqueResult();
        System.out.println(s);    
        
        /*
         *  Hibernate: select student0_.stuId as stuId1_0_, student0_.stuName as stuName2_0_, student0_.stuAge as stuAge3_0_ from t_student student0_ limit ?, ?
            Student [id=2, name=李四, age=15]
         */
    }
    
    /**
     * HQL  链式写法
     */
    @SuppressWarnings("unchecked")
    @Test
    public void testHQLQuery7() {
        String hql = "from Student s where s.name like :stuName and s.age = :stuAge";
        List<Student> studentList = session.createQuery(hql)
                                           .setString("stuName", "李%")
                                           .setInteger("stuAge", 15)
                                           .list();
        for(Student s : studentList){
            System.out.println(s);
        }
        
        /*
         * Student [id=2, name=李四, age=15]
         */
    }
    
    
}
View Code

 

第四节:QBC 查询方式                                              

package com.cy.service;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.cy.model.Student;
import com.cy.util.HibernateUtil;

public class StudentTest {

    private SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
    private Session session;
    
    @Before
    public void setUp() throws Exception {
        session=sessionFactory.openSession(); 
        session.beginTransaction();
    }

    @After
    public void tearDown() throws Exception {
         session.getTransaction().commit();
         session.close();
    }
    
    
    
    /**
     * QBC查询
     */
    @Test
    public void testQBCQuery(){
        Criteria criteria = session.createCriteria(Student.class);
        List<Student> stuList = criteria.list();
        for(Student s : stuList){
            System.out.println(s);
        }
        
        /*
         *  Hibernate: select this_.stuId as stuId1_0_0_, this_.stuName as stuName2_0_0_, this_.stuAge as stuAge3_0_0_ from t_student this_
            Student [id=1, name=张三, age=10]
            Student [id=2, name=李四, age=15]
            Student [id=3, name=王五, age=13]
         */
    }
    
    /**
     * QBC 带条件查询
     */
    @Test
    public void testQBCQuery2(){
        Criteria criteria = session.createCriteria(Student.class);
        Criterion c1 = Restrictions.like("name", "李%");
        Criterion c2 = Restrictions.eq("age", 15);
        criteria.add(c1);
        criteria.add(c2);
        List<Student> stuList = criteria.list();
        for(Student s : stuList){
            System.out.println(s);
        }
        /*
         *  Hibernate: select this_.stuId as stuId1_0_0_, this_.stuName as stuName2_0_0_, this_.stuAge as stuAge3_0_0_ from t_student this_ where this_.stuName like ? and this_.stuAge=?
            Student [id=2, name=李四, age=15]
         */
    }
    
    /**
     * QBC 对结果排序
     */
    @Test
    public void testQBCQuery3(){
        Criteria criteria = session.createCriteria(Student.class);
        criteria.addOrder(Order.desc("age"));
        List<Student> stuList = criteria.list();
        for(Student s : stuList){
            System.out.println(s);
        }
        
        /*
         *  Student [id=2, name=李四, age=15]
            Student [id=3, name=王五, age=13]
            Student [id=1, name=张三, age=10]
         */
    }
    
    /**
     * QBC 分页查询
     */
    @Test
    public void testQBCQuery4(){
        Criteria criteria = session.createCriteria(Student.class);
        criteria.setFirstResult(0);    //从第0条记录开始
        criteria.setMaxResults(2);    //查询2条
        List<Student> stuList = criteria.list();
        for(Student s : stuList){
            System.out.println(s);
        }
        
        /*
         *  Hibernate: select this_.stuId as stuId1_0_0_, this_.stuName as stuName2_0_0_, this_.stuAge as stuAge3_0_0_ from t_student this_ limit ?
            Student [id=1, name=张三, age=10]
            Student [id=2, name=李四, age=15]
         */
    }
    
    /**
     * QBC 查询单个对象
     * 因为这里只取一条记录,uniqueResult
     */
    @Test
    public void testQBCQuery5(){
        Criteria criteria = session.createCriteria(Student.class);
        criteria.setFirstResult(2);    
        criteria.setMaxResults(1);    
        Student    s = (Student) criteria.uniqueResult();
        System.out.println(s);
        
        /*
         *  Hibernate: select this_.stuId as stuId1_0_0_, this_.stuName as stuName2_0_0_, this_.stuAge as stuAge3_0_0_ from t_student this_ limit ?, ?
            Student [id=3, name=王五, age=13]
         */
    }
    
    /**
     * QBC 链式写法
     */
    @SuppressWarnings("unchecked")
    @Test
    public void testQBCQuery6(){
        Criterion c1 = Restrictions.like("name", "李%");
        Criterion c2 = Restrictions.eq("age", 15);
        List<Student> stuList = session.createCriteria(Student.class)
                                       .add(c1)
                                       .add(c2)
                                       .list();
        for(Student s : stuList){
            System.out.println(s);
        }
    }
    
}
View Code

 

转载于:https://www.cnblogs.com/tenWood/p/7259131.html

相关文章:

  • 2014年24段魔尺变球视频教程(升级版)
  • 九大内置对象
  • 测试用例编写(功能测试框架)
  • linux(centos)下安装PHP的PDO扩展
  • [C和指针].(美)Kenneth.A.Reek(ED2000.COM)pdf
  • 深度学习之Matlab 转C++在iOS上測试CNN手型识别
  • C++中struct和class的区别
  • Socket网络编程实例2
  • Oracle查询锁表和解锁
  • Spring学习笔记——Spring依赖注入原理分析
  • 这本将shell的书应该不错
  • System.Web.UI.Page
  • TensorFlow 101 | 原理与概念
  • Apache POI
  • [转]Spring Boot应用的后台运行配置
  • Android组件 - 收藏集 - 掘金
  • java2019面试题北京
  • Java小白进阶笔记(3)-初级面向对象
  • leetcode386. Lexicographical Numbers
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • PAT A1120
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端临床手札——文件上传
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 通过git安装npm私有模块
  • - 转 Ext2.0 form使用实例
  • UI设计初学者应该如何入门?
  • ​马来语翻译中文去哪比较好?
  • !!java web学习笔记(一到五)
  • $.ajax()参数及用法
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2)nginx 安装、启停
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (六)vue-router+UI组件库
  • (七)理解angular中的module和injector,即依赖注入
  • (区间dp) (经典例题) 石子合并
  • (四) 虚拟摄像头vivi体验
  • (一)kafka实战——kafka源码编译启动
  • (状压dp)uva 10817 Headmaster's Headache
  • ***通过什么方式***网吧
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .Net6 Api Swagger配置
  • .NET序列化 serializable,反序列化
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [android] 请求码和结果码的作用
  • [Android]Android开发入门之HelloWorld
  • [Android]使用Android打包Unity工程
  • [Angularjs]ng-select和ng-options
  • [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)