Hibernate核心API之Query查询(hql)

Query的使用教程

SpringStrurs2Hibernate之Hibernate教程代码的基础上来使用Query查询;

在这里插入图片描述
如上图,我们每个test都创建了构造Configuration,构造SessionFactory,我们现在把它全部打包放在一个Util类里,用的时候直接调用该类就行了,如图:
在这里插入图片描述

public class HibernateUtil {
    private static SessionFactory sessionFactory;
    static {
     /*构建Configuration实例*/
        Configuration configure = new Configuration().configure("hibernate.cfg.xml");
        //会话工厂
        sessionFactory = configure.buildSessionFactory();
    }

    //获取会话
    public static Session openSession(){
        return sessionFactory.getCurrentSession();
    }
}

使用Query简单查询:

在这里插入图片描述

public class TestEmp {
    public static void main(String[] args) {
    //调用
        selectEmp();
    }

    /**
     * 查询Emp表所有
     */
    public static void selectEmp(){
        //获取会话,调用HibernateUtil类
        Session session = HibernateUtil.openSession();
        /*由Session实例创建Transaction的一个实例,开启事务*/
        Transaction transaction = session.beginTransaction();
        //编写hql语句
        String hql = "from Emp";
        //创建query对象
        Query query = session.createQuery(hql);
        //调用query对象里面的方法得到结果
        List<Emp> list = query.list();
        //循环输出
        for(Emp e: list){
            System.out.println(e);
        }
    }
}

使用Query模糊查询
在这里插入图片描述

 /**
     * 模糊查询
     * @param ename
     */
    public static void  SelectName(String ename){
        //获取会话,调用HibernateUtil类
        Session session = HibernateUtil.openSession();
        /*由Session实例创建Transaction的一个实例,开启事务*/
        Transaction transaction = session.beginTransaction();
        //编写hql语句
        String hql = "from Emp where ename like ?";
        //创建query对象
        Query query = session.createQuery(hql);
        //添加条件
        query.setString(0,"%"+ename+"%");
        //调用query对象里面的方法得到结果
        List<Emp> list = query.list();
        //循环输出
        for(Emp e: list){
            System.out.println(e);
        }
    }

使用Query分页查询
步骤1.创建Pager类
在这里插入图片描述

public class Pager<T> {
    private Integer pageNo;    //第几页
    private Integer pageSize;  //每页行数
    private Integer totalRows; //总行数
    private Integer totalPage; //总页数
    private List<T> datas;

    public Integer getPageNo() {
        return pageNo;
    }

    public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Integer getTotalRows() {
        return totalRows;
    }

    public void setTotalRows(Integer totalRows) {
        this.totalRows = totalRows;
    }

    public Integer getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(Integer totalPage) {
        this.totalPage = totalPage;
    }

    public List<T> getDatas() {
        return datas;
    }

    public void setDatas(List<T> datas) {
        this.datas = datas;
    }
}

步骤2.

 public static void main(String[] args) {
        //查询第一行到第三行数据
        Pager<Emp> pager = empPagerSelect(1, 3, null);
        System.out.println("第"+pager.getPageNo()+"页  每页行数:" + pager.getPageSize()+
                "   总行数:"+pager.getTotalRows() +"  总页数:"+ pager.getTotalPage());
        //循环打印输出
        for (Emp emp: pager.getDatas()   ) {
            System.out.println(emp);
        }
    }

    /**
     * 使用Query分页查询
     * @param pageNo     当前页
     * @param pageSize   每页行数
     * @param emp        表
     * @return
     */
    public static Pager<Emp> empPagerSelect(int pageNo, int pageSize, Emp emp){
        //获取会话,调用HibernateUtil类
        Session session = HibernateUtil.openSession();
        /*由Session实例创建Transaction的一个实例,开启事务*/
        Transaction transaction = session.beginTransaction();
        Pager<Emp> pager = new Pager<Emp>();
        pager.setPageNo(pageNo);  //设置当前页
        pager.setPageSize(pageSize); //设置每页行数
        //设置总行数
        Long o =(Long) session.createQuery("select count(*) from Emp").uniqueResult();
        pager.setTotalRows(o.intValue()); //设置总行数
        // (总行数+每页行数-1)/每页行数
        pager.setTotalPage(  (pager.getTotalRows()+pageSize-1)/ pageSize ); //设置总页数
         //创建query对象
        Query query = session.createQuery("from Emp");
        //设置起始行数   和  每页行数
        List<Emp> list = query.setFirstResult( (pageNo-1)*pageSize ).setMaxResults(pageSize).list();
        pager.setDatas(list);
        transaction.commit();
        return  pager;
    }

最后想要代码的的同志去这里下载:Query使用代码的demo连接下载

猜你喜欢

转载自blog.csdn.net/weixin_43538859/article/details/84786311