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();
}
}
}