# spring-data-jpa-extra **Repository Path**: java_cloud/spring-data-jpa-extra ## Basic Information - **Project Name**: spring-data-jpa-extra - **Description**: spring-data-jpa-extra,她像mybatis一样,为Spring Data JPA提供了一个模板动态查询解决方案(如: freemarker,velocity etc.),但却比mybatis容易得多。我相信你会喜欢她。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://github.com/slyak/spring-data-jpa-extra - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 1 - **Created**: 2018-02-27 - **Last Updated**: 2024-03-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README SLYAK # spring-data-jpa-extra 首先得感谢slyak,stormning,wolfJ等贡献者。源代码来源:https://github.com/slyak/spring-data-jpa-extra ## 使用Spring Data JPA更加舒适 我喜欢spring-data-jpa, 她解放了我的双手,因为CRUD方法很枯燥!然而,她在动态原生查询上并不完美,她的返回类型必须是一个实体,尽管她提供了一个规范解决方案,但我认为它很重,而且不易使用。 spring-data-jpa-extra解决三个问题: - 像mybatis一样动态本地查询支持 - 返回类型不再是一个实体,您可以随意定义 - 没有代码,只是SQL ## Example - 第一步:先添加组件 使用 java bean ```java @ComponentScan({"com.slyak","your.base.package"}) ``` 使用 xml ```xml ``` - 第二步:继承 GenericJpaRepository 而不是 JpaRepository ```java public interface SampleRepository extends GenericJpaRepository { @TemplateQuery Page findByContent(@Param("content")String content, Pageable pageable); @TemplateQuery CustomVO findCustomVO(@Param("id")Long id); } ``` - 第三步: 在你的classpath:/sqls/中创建一个名为Sample.sftl的文件(您可以通过设置占位符来更改此路径 spring.jpa.template-location) - *.sftl 命名规则: {EntityName}.sftl , @Entity("{EntityName}"), 如果没有设置EntityName,将会被自动命名一个简单的名字。 - 在版本 >= 2.0.0.RELEASE时, 新的模版 'sftl'会取代 xml (xml比较繁琐, 但是依然会被支持). sftl是一个用sqls混合的ftl模版 。这个模版将会简化如下. 她在Intellij IDEA中是能够被识别的 , 但需遵循以下步骤: settings->Editor->File Types , 找到"Freemarker Template" 和注册一个新的类型名称 '*.sftl',选择它作为“模板数据语言”,如“MySQL”。 SLYAK SLYAK ```sql --findByContent SELECT * FROM t_sample WHERE 1=1 <#if content??> AND content LIKE :content --findCustomVO SELECT id,name as viewName FROM t_sample WHERE id=:id ``` ## 如何使用? 你可以通过使用源代码或添加一个Maven依赖使用它 注意: 如果spring-data-jpa版本 >= 1.11.x (spring-boot 版本 >= 1.5.x) 请使用 2.1.x.RELEASE . ```xml com.slyak spring-data-jpa-extra 2.0.4.RELEASE ``` 用注解配置 ```java @EnableJpaRepositories(basePackages = "your.packages", repositoryBaseClass = GenericJpaRepositoryImpl.class, repositoryFactoryBeanClass = GenericJpaRepositoryFactoryBean.class) ``` 用xml配置 ```xml ``` ## 2 简单教程 ### 模板查询 通过方法注解使用 @TemplateQuery告知 QueryLookupStrategy去查找内容,这通常用于动态查询. ### 模板查询对象 对象注解使用 @TemplateQueryObject告知内容流程引擎渲染对参数设置进行渲染. ### 实体装载 实体装载可以看作是实体与其他实体的关系描述, 如:一对多关系或一对一关系。 ### 更多有用的方法 (如: mget togglestatus fakedelete) ```java //批量获取集合并将结果放入一个map中。 Map mget(Collection ids); //循环获取缓存集合 Map mgetOneByOne(Collection ids); //循环获取缓存集合 List findAllOneByOne(Collection ids); //如果具有状态属性,则切换实体状态 void toggleStatus(ID id); //如果有状态属性,设置实体状态为status.deleted void fakeDelete(ID... id); ``` ## 待办事项 - 更多类型的支持 (就像现在的freemarker) - 更多JPA的支持(就像现在的hibernate) - 性能测试与优化 - 更多其他有用的特性 - 更新spring-data-jpa最后版本变化 ## 更新日志 [CHANGELOG](./CHANGELOG.md) ## 如何使用旧版本 ( <2.0 ) 旧版指南