JPA查询之Specification以及HQL、SQL查询
SQL 查询 以及 jpa specification HQL
2023-09-27 14:24:46 时间
1、Specification
- //查询条件List
- List<Predicate> predicateList = new ArrayList<Predicate>();
-
- Specification specification = new Specification() {
- @Override
- public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) {
- //root即是Join<>内部第一个泛型的类型,意思就是用SkuProduct与Picture通过SkuProduct的pictures左联
- Join<SkuProduct,Picture> skuProductPictureJoin = root.join("pictures",JoinType.INNER);
- //添加第1个查询条件:SkuProduct的code等于skuProduct.getCode(),然后将这个criteriaBuilder的条件添加到predicateList
- predicateList.add(criteriaBuilder.equal(root.get("code"),skuProduct.getCode()));
- //添加第2个条件
- predicateList.add(criteriaBuilder.notEqual(skuProductPictureJoin.get("pictureType"),0));
- //返回
- return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
- }
- };
-
- //重要说明:Specification不支持右连接!
- //Specification specification = new Specification() {
- // @Override
- // public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) {
- // Join<Picture,SkuProduct> skuProductPictureJoin = root.join("pictures",JoinType.RIGHT);
- // predicateList.add(criteriaBuilder.notEqual(root.get("pictureType"),0));
- // predicateList.add(criteriaBuilder.equal(skuProductPictureJoin.get("code"),skuProduct.getCode()));
- // return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
- // }
- //};
-
- List<SkuProduct> results = skuProductRepository.findAll(specification);
- if(results!=null){
- results.stream().forEach(result->{
- System.out.println(result);
- });
- }
2、HQL
- @Query(value = "SELECT p FROM Picture p WHERE p.code= :code")
- List<Picture> findByPicture(@Param(value = "code") String code);
3、SQL
3.1--:占位符
- @Query(value = "SELECT p.* FROM picture p LEFT JOIN sku_product_pictures sp_p ON p.id=sp_p.pictures_id LEFT JOIN sku_product sp ON sp_p.sku_product_id=sp.id WHERE sp.code= :code AND p.picture_type=0",nativeQuery = true)
- List<Picture> findBySkuProductCodeAndPicture(@Param(value = "code") String code);
3.2--?占位符
- @Query(value = "SELECT p.* FROM picture p LEFT JOIN sku_product_pictures sp_p ON p.id=sp_p.pictures_id LEFT JOIN sku_product sp ON sp_p.sku_product_id=sp.id WHERE sp.code=?1 AND p.picture_type=?2",nativeQuery = true)
- List<Picture> findSkuProductCodeAndPicture(String code,int pictureType);
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章
- MySQL 中国省市区SQL表数据
- 提高SQL查询效率
- 对MySql查询缓存及SQL Server过程缓存的理解及总结
- SQL逻辑查询语句执行顺序
- sql-将查询字段拼接起来
- Sql_连接查询中on筛选与where筛选的区别
- mysql创建function 报错误1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in
- 在 SQL Server 数据库的 WHERE 语句中使用子查询
- ODBC、OLEDB、ADO、SQL的关系
- 在同一张表中先查询后删除的sql语句或者同一张表先查询后更新的操作
- 【T-SQL进阶】02.理解SQL查询的底层原理
- 【SQL】MaxComputer中调试与问题排查技巧小结
- Sql去重语句
- EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值
- SQL练习题完整(做完你就是高手)
- oracle存储过程,sql语句执行时间
- 2023-03-08 MySQL源码分析-数据如何从SQL层传递到innodb引擎层
- T-sql语句查询执行顺序
- mysql巧妙化解递归查询树形数据 | 纯sql
- UData查询引擎优化-如何让一条SQL性能提升数倍
- [SQL] SQL 基础知识梳理(二) - 查询基础
- 大数据ELK(十六):Elasticsearch SQL(职位查询案例)
- SQL中的多表查询,以及JOIN的顺序重要么?
- 零SQL实现CRUD你还没学会?这最后一次啦-SQL查询