hql and qbc

hibernate-HQL、Criteria、SQL实现查询对照以及增删改:主要看前面概念,后面语句都是简单的,侧重对比

hibernate的三种查询方式
Hibernate 的三种查询方式:HQL、Criteria、Sql: 分是否使用Spring框架
Spring Data Jpa @Query
hibernate - createCriteria or createAlias? a.b.c的这种查询

SQL HQL QBC 原生SQL查询
Struct query language hibernate query language query by criteria
查询的是表以及列 面向对象的查询语言 完全面向对象的查询
(无SQL语句)
用于复杂SQL。不能跨平
台,只能用配置的DBM
  1. // HQL
  2. Query query = session.createQuery("FROM User WHERE id=?");
  3. //这里的?号是从0开始的,并不像JDBC从1开始的!
  4. query.setParameter(0, user.getId());
  5. List list = query.list();
  6. // QBC
  7. //创建关于user对象的criteria对象
  8. Criteria criteria = session.createCriteria(User.class);
  9. //添加条件
  10. criteria.add(Restrictions.eq("id", 1));
  11. //查询全部数据
  12. List list = criteria.list();
  13. // 原生SQL
  14. //将所有的记录封装成User对象存进List集合中
  15. SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM user").addEntity(User.class);
  16. List list = sqlQuery.list();

案例

Sort

  1. public List<Category> list() {
  2. Sort sort = Sort.by(Sort.Direction.DESC, "id");
  3. return categoryDao.findAll(sort);
  4. }

createNativeQuery

  1. @Override
  2. public void batchSavePlans(List<BoxPicturePlan> plans) {
  3. plans.forEach(plan -> {
  4. String nativeSql = composeBatchSaveSql(plan);
  5. long start = System.currentTimeMillis();
  6. createNativeQuery(nativeSql.toString()).executeUpdate();
  7. logger.info("batchSave boxPictures execute cost time {}, size {}", (System.currentTimeMillis() - start), plan.getPictures().size());
  8. });
  9. }