# 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
# 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”。
```sql
--findByContent
SELECT * FROM t_sample WHERE 1=1
<#if content??>
AND content LIKE :content
#if>
--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 )
旧版指南