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

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 (User user : 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 (User user : list) {

            System.out.println(user);

        }

    }

    public Session getSession() {

        //1 读取配置文件

         conf = newConfiguration().configure();

        //2 根据配置创建Factory

        sessionFactory = conf.buildSessionFactory();

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

        session = sessionFactory.openSession();

        return session;

    }

     public voidcloseStream(SessionFactory sessionFactory,Session session){

           if(session!=null){

               session.close();

           }

           if(sessionFactory!=null){

               sessionFactory.close();

           }

     }

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值