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连接下载