1 创建表
@Test
public void testCreateDB(){
//3.x
//Configuration cfg = new AnnotationConfiguration().configure();
Configuration cfg = new Configuration().configure();
SchemaExport se = new SchemaExport(cfg);
se.create(true, true);
}
2 查询
2.1 根据单个属性
public void testQuery1(){
//查询所有书名
//创建Query对象
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
//Book 大写 表示的是 cn.siggy.pojo.Book类
//name表示的 Book类中的属性名
String hql="select name from Book";
Query query = session.createQuery(hql);
//list()方法返回查询结果
//返回结果的类型 是根据查询的列决定的
List<String> list = query.list();
for(String bookname:list){
System.out.println(bookname);
}
tx.commit();
HibernateUtil.closeSession();
}
2.2 查询多个属性
public void testQuery2(){
//查询所有书 的名称和价格
//创建Query对象
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
//Book 大写 表示的是 cn.siggy.pojo.Book类
//name表示的 Book类中的属性名
//list()方法返回查询结果
//查询多个列时 返回结果是数组集合 数组中元素的类型 是由查询列来决定
List<Object[]> list = session.createQuery("select name,price from Book").list();
for(Object[] objs:list){
System.out.println(objs[0]+"--"+objs[1]);
}
tx.commit();
HibernateUtil.closeSession();
}
查询多个列时 将查询结果封装为对象集合
public void testQuery3(){
//查询所有书 的名称和价格
//创建Query对象
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
//Book 大写 表示的是 cn.siggy.pojo.Book类
//name表示的 Book类中的属性名
//list()方法返回查询结果
//查询多个列时 返回结果是数组集合 数组中元素的类型 是由查询列来决定
List<Book> list = session.createQuery("select new Book(name,price) from Book").list();
for(Book b:list){
System.out.println(b);
}
tx.commit();
HibernateUtil.closeSession();
}
3 别名的使用
public void testQuery4(){
//查询所有书 的名称和价格
//创建Query对象
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
//Book 大写 表示的是 cn.siggy.pojo.Book类
//name表示的 Book类中的属性名
//list()方法返回查询结果
//查询多个列时 返回结果是数组集合 数组中元素的类型 是由查询列来决定
List<Book> list = session.createQuery("select new Book(b.name,b.price) from Book as b").list();
for(Book b:list){
System.out.println(b);
}
tx.commit();
HibernateUtil.closeSession();
}
4 查询所有列
public void testQuery5(){
//查询所有书 的名称和价格
//创建Query对象
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
List<Book> list = session.createQuery("from Book").list();
for(Book b:list){
System.out.println(b);
}
tx.commit();
HibernateUtil.closeSession();
}
查询所有列2 不能使用* 需要使用别名
public void testQuery6(){
//查询所有书 的名称和价格
//创建Query对象
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
List<Book> list = session.createQuery("select b from Book b").list();
for(Book b:list){
System.out.println(b);
}
tx.commit();
HibernateUtil.closeSession();
}
5 条件查询 占位符 从0开始
public void testQuery7(){
//查询所有书 的名称和价格
//创建Query对象
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
List<Book> list = session.createQuery("from Book b where id<?")
.setInteger(0, 4)
.list();
for(Book b:list){
System.out.println(b);
}
tx.commit();
HibernateUtil.closeSession();
}
条件查询 占位符 从0开始,setParameter不用理会参数类型
public void testQuery8(){
//查询所有书 的名称和价格
//创建Query对象
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
List<Book> list = session.createQuery("from Book b where id<?")
.setParameter(0, 4)
.list();
for(Book b:list){
System.out.println(b);
}
tx.commit();
HibernateUtil.closeSession();
}
条件查询 命名查询–设置条件参数的名称 以冒号开头后更名称 设置参数时 只需指定名
public void testQuery9(){
//查询所有书 的名称和价格
//创建Query对象
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
List<Book> list = session.createQuery("from Book b where id<:id")
.setParameter("id", 4)
.list();
for(Book b:list){
System.out.println(b);
}
tx.commit();
HibernateUtil.closeSession();
}
6 分页查询
public void testQuery10(){
//查询所有书 的名称和价格
//创建Query对象
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
List<Book> list = session.createQuery("from Book b")
.setFirstResult(3)//开始显示的记录下标(currentPage-1)*pageSize
.setMaxResults(3)//设置每页记录数pageSize
.list();
session.createSQLQuery("").setFirstResult(1).setMaxResults(0);
for(Book b:list){
System.out.println(b);
}
tx.commit();
HibernateUtil.closeSession();
}
7 聚合函数–统计查询
public void testQuery11(){
//查询图书总数
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
//int,long
Number count = (Number)session.createQuery("select max(b.price) from Book b")
.uniqueResult();
System.out.println("总数:"+count.byteValue());
tx.commit();
HibernateUtil.closeSession();
}
8 分组查询
public void testQuery12(){
//查询图书总数
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
//int,long
List<Object[]> list = session.createQuery("select b.category.name,count(b.id) from Book b group by b.category.name")
.list();
for(Object[] objs:list){
System.out.println(objs[0]+"--"+objs[1]);
}
tx.commit();
HibernateUtil.closeSession();
}
9 排序
public void testQuery13(){
//查询图书总数
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
//int,long
List<Book> list = session.createQuery("from Book order by price desc")
.list();
for(Book b:list){
System.out.println(b);
}
tx.commit();
HibernateUtil.closeSession();
}
10 连接查询
public void testQuery14(){
//查询 "仙侠"的书籍信息
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
String hql="from Book b where b.category.name=:name";
hql="select b from Book b join b.category c where c.name=:name";
hql="select b from Book b inner join b.category c where c.name=:name";
List<Book> list = session.createQuery(hql)
.setString("name", "仙侠")
.list();
for(Book b:list){
System.out.println(b);
}
tx.commit();
HibernateUtil.closeSession();
}
11 左外链接
public void testQuery15(){
//查询 "仙侠"的书籍信息
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
String hql="select c.name,b.name from Category c left outer join c.books b";
List<Object[]> list = session.createQuery(hql)
.list();
for(Object[] objs:list){
System.out.println(objs[0]+"----"+objs[1]);
}
tx.commit();
HibernateUtil.closeSession();
}
12 过滤器的使用
/* 1、定义过滤器
* 2、使用:加条件
* 3、在查询时候 使得过滤器生效
* */
public void testQuery16(){
//查询 "仙侠"的书籍信息
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
//启用过滤器
session.enableFilter("bf").setParameter("id", 4);
List<Book> list =session.createQuery("from Book").list();
for(Book b:list){
System.out.println(b);
}
tx.commit();
HibernateUtil.closeSession();
}
13 命名查询NamedQuery
public void testQuery17(){
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
List<Book> list =session.getNamedQuery("getByCategoryId")
.setInteger("id", 3)
.list();
for(Book b:list){
System.out.println(b);
}
tx.commit();
HibernateUtil.closeSession();
}