# spring-data-jpa-extra
**Repository Path**: sakakokiya1/spring-data-jpa-extra
## Basic Information
- **Project Name**: spring-data-jpa-extra
- **Description**: spring data jpa with template dynamic query (eg: freemarker,velocity etc.) like mybatis
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 3
- **Created**: 2021-10-01
- **Last Updated**: 2021-10-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# spring-data-jpa-extra
## use spring data jpa more comfortable
I love spring-data-jpa, she set my hands free, crud methods are boring! However she is not perfect on dynamic native query and her return type must be an entity, although she provide us a specification solution, but i think it's heavy and not easy to use.
spring-data-jpa-extra comes to solve three problem:
- dynamic native query support like mybatis
- return type can be anything
- no code, just sql
## Example
- first add ComponentScan
by java bean
```java
@ComponentScan({"com.slyak","your.base.package"})
```
by xml
```xml
```
- second extends GenericJpaRepository insteadof JpaRepository
```java
public interface SampleRepository extends GenericJpaRepository {
@TemplateQuery
Page findByContent(@Param("content")String content, Pageable pageable);
@TemplateQuery
CustomVO findCustomVO(@Param("id")Long id);
}
```
- third create a file named Sample.sftl in your classpath:/sqls/ (you can change this path by setting placeholder spring.jpa.template-location)
- *.sftl naming rule: {EntityName}.sftl , @Entity("{EntityName}"), a simple class name will be used as EntityName if not set.
- In version >=2.0.0.RELEASE , new template 'sftl' take place of xml (xml is complex, but it is also supported).
sftl is a ftl template mixed with sqls. The template will be simplified as below. It can be recognized in Intellij IDEA , follow these steps:
settings->Editor->File Types , find "Freemarker Template" and register a new type named '*.sftl',choose it's 'Template Data Language' such as '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
```
## How to use?
you can use it by using source code or adding a maven dependency
notice: if the spring-data-jpa version >= 1.11.x (spring-boot version >= 1.5.x) please use 2.1.x.RELEASE .
```xml
com.slyak
spring-data-jpa-extra
2.0.4.RELEASE
```
config with annotation
```java
@EnableJpaRepositories(basePackages = "your.packages", repositoryBaseClass = GenericJpaRepositoryImpl.class, repositoryFactoryBeanClass = GenericJpaRepositoryFactoryBean.class)
```
or with xml
```xml
```
## 2 Miniute Tutorial
### Template Query
Methods annotated with @TemplateQuery tells QueryLookupStrategy to look up query by content,this is often used by dynamic query.
### Template Query Object
Object annotated with @TemplateQueryObject tells content process engine render params provided by object properties.
### Entity Assemblers
Entity assemblers can assembler entity with other entities, such as one to many relation or one to one relation.
### More Useful Methods (eg: mget togglestatus fakedelete)
```java
//batch get items and put the result into a map
Map mget(Collection ids);
//get items one by one for cache
Map mgetOneByOne(Collection ids);
//get items one by one for cache
List findAllOneByOne(Collection ids);
//toggle entity status if it has a Status property
void toggleStatus(ID id);
//set entity status to Status.DELETED if it has a Status property
void fakeDelete(ID... id);
```
## TODO List
- More types of content support (now freemarker)
- More JPA comparison support (now hibernate)
- Performance test and do some optimization
- More other useful features
- Change to the latest spring-data-jpa version
## Change Log
[CHANGELOG](./CHANGELOG.md)
## How to use in old version ( <2.0 )
old version guide