SSH数据库操作之查询
该种方式可以直接使用参数进行获取,可实现模糊查询
public static List<Books> getListByName(String name){
Session session=getSession();
//编写HQL语句
String sql="from Books as book where book.name like'%"+name+"%'";//模糊查询 可以直接使用name='"+name+"'"
Query query=session.createQuery(sql);
//执行query接口,来获取数据
List<Books> books=query.list();
session.close();
return books;
}
与上面类似,下面这种也可以实现模糊查询:
public static List<Books> getOtherBook(String name){
//获取session对象
Session session=getSession();
//编写sql语句,采用的是命名参数的方式
String sql="from Books as book where book.name like :name";
//创建query接口
Query query=session.createQuery(sql);
//给命名参数赋值
query.setString("name", "%"+name+"%");
List<Books> books=query.list();
session.close();
return books;
}
在Java的JDBC中,我们曾经学到可以使用?来作为占位符,在这里,依然可以使用:
public static List<Books> getList(String name,int id){
//占位符的使用
Session session=getSession();
//编写HQL语句
String sql="from Books as book where book.name = ?0 and book.id = ?1";
Query query=session.createQuery(sql);
//给query里的占位符赋值,是从索引0开始
query.setString(0, name);
query.setInteger(1, id);
//执行query接口,来获取数据
List<Books> books=query.list();
session.close();
return books;
}
如何实现获取单条数据呢,可以使用 setMaxResults这个方法,设置取回的数据的条数
public static Books getBook(){
Session session=getSession();
//编写HQL查询语句
String sql="from Books";
//创建一个Query接口
Query query=session.createQuery(sql);
query.setMaxResults(1);
Books book=(Books) query.uniqueResult();//将得到的数据并转化为实体对象
return book;
}
根据这个方法,我们还可以实现分页查询:
public static List<Books> getList(int pageindex,int pagesize){
Session session=getSession();
//编写HQL查询语句
String sql="from Books";
//创建一个Query接口
Query query=session.createQuery(sql);
//实现的分页,对于HQL的分页(每页的数据大小,起始数据)
//分页计算
int startindex=(pageindex-1)*pagesize;
//设置每页最大数据
query.setMaxResults(pagesize);
//设置起始数据
query.setFirstResult(startindex);
//执行query接口,来获取数据
List<Books> books=query.list();
session.close();
return books;
}
聚合函数的使用 count
获取数据总数
public static int getCount(){
//获取session对象
Session session=getSession();
String sql="Select count(*) from Books";
//创建query接口
Query query=session.createQuery(sql);
//
int count=(int) query.uniqueResult();
return count;
}
在运行时报错:count返回的时long类型
in thread "main" java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
此为类型转换错误,可以将其修改为封装方式,或者返回long类型也可以
public static int getCount(){
//获取session对象
Session session=getSession();
String sql="Select count(*) from Books";
//创建query接口
Query query=session.createQuery(sql);
//
int count=Integer.valueOf(query.uniqueResult().toString());
return count;
}
修改后执行了查询结果:
Hibernate: select count(*) as col_0_0_ from books books0_
数据总数:10
其余的像max,min,distinct的使用与其类似