承接上文
@Test
public void test6(){
Session session = HibernateUtil.openSession();
Transaction tx = session.beginTransaction();
// //使用HQL分页
// Query query = session.createQuery("from Orders");
// //setFirstResult()设置的参数表示下标 从0开始 表示第一个数据
// query.setFirstResult(0);
// //setMaxResults()设置每页显示的数据条数
// query.setMaxResults(10);
// List<Orders>list = query.list();
//
// for(Orders orders : list) {
// System.out.println(orders);
// }
//使用QBC分页
Criteria criteria = session.createCriteria(Orders.class);
//setFirstResult()设置的参数表示下标 从0开始 表示第一个数据
criteria.setFirstResult(0);
//setMaxResults()设置每页显示的数据条数
criteria.setMaxResults(10);
List<Orders> list = criteria.list();
for(Orders orders : list) {
System.out.println(orders);
}
tx.commit();
session.close();
}
/*
* 排序 使用HQL操作
* session.createQuery("fromStudent s order by s.stuid desc").list();
* 升序:ASC 降序:desc
*
* 使用QBC操作
* session.createCriteria(Student.class) .addOrder(org.hibernate.criterion.Order.desc("stuid")).list();
*desc("字段")根据提供的字段进行降序
* */
@Test
public void test5(){
Session session = HibernateUtil.openSession();
Transaction tx = session.beginTransaction();
//使用HQL进行排序
// List<Student>list = session.createQuery("from Student s order by s.stuiddesc").list();
// for(Student student : list) {
// System.out.println(student);
// }
//使用QBC进行排序
List<Student> list = session.createCriteria(Student.class) .addOrder(org.hibernate.criterion.Order.desc("stuid")).list();
for(Student student : list) {
System.out.println(student);
}
tx.commit();
session.close();
}
/*
* 多态检索
*
* 因为session.createQuery("from java.lang.Object").list();检索的是object 它就会返回所有配置了以下文件
* <mappingresource="com/bdqn/pojo/Orders.hbm.xml" />
* <mappingresource="com/bdqn/pojo/Student.hbm.xml" />
* 对象数据全部返回
*
*/
@Test
public void test4() {
Session session = HibernateUtil.openSession();
Transaction tx = session.beginTransaction();
List<Object> list = session.createQuery("from java.lang.Object").list();
for(Object object : list) {
System.out.println(object);
}
tx.commit();
session.close();
}
多表查询
l 连接
n 交叉连接
u select * from A,B;
n 内连接:查询的是两个表的交际
n Select * from A inner join B on A.字段 = B.字段
实例代码:
//内连接和迫切内连接
@Test
public void test11(){
Session session = HibernateUtil.openSession();
Transaction tx = session.beginTransaction();
//内连接 sql: select* from Student s inner join orders o on s.stuid=o.cid
// Queryquery = session.createQuery("from Student s inner join s.orders");
// List<Object[]>list = query.list();
//
// for(Object[] object : list) {
// System.out.println(Arrays.toString(object));
// }
Query
query = session.createQuery("select distinct s from Student s innerjoin" +"fetch s.orders");
List<Student> list = query.list();
System.out.println(list);
tx.commit();
session.close();
}
内连接和迫切内连接的区别?
内连接查询:将数据封装到一个list<Object[]>中
迫切内连接:将数据封装到一个List中,但是迫切内连接,会得有重复记录,需要使用distinct排重