首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Criteria API更易用的替代方案

Criteria API更易用的替代方案
EN

Stack Overflow用户
提问于 2012-04-13 02:36:00
回答 4查看 6.9K关注 0票数 9

与使用JPQL或原始SQL相比,Criteria有一些优势,如this answer中所述:类型安全;重构友好;对字符串的依赖较少(但仍有一些)。还有一个非常大的缺点:它们可读性差,而且很难看。是否有一个(非JPA) Java API用于访问类型安全且可读的关系数据库?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-13 07:21:24

Timo WestkämperQueryDSL方面做得很好。这个库为查询不同的持久化提供者(JPA,MongoDB,Lucene...)提供了一个领域特定语言。

但我经常使用手工制作的解决方案,它简化了大多数常见的查询(列出一个实体,限制它的一些字段),避免了我总是写相同的行。对于大多数复杂的查询,我切换到了不可读和冗长的标准API。

票数 8
EN

Stack Overflow用户

发布于 2012-04-13 02:37:57

MyBatis.

MyBatis是一个一流的持久化框架,支持自定义SQL、存储过程和高级映射。MyBatis几乎消除了所有的JDBC代码以及手动设置参数和检索结果的工作。MyBatis可以使用简单的XML或注解进行配置,并将原语、映射接口和Java (Plain Old Java Objects)映射到数据库记录。

或者,如nobeh suggestedjOOQ

票数 1
EN

Stack Overflow用户

发布于 2013-11-04 03:45:41

面对下面的实用程序类,我已经找到了更简单的JPA搜索的“终极”解决方案:DynamicQueryBuilder

  1. 它提供了元模型,因此您不需要使用joins来描述关系。
  2. 它通过模板pojo进行搜索!只需将值放在一个实体实例中,它们将被用作标准!
  3. 它使用构建器模式,所以它非常可读性!

银行银行=新银行();bank.setId(12L);bank.setAchCode("1213");bank.setCbeCode("1234");bank.setStatus(新查找(1L));bank.setAchShortName("121");列表ids =新ArrayList();ids.add(1);ids.add(2);ids.add(3);ids.add(4);ids.add(5);列表cbeCodes =新ArrayList();cbeCodes.add("1111");cbeCodes.add("2222");新DynamicQueryBuilder.Builder(null).select(bank).withOperType(Operator.OperType.AND). = DynamicQueryBuilder queryDyncBuilder1withAdvancedParam("cbeCode",LIKE,PERCENT_AROUND).withAdvancedParam("id",IN,ids) .withAdvancedParam("achCode",BETWEEN,cbeCodes).withAdvancedParam("achShortName",GT) .orderBy("id").orderBy("cbeCode",true).orderBy("status.code",true).build();true

如果您运行上述调用,该组件将构造以下结果JPQL查询:

代码语言:javascript
复制
SELECT b 
FROM Bank b 
WHERE b.status = :status 
AND b.cbeCode LIKE :cbeCode 
AND b.achShortName > :achShortName 
AND b.id IN :id 
AND (b.achCode BETWEEN :achCodeFrom AND :achCodeTo) 
ORDER BY b.status.code DESC, b.id ASC, b.cbeCode DESC
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10129687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档