Giter VIP home page Giter VIP logo

spring-data-jpa-extra's Introduction

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

@ComponentScan({"com.slyak","your.base.package"})

by xml

<context:component-scan base-package="com.slyak,your.base.package"/>
  • second extends GenericJpaRepository instead of JpaRepository
	public interface SampleRepository extends GenericJpaRepository<Sample, Long> {
		@TemplateQuery
		Page<Sample> 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

--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 .

notice: if you are using spring-boot 2.0+ or spring5 , please use the latest version 3.0.0.RELEASE

spring version spring-data-jpa-extra version
spring 3 (spring-boot 1.5.x) 2.1.x.RELEASE
spring 4 (spring-boot 2.0.x) 3.0.0.RELEASE
    <dependency>
        <groupId>com.slyak</groupId>
        <artifactId>spring-data-jpa-extra</artifactId>
        <version>2.1.2.RELEASE</version>
    </dependency>

config with annotation

@EnableJpaRepositories(basePackages = "your.packages", repositoryBaseClass = GenericJpaRepositoryImpl.class, repositoryFactoryBeanClass = GenericJpaRepositoryFactoryBean.class)

or with xml

<jpa:repositories base-package="your.packages" repository-base-class="com.slyak.spring.jpa.GenericJpaRepositoryImpl" repository-factory-bean-class="com.slyak.spring.jpa.GenericJpaRepositoryFactoryBean"/>

Notice: if you are using spring-boot, the springboot-starter-jpa-extra should be the best choice!

2 Minute 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)

    //batch get items and put the result into a map
    Map<ID, T> mget(Collection<ID> ids);
    
    //get items one by one for cache
    Map<ID, T> mgetOneByOne(Collection<ID> ids);
    
    //get items one by one for cache
    List<T> findAllOneByOne(Collection<ID> 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

How to use in old version ( <2.0 )

old version guide

spring-data-jpa-extra's People

Contributors

stormning avatar wolfj avatar dsanch3z avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.