我很难决定是否应该坚持使用Hibernate来完成一个新的项目,还是使用JPA和新的spring数据实现。
spring数据框架是用于大型项目还是具有适度查询需求的小型项目?
虽然我肯定看到了使用@query
注释在减少代码方面的优势,但是对于动态查询您要做什么呢?当您想要实现一个相当复杂的save()方法时呢?
文档中说要创建一个您的主存储库实现的自定义接口和实现,但是如果您需要访问crud存储库本身上的任何超级方法,该怎么办呢?crud存储库实现自定义存储库--而不是相反。看起来是个奇怪的设计。
我很不确定这个框架是否会应对复杂和大型应用程序的挑战。我从来没有遇到过Hibernate的很多问题,我正在考虑坚持使用老式的可靠软件,而不是使用Spring Data JPA。
我该怎么办?如果我和Spring Data JPA一起去,会遇到哪些不可预见的并发症和代价?
我在具有简单查询需求的小型和大型项目中使用过Spring Data JPA。其主要优点是甚至不必使用@query
注释。spring数据中没有任何东西可以阻止您在大型项目中使用它,最近的querydsl
支持可能会对您有所帮助。这是一个使用QueryDSL以Hibernate为目标的示例。
如果您预见到了复杂的查询,并且您觉得使用Hibernate对象并不需要JPA,那么我认为一种替代组合可以是使用简单的spring数据存储库
,而不是使用您可能需要的特定方法的基于Hibernate的复杂查询。将Hibernate实现转换为Spring Data JPA结构可能不会那么麻烦。
因此,spring-data
执行了一些额外的魔法,有助于处理复杂的查询。一开始很奇怪,在文档中你会完全跳过它,但它确实很强大,很有用。
它包括创建一个自定义的repository
和一个自定义的`repositoryImpl',并告诉spring在哪里可以找到它。这里有一个例子:
配置类-
指向仍然需要的xml配置
,注释指向存储库包(它现在自动查找*impl
类):
@Configuration
@EnableJpaRepositories(basePackages = {"com.examples.repositories"})
@EnableTransactionManagement
public class MyConfiguration {
}
jpa-repositories.xml-告诉
spring
在哪里可以找到存储库。还要告诉
spring
查找文件名为
CustomImpl
的自定义存储库:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<jpa:repositories base-package="com.example.repositories" repository-impl-postfix="CustomImpl" />
</beans>
MyObjectRepository
-这是您可以放置带注释和未带注释的查询方法的地方。请注意此存储库接口如何扩展custom
接口:
@Transactional
public interface MyObjectRepository extends JpaRepository<MyObject, Integer>, MyObjectRepositoryCustom {
List<MyObject> findByName(String name);
@Query("select * from my_object where name = ?0 or middle_name = ?0")
List<MyObject> findByFirstNameOrMiddleName(String name);
}
MyObjectRepositoryCustom
-较复杂且不能用简单查询或批注处理的存储库方法:
public interface MyObjectRepositoryCustom {
List<MyObject> findByNameWithWeirdOrdering(String name);
}
MyObjectRepositoryCustomImpl
-您可以在其中使用自动连线的EntityManager
实际实现这些方法:
public class MyObjectRepositoryCustomImpl implements MyObjectRepositoryCustom {
@Autowired
private EntityManager entityManager;
public final List<MyObject> findByNameWithWeirdOrdering(String name) {
Query query = query(where("name").is(name));
query.sort().on("whatever", Order.ASC);
return entityManager.find(query, MyObject.class);
}
}
令人惊讶的是,所有这些都出现在一起,并且当您这样做时,来自两个接口(以及您实现的CRUD接口)的方法都会出现:
myObjectRepository.
您将看到:
myObjectRepository.save()
myObjectRepository.findAll()
myObjectRepository.findByName()
myObjectRepository.findByFirstNameOrMiddleName()
myObjectRepository.findByNameWithWeirdOrdering()
真的很管用。就有了一个查询接口。spring-data
实际上已经为大型应用程序做好了准备。而且,您可以将更多的查询推入简单或注释中,这样做的效果就越好。
所有这一切都记录在Spring Data JPA现场。
祝你好运.
我目前正在开发一个spring boot应用程序,希望看到一些关于spring boot项目的架构有多大的真实例子。我自己也尝试过搜索网络,但到目前为止没有成功。 我对使用spring数据rest的更大示例特别感兴趣。
问题内容: 我正在尝试使用大型Python应用程序调试内存问题。大部分内存在Python类管理的数组中,因此Heapy等无用,因为它们不占数组中的内存。因此,我尝试使用MacOSX(10.7.5)活动监视器(或者如果愿意)来手动跟踪内存使用情况。我注意到以下奇怪的行为。在普通解释器外壳(2.7.3)上: 不管我做什么,Python会话的内存占用都不会再低于134.9 MB。所以我的问题是: 为什么
我看到过许多关于将Eclipse或Gradle项目导入IntelliJ的问题,但没有一个问题问我应该使用哪种方法。我想只是导入Gradle? 我们在gradle上使用Eclipse,我可以用Gradle命令行或者(不太可能:)在Eclipse中构建和运行我的项目。只要我能在命令行上与gradle一起构建,我的老板就很高兴。 我找到了完全启用的免费学生版的 IntelliJ/Jetbrains 产品
流行的Web框架大多数是MVC框架,MVC这个概念最早由Trygve Reenskaug在1978年提出,为了能够对GUI类型的应用进行方便扩展,将程序划分为: 控制器(Controller)- 负责转发请求,对请求进行处理。 视图(View) - 界面设计人员进行图形界面设计。 模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功
我知道问题标题有点原始,我越是试图在一个语句中明确说明,就越不成功。无论如何,在Web应用程序项目中,我需要使用Log4j记录每个操作(以及其中发生的错误),项目中有数百个类,我想避免每个类都有一个Logger对象。日志记录所需的级别是ERROR。所以,我想到了一个包含静态方法的自定义类,用于处理Logger对象的“错误()”方法。如下所示: 因此,每当在项目中的任何地方调用“LoggerUtil
本文向大家介绍MyBatis 与 Hibernate 有哪些不同?相关面试题,主要包含被问及MyBatis 与 Hibernate 有哪些不同?时的应答技巧和注意事项,需要的朋友参考一下 Mybatis 和 hibernate 不同,它不完全是一个 ORM 框架,因为 MyBatis 需要 程序员自己编写 Sql 语句 Mybatis 直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度