您的位置:首页 > 数据库

hibernate查询方式【2】:QBC查询,本地sql查询

2017-12-26 20:44 716 查看

QBC查询

Criteria对象

使用hql查询的时候需要写hql语句实现,但是使用qbc的时候,不需要写语句了,使用方法实现

==查询所有==

创建Criteria对象

调用方法获得结果

@Test
public void test() {
SessionFactory factory = null;
Session session = null;
Transaction transaction = null;
try {
factory = HibernateUtils.getSessionFatory();
session = factory.openSession();
//          开启事务
transaction = session.beginTransaction();
//          获取criteria对象
Criteria criteria = session.createCriteria(Order.class);
//          获取所有的结果
List<Order> list = criteria.list();
for (Order order : list) {
System.out.println(order);
}

transaction.commit();
} catch (Exception e) {
//          如果发生异常那么回滚
transaction.rollback();
}finally {
//          释放资源
if(session != null) {
session.close();
}
if(factory != null) {
factory.close();
}
}
}


查询结果:


==条件查询==


使用封装的方法实现

@Test
public void test1() {
SessionFactory factory = null;
Session session = null;
Transaction transaction = null;
try {
factory = HibernateUtils.getSessionFatory();
session = factory.openSession();
//          开启事务
transaction = session.beginTransaction();
//          获取criteria对象
Criteria criteria = session.createCriteria(Order.class);
//          调用add方法设置条件值,方法参数是Restrictions的方法
//          两条语句的效果相当于:select * from order where oid=3 and oaddress='山西';
criteria.add(Restrictions.eq("oid", 3));
criteria.add(Restrictions.eq("oaddress", "山西"));

//          也可以使用模糊查询
//criteria.like(Restrictions.like("oaddress", "%西%"));
//          获取所有的结果
List<Order> list = criteria.list();
for (Order order : list) {
System.out.println(order);
}

transaction.commit();
} catch (Exception e) {
//          如果发生异常那么回滚
transaction.rollback();
}finally {
//          释放资源
if(session != null) {
session.close();
}
if(factory != null) {
factory.close();
}
}
}


查询结果:


==排序查询==

获取到Criteria对象

调用Criteria对象的addOrder方法,参数传递


@Test
public void test3() {
SessionFactory factory = null;
Session session = null;
Transaction transaction = null;
try {
factory = HibernateUtils.getSessionFatory();
session = factory.openSession();
//          开启事务
transaction = session.beginTransaction();
//          获取criteria对象
Criteria criteria = session.createCriteria(Order.class);
//          根据oid,进行降序排列
criteria.addOrder(org.hibernate.criterion.Order.desc("oid"));

//          获取所有的结果
List<Order> list = criteria.list();
for (Order order : list) {
System.out.println(order);
}

transaction.commit();
} catch (Exception e) {
//          如果发生异常那么回滚
transaction.rollback();
}finally {
//          释放资源
if(session != null) {
session.close();
}
if(factory != null) {
factory.close();
}
}
}


查询结果:


==分页查询==

获取到Criteria对象

调用对象的方法:

setFirstResult(int)设置起始位置从0开始

setMaxResults(int)设置记录数

@Test
public void test4() {
SessionFactory factory = null;
Session session = null;
Transaction transaction = null;
try {
factory = HibernateUtils.getSessionFatory();
session = factory.openSession();
//          开启事务
transaction = session.beginTransaction();
//          获取criteria对象
Criteria criteria = session.createCriteria(Order.class);
//          设置起始位置
criteria.setFirstResult(0);
//          设置记录数
criteria.setMaxResults(2);

//          获取所有的结果
List<Order> list = criteria.list();
for (Order order : list) {
System.out.println(order);
}

transaction.commit();
} catch (Exception e) {
//          如果发生异常那么回滚
transaction.rollback();
}finally {
//          释放资源
if(session != null) {
session.close();
}
if(factory != null) {
factory.close();
}
}
}


结果:


==统计查询==

@Test
public void test5() {
SessionFactory factory = null;
Session session = null;
Transaction transaction = null;
try {
factory = HibernateUtils.getSessionFatory();
session = factory.openSession();
//          开启事务
transaction = session.beginTransaction();
//          获取criteria对象
Criteria criteria = session.createCriteria(Order.class);
//          查询记录数,调用criteria的方法setProjection
criteria.setProjection(Projections.rowCount());

Object a = criteria.uniqueResult();
Long b = (Long)a;
int count = b.intValue();
System.out.println("总的记录数:"+ count);

transaction.commit();
} catch (Exception e) {
//          如果发生异常那么回滚
transaction.rollback();
}finally {
//          释放资源
if(session != null) {
session.close();
}
if(factory != null) {
factory.close();
}
}
}


结果:


==离线查询==

之前的方法获得Criteria已经和Session绑定了,操作数据库只能在dao中,如果想要在外部操作,那么就需要离线查询



本地sql查询

使用hibernate时候,调用底层sql实现

实现过程

创建对象

调用对象的方法得到结果

使用这种方式返回的元素默认是数组的形式,可以通过调用setEntity方法设置返回的类型

案例:使用SQLQuery查询所有的记录
https://img-blog.csdn.net/20171226204321286?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGlhb3Npbml4aWhlaXhpdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast” alt=”image” title=”” />)

结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐