您的位置:首页 > 数据库

Hibernate学习之路(十三):Hibernate中的QBC查询和本地sql操作

2018-03-15 22:50 766 查看

什么是hibernate的QBC查询

QBC 查询就是通过使用 Hibernate 提供的 Query By Criteria API 来查询对象,这种 API 封装了 SQL 语句的动态拼装,对查询提供了更加面向对象的功能接口

示例代码:

/*
* 第一个QBC查询(完全是基于对象的查询操作,更加方便)
*/
@Test
void testQBC() {
//1. 创建criteria对象
Criteria criteria = this.session.createCriteria(Employee.class);

//2. 添加查询条件:在QBC中查询条件使用criterion来表示,criterion可以通过Restrictions的静态方法获取
criteria.add(Restrictions.eq("email", "23@qq.com"));
criteria.add(Restrictions.gt("salary", 100F));

//执行查询(两种方法都可以)
//      Object result = criteria.uniqueResult();
//      System.out.println(result);

List<Employee> result = criteria.list();
System.out.println(result.get(0));
}


console:



示例代码2

/*
* 通过QBC实现and以及or查询
*/
@Test
void testQBC2() {

Criteria criteria = this.session.createCriteria(Employee.class);

//1. AND 查询
Conjunction conjunction = Restrictions.conjunction();
conjunction.add(Restrictions.like("name", "ja", MatchMode.ANYWHERE));
Department dept = new Department();
dept.setId(1);
conjunction.add(Restrictions.eq("department", dept));
//      System.out.println(conjunction);

//2. OR 查询
Disjunction disjunction = Restrictions.disjunction();
disjunction.add(Restrictions.ge("salary", 1000F));
disjunction.add(Restrictions.isNull("email"));

criteria.add(disjunction);
criteria.add(conjunction);
criteria.list();
}


console:



示例代码3

/*
* 使用QBC进行统计查询
*/
@Test
void testQBC3() {

Criteria criteria = this.session.createCriteria(Employee.class);

// 统计查询:使用Projection 来表示,可以由Projections 的静态方法获取
criteria.setProjection(Projections.max("salary"));

System.out.println(criteria.uniqueResult());
}


console:



示例代码4

/*
* 使用QBC进行排序和分页查询
*/
@Test
void testQBC4() {

Criteria criteria = this.session.createCriteria(Employee.class);

//1. 添加排序
criteria.addOrder(Order.asc("salary"));
criteria.addOrder(Order.desc("id"));

//2. 添加分页
int pageNo = 1;
int pageSize = 2;
criteria.setFirstResult((pageNo-1) * pageSize).setMaxResults(pageSize);
criteria.list();
}


console:



hibernate对于本地sql语句的支持

示例代码:

/*
* hql 主要是运用在查询和更新以及删除,其不支持增加
* QBC 主要是运用简单的查询(方便,快捷)
* 而 本地sql 可以实现所有的功能
*/
@Test
void testNativeSql() {

String sql = "insert into GG_DEPARTMENT values (?,?)";
NativeQuery query = this.session<
a924
/span>.createSQLQuery(sql);

query.setInteger(0, 123).setString(1, "开发部").executeUpdate();
}


console:



hql还可以实现很好的数据更新和删除操作

/*
* 测试hql的更新和删除
*/
@Test
void testHQLUpdate() {

//      String hql = "update Department d set d.name = :name where d.id = :id";
//      Query query = this.session.createQuery(hql);
//      query.setParameter("name", "搞基部").setParameter("id", 123);
//      query.executeUpdate();
//
String hql = "delete from Department d where d.id = :id";
this.session.createQuery(hql).setParameter("id", 123).executeUpdate();
}


console:



后台数据库:



点我获取源代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java hibernate 数据库