hibernate原生sql查询和hql查询的注意点

来源:互联网 发布:history.js下载 编辑:程序博客网 时间:2024/05/16 01:15

package com.xiangshuai.test;

 

import java.util.List;

 

import org.hibernate.Query;

import org.hibernate.SQLQuery;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

import org.hibernate.classic.Session;

import org.junit.Test;

 

import com.xiangshuai.hibernate.User;

 

public classDemo2 {

    private Configuration conf=null;

    SessionFactorysessionFactory=null;

    Sessionsession=null;

   

    /**

     * 所有原生sql语句查询即createSQLQuery,必须加addEntity,这是因为原生sql查出的是一个List<Object[里面是属性]>而不是Hql查询出来的List<Object>

     * 所以这里要先将出来的Object[属性]转成记录对应的对象User.

     * 另外原生sql-- from(数据库表);

     * */

    @Test

    public void yssql(){

        //带占位符查询

        session=getSession();

        SQLQueryque1= session.createSQLQuery("select * from t_user where id=?").addEntity(User.class);

        Queryquery= que1.setInteger(0,17);//第一参数表示占位符位置,从0开始,第二个是value

        Useruser= (User) query.uniqueResult();//表示查询唯一值

        System.out.println(user);

    }

    @Test

    public void ysfysql(){

        //hibernate原生sql分页查询 ---无论是mysql,还是oracle都可以直接这样操作不用改代码

        session=getSession();

        SQLQueryque1= session.createSQLQuery("select * from t_user").addEntity(User.class);

        Queryquery= que1.setFirstResult(0).setMaxResults(3);//从数据库记录索引为0即每一条开始开始,查3

        List<User>list= query.list();

        for (Useruser : list) {

            System.out.println(user);

        }

    }

    /**

     * hql查询--- from且不用再加addEntity,因为执行完Hql得到就是List<Object>

     * */

    @Test

    public void hql(){

        //带占位符查询

        session=getSession();

        Queryque1= session.createQuery("from User where id=?");

        Queryquery= que1.setInteger(0,17);//第一参数表示占位符位置,从0开始,第二个是value

        Useruser= (User) query.uniqueResult();//表示查询唯一值

        System.out.println(user);

    }

    @Test

    public void fyhql(){

        //hibernate hql分页查询 ---无论是mysql,还是oracle都可以直接这样操作不用改代码

        session=getSession();

        Queryque1= session.createQuery("from User");

        Queryquery= que1.setFirstResult(0).setMaxResults(3);//从数据库记录索引为0即每一条开始开始,查3

        List<User>list= query.list();

        for (Useruser : list) {

            System.out.println(user);

        }

    }

    public Session getSession() {

        //1 读取配置文件

         conf = newConfiguration().configure();

        //2 根据配置创建Factory

        sessionFactory = conf.buildSessionFactory();

        //3 通过获得操作数据库的session对象

        session = sessionFactory.openSession();

        returnsession;

    }

     public voidcloseStream(SessionFactory sessionFactory,Sessionsession){

           if(session!=null){

               session.close();

           }

           if(sessionFactory!=null){

               sessionFactory.close();

           }

     }

}