zoukankan      html  css  js  c++  java
  • Hibernate中的查询,Query、Criteria、SQLQuery

    一、使用Query对象,不需要写sql语句,但是要写hql语句】

      1.hql:hibernate query language,hibernate提供查询语言,这个hql语句和普通sql语句很类似

      2.hql和sql语句的区别

       -使用sql语句是操作数据库表和字段的

       -使用hql语句是操作实体类和属性的

      3.查询所有属性的hql语句

        ①from+实体类名称【sql语句:select * from 表名】

      4.Query对象的使用

        ①创建Query对象

        ②调用query对象里面的方法得到结果

    package com.lk.hibernate2.test;
    
    
    import java.util.List;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.hibernate.query.Query;
    
    import com.lk.hibernate2.entity.User;
    import com.lk.hibernate2.util.HibernateUtil;
    /**
     * 测试Hibernate查询的方法
     * @author Administrator
     *
     */
    public class Test {
    
        @org.junit.Test
        public void test() {
            Session session=null;
            Transaction transaction=null;
                    
            try{
                //获取session(HibernateUtil是我自己创建的一个工具类,专门用来获取session的)
                session=HibernateUtil.getSession();
                transaction=session.beginTransaction();
                //操作业务
                //1.创建一个query对象
                Query query=session.createQuery("from User");
                //2.调用query的list()方法返回值是一个List类型的
                List<User> list=query.list();
                //循环输出值
                for (User user : list) {
                    System.out.println(user);
                }
                //提交事务
                transaction.commit();
                
            }catch (Exception e) {
                e.printStackTrace();
                //事务回滚
                transaction.rollback();
            }finally{
                //关闭方法
                HibernateUtil.close();
            }
        }
    
    }

    二、Criteria对象

    1.使用这个对象查询操作不需要写查询语句,直接调用方法就可以实现

    2.实现的过程

      ①创建Criteria对象

      ②调用Criteria里面的方法

    @org.junit.Test
        public void testCriteria() {
            Session session=null;
            Transaction transaction=null;
                    
            try{
                //获取session(HibernateUtil是我自己创建的一个工具类,专门用来获取session的)
                session=HibernateUtil.getSession();
                transaction=session.beginTransaction();
                //操作业务
                //1.创建一个Criteria对象
                Criteria criteria=session.createCriteria(User.class);
                //2.调用Criteria的list()方法返回值是一个List类型的
                List<User> list=criteria.list();
                //循环输出值
                for (User user : list) {
                    System.out.println(user);
                }
                //提交事务
                transaction.commit();
                
            }catch (Exception e) {
                e.printStackTrace();
                //事务回滚
                transaction.rollback();
            }finally{
                //关闭方法
                HibernateUtil.close();
            }
        }

    三、SQLQuery对象查询

    1.使用hibernate时候,调用底层sql实现

    2.实现过程

      ①创建对象

      ②调用对象的方法得到结果

    注意:如果用SQLQuery对象直接调用list()方法,返回的集合中元素是以集合的形式出现的,所以要让其以实体类的对象形式出现需要调用addEntity(实体类.class)方法来实现

    @org.junit.Test
        public void testSQLQuery() {
            Session session=null;
            Transaction transaction=null;
                    
            try{
                //获取session(HibernateUtil是我自己创建的一个工具类,专门用来获取session的)
                session=HibernateUtil.getSession();
                transaction=session.beginTransaction();
                //操作业务
                //1.创建一个SQLQuery对象
                String sql="select * from user";
                SQLQuery sQLQuery=session.createSQLQuery(sql);
                //-------------------
                /*
                //2.调用SQLQuery的list()方法返回值是一个List类型的,list集合里面的元素是以数组的形式存在的
                List<Object[]> list=sQLQuery.list();
                //循环输出值
                for (Object[] objects : list) {
                    System.out.println(Arrays.toString(objects));
                }*/
                //--------------------
                
                //让SQLQuery的list()方法返回值中的元素是以对象形式存在的解决办法
                sQLQuery.addEntity(User.class);
                //调用sQLQuery里面的方法
                List<User> list =sQLQuery.list();
                for (User user : list) {
                    System.out.println(user);
                }
                
                
                //提交事务
                transaction.commit();
                
            }catch (Exception e) {
                e.printStackTrace();
                //事务回滚
                transaction.rollback();
            }finally{
                //关闭方法
                HibernateUtil.close();
            }
        }
  • 相关阅读:
    message sent to deallocated instance
    将本地项目提交github
    WKWebView 初窥-JS交互探究
    抓包工具Charles的使用
    iOS hook delegate (一)
    Return
    控制方法只有相应权限才可执行
    如何模拟登陆添加了CSRF保护的网站
    HTTP客户端都应该支持的五个特性
    如何利用WebClient模拟登陆CSRF控制的网站
  • 原文地址:https://www.cnblogs.com/lk617-home/p/7875918.html
Copyright © 2011-2022 走看看