# 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 SLYAK # 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'. 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 ``` ## 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