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 |
// HQLQuery query = session.createQuery("FROM User WHERE id=?");//这里的?号是从0开始的,并不像JDBC从1开始的!query.setParameter(0, user.getId());List list = query.list();// QBC//创建关于user对象的criteria对象Criteria criteria = session.createCriteria(User.class);//添加条件criteria.add(Restrictions.eq("id", 1));//查询全部数据List list = criteria.list();// 原生SQL//将所有的记录封装成User对象存进List集合中SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM user").addEntity(User.class);List list = sqlQuery.list();
案例
Sort
public List<Category> list() {Sort sort = Sort.by(Sort.Direction.DESC, "id");return categoryDao.findAll(sort);}
createNativeQuery
@Overridepublic void batchSavePlans(List<BoxPicturePlan> plans) {plans.forEach(plan -> {String nativeSql = composeBatchSaveSql(plan);long start = System.currentTimeMillis();createNativeQuery(nativeSql.toString()).executeUpdate();logger.info("batchSave boxPictures execute cost time {}, size {}", (System.currentTimeMillis() - start), plan.getPictures().size());});}
