Skip to content

Commit

Permalink
#49
Browse files Browse the repository at this point in the history
  • Loading branch information
xlorne committed Aug 7, 2024
1 parent a0db527 commit 04b76dc
Show file tree
Hide file tree
Showing 9 changed files with 86 additions and 26 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

<groupId>com.codingapi.springboot</groupId>
<artifactId>springboot-parent</artifactId>
<version>2.8.4</version>
<version>2.8.5</version>

<url>https://github.com/codingapi/springboot-framewrok</url>
<name>springboot-parent</name>
Expand Down
2 changes: 1 addition & 1 deletion springboot-starter-data-fast/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>springboot-parent</artifactId>
<groupId>com.codingapi.springboot</groupId>
<version>2.8.4</version>
<version>2.8.5</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,22 @@ public <T> Page<T> queryForPage(String sql, String countSql, Class<T> clazz, Pag
return new PageImpl<>(list, pageRequest, count);
}

public <T> Page<T> queryForPage(String sql, Class<T> clazz, PageRequest pageRequest, Object... params) {
String countSql = "select count(1) "+sql;
return this.queryForPage(sql, countSql, clazz, pageRequest, params);
}

public Page<Map<String, Object>> queryForPage(String sql, String countSql, PageRequest pageRequest, Object... params) {
List<Map<String, Object>> list = jdbcTemplate.query(sql, params, new CamelCaseRowMapper());

long count = this.countQuery(countSql, params);
return new PageImpl<>(list, pageRequest, count);
}

public Page<Map<String, Object>> queryForPage(String sql, PageRequest pageRequest, Object... params) {
String countSql = "select count(1) "+sql;
return this.queryForPage(sql, countSql, pageRequest, params);
}


private long countQuery(String sql, Object... params) {
int paramsLength = params.length;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.codingapi.springboot.fast.jpa.repository;

import org.springframework.core.ResolvableType;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;

@NoRepositoryBean
public interface BaseRepository<T,ID> extends JpaRepository<T,ID> {

@SuppressWarnings("unchecked")
default Class<T> getEntityClass() {
ResolvableType resolvableType = ResolvableType.forClass(getClass()).as(BaseRepository.class);
return (Class<T>) resolvableType.getGeneric(0).resolve();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.codingapi.springboot.fast.jpa.repository;

import com.codingapi.springboot.fast.jdbc.JdbcQueryContext;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.NoRepositoryBean;

import java.util.List;
import java.util.Map;

@NoRepositoryBean
public interface DynamicNativeRepository<T, ID> extends BaseRepository<T, ID> {

default List<Map<String, Object>> dynamicNativeListMapQuery(String sql, Object... params) {
return JdbcQueryContext.getInstance().getJdbcQuery().queryForList(sql, params);
}

default List<T> dynamicNativeListQuery(String sql, Object... params) {
return dynamicNativeListQuery(getEntityClass(), sql, params);
}

default <V> List<V> dynamicNativeListQuery(Class<V> clazz, String sql, Object... params) {
return JdbcQueryContext.getInstance().getJdbcQuery().queryForList(sql, clazz, params);
}

default Page<T> dynamicNativePageQuery(String sql, String countSql, PageRequest request, Object... params) {
return dynamicNativePageQuery(getEntityClass(), sql, countSql, request, params);
}

default Page<T> dynamicNativePageQuery(String sql, PageRequest request, Object... params) {
return dynamicNativePageQuery(getEntityClass(), sql, request, params);
}

default <V> Page<V> dynamicNativePageQuery(Class<V> clazz, String sql, String countSql, PageRequest request, Object... params) {
return JdbcQueryContext.getInstance().getJdbcQuery().queryForPage(sql, countSql, clazz, request, params);
}

default <V> Page<V> dynamicNativePageQuery(Class<V> clazz, String sql, PageRequest request, Object... params) {
return JdbcQueryContext.getInstance().getJdbcQuery().queryForPage(sql, clazz, request, params);
}

default Page<Map<String, Object>> dynamicNativePageMapQuery(String sql, String countSql, PageRequest request, Object... params) {
return JdbcQueryContext.getInstance().getJdbcQuery().queryForPage(sql, countSql, request, params);
}

default Page<Map<String, Object>> dynamicNativePageMapQuery(String sql, PageRequest request, Object... params) {
return JdbcQueryContext.getInstance().getJdbcQuery().queryForPage(sql, request, params);
}

}
Original file line number Diff line number Diff line change
@@ -1,22 +1,15 @@
package com.codingapi.springboot.fast.jpa.repository;

import com.codingapi.springboot.fast.jpa.JpaQueryContext;
import org.springframework.core.ResolvableType;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;

import java.util.List;

@NoRepositoryBean
@SuppressWarnings("unchecked")
public interface DynamicRepository<T, ID> extends JpaRepository<T, ID> {

default Class<?> getEntityClass() {
ResolvableType resolvableType = ResolvableType.forClass(this.getClass()).as(DynamicRepository.class);
return resolvableType.getGeneric(new int[]{0}).resolve();
}
public interface DynamicRepository<T, ID> extends BaseRepository<T, ID> {

default List<T> dynamicListQuery(String sql, Object... params) {
return (List<T>) JpaQueryContext.getInstance().getJPAQuery().listQuery(getEntityClass(), sql, params);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,32 @@

import com.codingapi.springboot.framework.dto.request.PageRequest;
import com.codingapi.springboot.framework.dto.request.SearchRequest;
import org.springframework.core.ResolvableType;
import org.springframework.data.domain.Page;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.NoRepositoryBean;

/**
* 更强大的Repository对象
*
* @param <T>
* @param <ID>
*/
@NoRepositoryBean
public interface FastRepository<T, ID> extends JpaRepository<T, ID>, JpaSpecificationExecutor<T>, DynamicRepository<T, ID> {
public interface FastRepository<T, ID> extends JpaRepository<T, ID>, JpaSpecificationExecutor<T>, DynamicRepository<T, ID>, DynamicNativeRepository<T, ID> {

default Page<T> findAll(PageRequest request) {
if (request.hasFilter()) {
Class<T> clazz = getDomainClass();
Class<T> clazz = getEntityClass();
ExampleBuilder exampleBuilder = new ExampleBuilder(request, clazz);
return findAll(exampleBuilder.getExample(), request);
}
return findAll((org.springframework.data.domain.PageRequest) request);
}


@SuppressWarnings("unchecked")
default Class<T> getDomainClass() {
ResolvableType resolvableType = ResolvableType.forClass(getClass()).as(FastRepository.class);
return (Class<T>) resolvableType.getGeneric(0).resolve();
}


default Page<T> pageRequest(PageRequest request) {
if (request.hasFilter()) {
Class<T> clazz = getDomainClass();
Class<T> clazz = getEntityClass();
DynamicSQLBuilder dynamicSQLBuilder = new DynamicSQLBuilder(request, clazz);
return dynamicPageQuery(dynamicSQLBuilder.getHQL(), request, dynamicSQLBuilder.getParams());
}
Expand All @@ -44,7 +36,7 @@ default Page<T> pageRequest(PageRequest request) {


default Page<T> searchRequest(SearchRequest request) {
Class<T> clazz = getDomainClass();
Class<T> clazz = getEntityClass();
return pageRequest(request.toPageRequest(clazz));
}

Expand Down
2 changes: 1 addition & 1 deletion springboot-starter-security/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<artifactId>springboot-parent</artifactId>
<groupId>com.codingapi.springboot</groupId>
<version>2.8.4</version>
<version>2.8.5</version>
</parent>

<artifactId>springboot-starter-security</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion springboot-starter/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>com.codingapi.springboot</groupId>
<artifactId>springboot-parent</artifactId>
<version>2.8.4</version>
<version>2.8.5</version>
</parent>
<artifactId>springboot-starter</artifactId>

Expand Down

0 comments on commit 04b76dc

Please sign in to comment.