Skip to content

Commit 9c45f00

Browse files
committed
add FastMapping verify #16
1 parent 078ddeb commit 9c45f00

File tree

17 files changed

+125
-103
lines changed

17 files changed

+125
-103
lines changed

springboot-example/src/main/java/com/codingapi/springboot/example/application/executor/DemoExecutor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@
1111
public class DemoExecutor {
1212

1313
private final DemoRepository demoRepository;
14+
1415
public void swap(Demo demo1, Demo demo2) {
15-
DemoChangeService demoChangeService = new DemoChangeService(demo1,demo2);
16+
DemoChangeService demoChangeService = new DemoChangeService(demo1, demo2);
1617
demoChangeService.swap();
1718
}
1819

19-
public void create(String name){
20+
public void create(String name) {
2021
Demo demo = new Demo(name);
2122
demoRepository.save(demo);
2223
}

springboot-example/src/main/java/com/codingapi/springboot/example/infrastructure/jap/repository/DemoEntityRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.codingapi.springboot.example.infrastructure.entity.DemoEntity;
44
import org.springframework.data.jpa.repository.JpaRepository;
55

6-
public interface DemoEntityRepository extends JpaRepository<DemoEntity,Integer> {
6+
public interface DemoEntityRepository extends JpaRepository<DemoEntity, Integer> {
77

88

99
}

springboot-example/src/main/java/com/codingapi/springboot/example/infrastructure/repository/impl/DemoRepositoryImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
@Repository
1111
@AllArgsConstructor
12-
public class DemoRepositoryImpl implements DemoRepository {
12+
public class DemoRepositoryImpl implements DemoRepository {
1313

1414
private final DemoEntityRepository demoEntityRepository;
1515

springboot-example/src/main/java/com/codingapi/springboot/example/ui/controller/OpenController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ public class OpenController {
2222
private final DemoEntityRepository demoEntityRepository;
2323

2424
@GetMapping("/save")
25-
public Response save(@RequestParam("name") String name){
25+
public Response save(@RequestParam("name") String name) {
2626
executor.create(name);
2727
return Response.buildSuccess();
2828
}
2929

3030
@GetMapping("/findAll")
31-
public MultiResponse<DemoEntity> findAll(PageRequest pageRequest){
31+
public MultiResponse<DemoEntity> findAll(PageRequest pageRequest) {
3232
return MultiResponse.of(demoEntityRepository.findAll(pageRequest));
3333
}
3434
}

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,19 @@ public class DataFastConfiguration {
1919

2020
@Bean
2121
@ConditionalOnMissingBean
22-
public MvcEndpointMapping mvcEndpointMapping(RequestMappingHandlerMapping handlerMapping){
22+
public MvcEndpointMapping mvcEndpointMapping(RequestMappingHandlerMapping handlerMapping) {
2323
return new MvcEndpointMapping(handlerMapping);
2424
}
2525

2626
@Bean(initMethod = "registerMvcMapping")
2727
@ConditionalOnMissingBean
28-
public MvcMappingRegistrar mappingRegistrar(MvcEndpointMapping mvcEndpointMapping,JpaExecutor jpaExecutor){
29-
return new MvcMappingRegistrar(mvcEndpointMapping,jpaExecutor);
28+
public MvcMappingRegistrar mappingRegistrar(MvcEndpointMapping mvcEndpointMapping, JpaExecutor jpaExecutor) {
29+
return new MvcMappingRegistrar(mvcEndpointMapping, jpaExecutor);
3030
}
3131

3232
@Bean
3333
@ConditionalOnMissingBean
34-
public JpaExecutor jpaExecutor(EntityManager entityManager){
34+
public JpaExecutor jpaExecutor(EntityManager entityManager) {
3535
return new JpaExecutor(entityManager);
3636
}
3737

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/annotation/FastController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,4 @@
88
public @interface FastController {
99

1010

11-
1211
}

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/annotation/FastMapping.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,11 @@
2727

2828
/**
2929
* mvc request method
30-
*
3130
*/
3231
RequestMethod method() default RequestMethod.GET;
3332

3433
/**
3534
* mvc request url
36-
*
3735
*/
3836
String mapping() default "";
3937

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/exception/FastMappingErrorException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.codingapi.springboot.fast.exception;
22

3-
public class FastMappingErrorException extends Exception{
3+
public class FastMappingErrorException extends Exception {
44

55
public FastMappingErrorException(String message) {
66
super(message);

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/JpaExecutor.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,21 @@ public class JpaExecutor {
1313

1414
private final EntityManager entityManager;
1515

16-
public Object execute(String hql,String countHql,Object[] args,Class<?> returnType){
17-
JpaQuery query = new JpaQuery(hql,countHql,args,entityManager);
16+
public Object execute(String hql, String countHql, Object[] args, Class<?> returnType) {
17+
//only execute query sql
18+
JpaQuery query = new JpaQuery(hql, countHql, args, entityManager);
1819

19-
if(returnType.equals(SingleResponse.class)){
20+
if (returnType.equals(SingleResponse.class)) {
2021
return SingleResponse.of(query.getSingleResult());
2122
}
2223

23-
if(returnType.equals(MultiResponse.class)){
24-
Object returnData = query.getResultList();
25-
if(Page.class.isAssignableFrom(returnData.getClass())) {
26-
return MultiResponse.of((Page)returnData);
24+
if (returnType.equals(MultiResponse.class)) {
25+
Object returnData = query.getResultList();
26+
if (Page.class.isAssignableFrom(returnData.getClass())) {
27+
return MultiResponse.of((Page) returnData);
2728
}
2829

29-
if(Collection.class.isAssignableFrom(returnData.getClass())) {
30+
if (Collection.class.isAssignableFrom(returnData.getClass())) {
3031
return MultiResponse.of((Collection) returnData);
3132
}
3233
}

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/JpaQuery.java

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,76 +22,91 @@ public class JpaQuery {
2222

2323
private final EntityManager entityManager;
2424

25-
public JpaQuery(String hql,String countHql,Object[] args, EntityManager entityManager) {
25+
public JpaQuery(String hql, String countHql, Object[] args, EntityManager entityManager) {
2626
this.hql = hql;
2727
this.countHql = countHql;
2828
this.args = args;
2929
this.entityManager = entityManager;
3030
this.query = entityManager.createQuery(hql);
31-
this.setParameter(query);
31+
this.initParameter(query);
3232
}
3333

34+
/**
35+
* init query parameter
36+
*/
3437
@SneakyThrows
35-
private void setParameter(Query query){
36-
if(args!=null&&args.length>0) {
38+
private void initParameter(Query query) {
39+
if (args != null && args.length > 0) {
3740
Set<Parameter<?>> parameters = query.getParameters();
38-
for(Parameter<?> parameter:parameters){
41+
for (Parameter<?> parameter : parameters) {
3942
Integer position = parameter.getPosition();
40-
if(position!=null){
43+
if (position != null) {
4144
query.setParameter(position, args[position - 1]);
4245
}
43-
if(StringUtils.hasText(parameter.getName())){
46+
if (StringUtils.hasText(parameter.getName())) {
4447
String name = parameter.getName();
4548
Object obj = args[0];
46-
Field field = ReflectionUtils.findField(obj.getClass(),name);
47-
if(field!=null) {
49+
Field field = ReflectionUtils.findField(obj.getClass(), name);
50+
if (field != null) {
4851
field.setAccessible(true);
4952
query.setParameter(name, field.get(obj));
5053
}
5154
}
5255
}
53-
5456
}
5557
}
5658

59+
/**
60+
* is Page Request
61+
*/
5762
private boolean isPageable() {
58-
if(args!=null&& args.length>0){
59-
Object lastObj = args[args.length-1];
63+
if (args != null && args.length > 0 && StringUtils.hasText(countHql)) {
64+
Object lastObj = args[args.length - 1];
6065
return lastObj instanceof Pageable;
6166
}
6267
return false;
6368
}
6469

65-
private Pageable getPageable(){
66-
if(args!=null&& args.length>0){
67-
Object lastObj = args[args.length-1];
68-
if(lastObj instanceof Pageable){
69-
return (Pageable) lastObj;
70-
}
70+
/**
71+
* get PageRequest
72+
*/
73+
private Pageable getPageable() {
74+
if (isPageable()) {
75+
Object lastObj = args[args.length - 1];
76+
return (Pageable) lastObj;
7177
}
7278
return null;
7379
}
7480

81+
/**
82+
* execute get list result data
83+
*/
7584
public Object getResultList() {
76-
if(isPageable()&&StringUtils.hasText(countHql)){
85+
if (isPageable()) {
7786
Pageable pageable = getPageable();
7887
query.setFirstResult((int) pageable.getOffset());
7988
query.setMaxResults(pageable.getPageSize());
8089
long total = getCount();
81-
return new PageImpl<>(query.getResultList(),pageable,total);
90+
return new PageImpl<>(query.getResultList(), pageable, total);
8291
}
8392
return query.getResultList();
8493
}
8594

8695

87-
private long getCount(){
96+
/**
97+
* get sql execute data count
98+
*/
99+
private long getCount() {
88100
Query countQuery = entityManager.createQuery(countHql);
89-
setParameter(countQuery);
101+
initParameter(countQuery);
90102
return (Long) countQuery.getSingleResult();
91103
}
92104

93105

94-
public Object getSingleResult(){
106+
/**
107+
* get single result data
108+
*/
109+
public Object getSingleResult() {
95110
return query.getSingleResult();
96111
}
97112

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/MvcMethodProxy.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,20 @@ public class MvcMethodProxy implements InvocationHandler {
1414
@Override
1515
public Object invoke(Object proxy, Method method, Object[] args)
1616
throws Throwable {
17-
if(method.equals(Object.class.getMethod("equals", Object.class))){
17+
18+
if (method.equals(Object.class.getMethod("equals", Object.class))) {
1819
return false;
1920
}
20-
if(method.equals(Object.class.getMethod("hashCode"))){
21+
if (method.equals(Object.class.getMethod("hashCode"))) {
2122
return hashCode();
2223
}
2324
FastMapping fastMapping = method.getAnnotation(FastMapping.class);
24-
Class<?> returnType = method.getReturnType();
25-
return jpaExecutor.execute(fastMapping.value(),fastMapping.countQuery(),args,returnType);
25+
if (fastMapping != null) {
26+
Class<?> returnType = method.getReturnType();
27+
return jpaExecutor.execute(fastMapping.value(), fastMapping.countQuery(), args, returnType);
28+
}
29+
30+
// mvc mapping proxy can't execute return null.
31+
return null;
2632
}
2733
}

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/mapping/MvcEndpointMapping.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ public class MvcEndpointMapping {
1414

1515
private final RequestMappingHandlerMapping handlerMapping;
1616

17+
/**
18+
* add mvc mapping
19+
*
20+
* @param url mapping url
21+
* @param requestMethod request method
22+
* @param handler executor handler
23+
* @param method executor method
24+
*/
1725
public void addMapping(String url, RequestMethod requestMethod, Object handler, Method method) {
1826

1927
RequestMappingInfo.BuilderConfiguration options = new RequestMappingInfo.BuilderConfiguration();

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/registrar/DataFastBeanDefinitionRegistrar.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.codingapi.springboot.fast.registrar;
22

33
import com.codingapi.springboot.fast.annotation.FastController;
4-
import com.codingapi.springboot.framework.registrar.RegisterBeanDefinition;
4+
import com.codingapi.springboot.framework.registrar.RegisterBeanScanner;
55
import lombok.SneakyThrows;
66
import lombok.extern.slf4j.Slf4j;
77
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
@@ -19,17 +19,15 @@ public class DataFastBeanDefinitionRegistrar implements ImportBeanDefinitionRegi
1919
@SneakyThrows
2020
@Override
2121
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
22-
RegisterBeanDefinition registerBeanDefinition = new RegisterBeanDefinition(importingClassMetadata, FastController.class);
23-
Set<Class<?>> classSet = registerBeanDefinition.findTypes();
22+
RegisterBeanScanner registerBeanScanner = new RegisterBeanScanner(importingClassMetadata, FastController.class);
23+
Set<Class<?>> classSet = registerBeanScanner.findTypes();
2424

25-
//注册Bean
25+
//register bean
2626
for (Class<?> clazz : classSet) {
27-
log.info("FastController class:{}",clazz);
27+
log.info("scanner @FastController class:{}", clazz);
2828
MvcMappingRegistrar.classSet.add(clazz);
2929
}
3030
}
3131

3232

33-
34-
3533
}

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/registrar/MvcMappingRegistrar.java

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,43 +19,43 @@
1919
@Slf4j
2020
@AllArgsConstructor
2121
public class MvcMappingRegistrar {
22-
protected final static Set<Class<?>> classSet = new HashSet<>();
22+
protected final static Set<Class<?>> classSet = new HashSet<>();
2323
private final MvcEndpointMapping mvcEndpointMapping;
2424
private final JpaExecutor jpaExecutor;
2525

2626
@SneakyThrows
2727
public void registerMvcMapping() {
28-
for(Class<?> clazz:classSet){
29-
Method[] methods = clazz.getDeclaredMethods();
30-
for(Method method:methods){
31-
FastMapping fastMapping = method.getAnnotation(FastMapping.class);
32-
if(verify(fastMapping,method)) {
33-
MvcMethodProxy handler = new MvcMethodProxy(jpaExecutor);
34-
Object methodProxy = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, handler);
35-
mvcEndpointMapping.addMapping(fastMapping.mapping(), fastMapping.method(), methodProxy, method);
36-
}
37-
}
38-
}
28+
for (Class<?> clazz : classSet) {
29+
Method[] methods = clazz.getDeclaredMethods();
30+
for (Method method : methods) {
31+
FastMapping fastMapping = method.getAnnotation(FastMapping.class);
32+
if (verify(fastMapping, method)) {
33+
MvcMethodProxy handler = new MvcMethodProxy(jpaExecutor);
34+
Object methodProxy = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, handler);
35+
mvcEndpointMapping.addMapping(fastMapping.mapping(), fastMapping.method(), methodProxy, method);
36+
}
37+
}
38+
}
3939
}
4040

4141
private boolean verify(FastMapping fastMapping, Method method) throws FastMappingErrorException {
42-
if(fastMapping==null){
42+
if (fastMapping == null) {
4343
return false;
4444
}
4545

46-
if(!StringUtils.hasText(fastMapping.mapping())){
47-
throw new FastMappingErrorException(String.format("fast method %s missing mapping .",method.getName()));
46+
if (!StringUtils.hasText(fastMapping.mapping())) {
47+
throw new FastMappingErrorException(String.format("fast method %s missing mapping .", method.getName()));
4848
}
4949

50-
if(!StringUtils.hasText(fastMapping.value())){
51-
throw new FastMappingErrorException(String.format("fast mapping %s missing value .",fastMapping.mapping()));
50+
if (!StringUtils.hasText(fastMapping.value())) {
51+
throw new FastMappingErrorException(String.format("fast mapping %s missing value .", fastMapping.mapping()));
5252
}
5353

5454
Class<?>[] parameterTypes = method.getParameterTypes();
55-
for(Class<?> parameter:parameterTypes){
56-
if(Pageable.class.isAssignableFrom(parameter)){
57-
if(!StringUtils.hasText(fastMapping.countQuery())){
58-
throw new FastMappingErrorException(String.format("fast mapping %s missing countQuery .",fastMapping.mapping()));
55+
for (Class<?> parameter : parameterTypes) {
56+
if (Pageable.class.isAssignableFrom(parameter)) {
57+
if (!StringUtils.hasText(fastMapping.countQuery())) {
58+
throw new FastMappingErrorException(String.format("fast mapping %s missing countQuery .", fastMapping.mapping()));
5959
}
6060
}
6161
}

springboot-starter/src/main/java/com/codingapi/springboot/framework/crypto/AES.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public AES(String transform, byte[] keys, byte[] iv) {
3131

3232

3333
public AES(String key, String iv) {
34-
this("AES/CBC/PKCS5Padding",key.getBytes(StandardCharsets.UTF_8),iv.getBytes(StandardCharsets.UTF_8));
34+
this("AES/CBC/PKCS5Padding", key.getBytes(StandardCharsets.UTF_8), iv.getBytes(StandardCharsets.UTF_8));
3535
}
3636

3737

0 commit comments

Comments
 (0)