Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b3287e16a5 | ||
|
|
8a2dcb948e | ||
|
|
ca5055e225 | ||
|
|
37ace5d851 | ||
|
|
a671902f8c | ||
|
|
a22468cb75 |
41
README.md
41
README.md
@@ -3,6 +3,7 @@ Generates the standard SPRING 3 layer CRUD architecture starting from JPA entiti
|
||||
* * *
|
||||

|
||||
* * *
|
||||
|
||||
## How to run as a standalone application:
|
||||
1. Download and extract the ZIP/TAR file from [releases](https://github.com/GaetanoPiazzolla/Layer3Gen/releases);
|
||||
2. Edit the file in /bin directory named _3layer-settings.yml_;
|
||||
@@ -11,10 +12,17 @@ Generates the standard SPRING 3 layer CRUD architecture starting from JPA entiti
|
||||
## How to run as gradle plugin:
|
||||
1. Add the plugin in your build.gradle;
|
||||
|
||||
```groovy
|
||||
plugins {
|
||||
id "gae.piaz.layer3gen" version "1.9"
|
||||
}
|
||||
```
|
||||
or you can use gradle [legacy plugin](https://docs.gradle.org/current/userguide/plugins.html#sec:old_plugin_application) for older gradle versions:
|
||||
|
||||
```groovy
|
||||
buildscript {
|
||||
dependencies {
|
||||
classpath "gradle.plugin.gae.piaz:layer3gen:1.8"
|
||||
classpath "gae.piaz:layer3gen:1.9"
|
||||
}
|
||||
// ....
|
||||
}
|
||||
@@ -22,22 +30,23 @@ buildscript {
|
||||
apply plugin: 'gae.piaz.layer3gen'
|
||||
```
|
||||
|
||||
2. Create a file named _3layer-settings.yml_ in the directory src/main/resources/;
|
||||
2. Create a file named _3layer-settings.yml_ (you willl find an example below) in the directory src/main/resources/;
|
||||
3. Run the gradle task.
|
||||
|
||||
```shell script
|
||||
gradlew layer3gen
|
||||
gradlew clean build layer3gen
|
||||
```
|
||||
|
||||
## 3layer-settings.yml configuration template:
|
||||
```yml
|
||||
projectPath: /home/tano/workspace_autogenerate/springboot-3layer-generator/demo
|
||||
# projectPath: c://workspace_private/springboot-3layer-generator/demo
|
||||
projectPath: /home/yourproject/demo
|
||||
# projectPath: c://workspace/demo
|
||||
classesDirectory: build/classes/java/main
|
||||
outputDirectory : src/main/java
|
||||
options:
|
||||
dtoLayer : true
|
||||
serviceInterface: true
|
||||
dtoLayer : true # generates the dto from entities, controller using dto, and mapper layer
|
||||
serviceInterface: true # whatever to generate CrudService Interface or not
|
||||
entityControllers: false # whatever to generate controller using jpa entity or not
|
||||
|
||||
inputPackages:
|
||||
jpaEntities : com.example.demo.model
|
||||
@@ -46,6 +55,8 @@ outputPackages:
|
||||
repositories : com.example.demo.repository
|
||||
services: com.example.demo.service
|
||||
controllers: com.example.demo.controller
|
||||
dtos: gae.piaz.layer3gen.output.dtos # if this in not specified the dto package will be under the controllers package
|
||||
mappers: gae.piaz.layer3gen.output.mappers # if this in not specified the mapper package will be under the services package
|
||||
```
|
||||
|
||||
## Examples:
|
||||
@@ -77,14 +88,14 @@ public class BooksService implements CrudService<Books,java.lang.Integer> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Books> read(Books entity, Pageable pageable) {
|
||||
public Page<Books> find(Books entity, Pageable pageable) {
|
||||
Example<Books> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Books readOne(java.lang.Integer primaryKey) {
|
||||
return repository.getOne(primaryKey);
|
||||
public Optional<Book> getOne(java.lang.Integer primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -120,20 +131,20 @@ public class BooksControllerDTO implements CrudController<BooksDTO,java.lang.Int
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<BooksDTO>> read(
|
||||
public ResponseEntity<Page<BooksDTO>> find(
|
||||
@RequestBody BooksDTO dto,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
Books entity = mapper.toEntity(dto);
|
||||
Page<BooksDTO> pages = service.read(entity, pageable).map(mapper::toDto);
|
||||
Page<BooksDTO> pages = service.find(entity, pageable).map(mapper::toDto);
|
||||
return ResponseEntity.ok(pages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<BooksDTO> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
Books entity = service.readOne(primaryKey);
|
||||
return ResponseEntity.ok(mapper.toDto(entity));
|
||||
public ResponseEntity<BookDTO> getOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
Optional<Book> entity = service.getOne(primaryKey);
|
||||
return entity.map(e -> ResponseEntity.ok(mapper.toDto(e))).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
16
build.gradle
16
build.gradle
@@ -4,11 +4,12 @@ plugins {
|
||||
id 'java-gradle-plugin'
|
||||
id 'maven-publish'
|
||||
id 'application'
|
||||
id "com.diffplug.spotless" version "6.15.0"
|
||||
id 'com.gradle.plugin-publish' version '0.12.0'
|
||||
}
|
||||
|
||||
group = 'gae.piaz'
|
||||
version = '1.8'
|
||||
version = '1.9'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
@@ -28,11 +29,11 @@ dependencies {
|
||||
implementation 'org.reflections:reflections:0.9.11' // read classes
|
||||
implementation 'org.freemarker:freemarker:2.3.23'// write classes
|
||||
|
||||
compileOnly 'org.projectlombok:lombok:1.18.2' // autogenerate setter getter etc
|
||||
compileOnly 'org.projectlombok:lombok:1.18.26' // autogenerate setter getter etc
|
||||
compileOnly gradleApi() // gradle plugin
|
||||
|
||||
annotationProcessor "org.mapstruct:mapstruct-processor:1.3.1.Final"
|
||||
annotationProcessor 'org.projectlombok:lombok:1.18.12'
|
||||
annotationProcessor 'org.projectlombok:lombok:1.18.26'
|
||||
|
||||
testImplementation 'junit:junit:4.12'
|
||||
}
|
||||
@@ -74,3 +75,12 @@ installDist {
|
||||
exclude 'gradle-api-6.6.1.jar'
|
||||
}
|
||||
|
||||
spotless {
|
||||
java {
|
||||
importOrder()
|
||||
removeUnusedImports()
|
||||
cleanthat()
|
||||
googleJavaFormat()
|
||||
formatAnnotations()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
projectPath: /home/tano/workspace_autogenerate/springboot-3layer-generator/demo
|
||||
projectPath: /home/workspace/demo
|
||||
classesDirectory: build/classes/java/main
|
||||
outputDirectory : src/main/java
|
||||
options:
|
||||
dtoLayer : true
|
||||
serviceInterface: true
|
||||
entityControllers: true
|
||||
|
||||
inputPackages:
|
||||
jpaEntities : com.example.demo.model
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
|
||||
buildscript {
|
||||
dependencies {
|
||||
classpath("gradle.plugin.gae.piaz:layer3gen:1.8")
|
||||
}
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
@@ -12,9 +7,10 @@ buildscript {
|
||||
plugins {
|
||||
java
|
||||
id("org.springframework.boot") version "3.0.0"
|
||||
id("gae.piaz.layer3gen") version "1.9"
|
||||
}
|
||||
|
||||
apply(plugin = "io.spring.dependency-management")
|
||||
apply(plugin = "gae.piaz.layer3gen")
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
@@ -28,15 +24,13 @@ repositories {
|
||||
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter-web")
|
||||
|
||||
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
|
||||
implementation( "org.springframework.boot:spring-boot-starter-web")
|
||||
implementation ("org.mapstruct:mapstruct:1.3.1.Final")
|
||||
compileOnly( "org.projectlombok:lombok:1.18.2")
|
||||
|
||||
annotationProcessor( "org.mapstruct:mapstruct-processor:1.3.1.Final")
|
||||
annotationProcessor( "org.projectlombok:lombok:1.18.24")
|
||||
|
||||
implementation ("org.mapstruct:mapstruct:1.5.3.Final")
|
||||
compileOnly( "org.projectlombok:lombok:1.18.26")
|
||||
runtimeOnly 'com.h2database:h2'
|
||||
annotationProcessor( "org.projectlombok:lombok:1.18.26")
|
||||
annotationProcessor( "org.mapstruct:mapstruct-processor:1.5.3.Final")
|
||||
}
|
||||
|
||||
group = "com.example"
|
||||
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/book/")
|
||||
@@ -31,17 +32,17 @@ public class BookController implements CrudController<Book,java.lang.Integer>{
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<Book>> read(
|
||||
public ResponseEntity<Page<Book>> find(
|
||||
@RequestBody Book entity,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
return ResponseEntity.ok(service.read(entity,pageable));
|
||||
return ResponseEntity.ok(service.find(entity,pageable));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Book> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
return ResponseEntity.ok(service.readOne(primaryKey));
|
||||
public ResponseEntity<Book> getOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
return service.getOne(primaryKey).map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -11,9 +11,10 @@ import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/book-dto/")
|
||||
@@ -40,20 +41,20 @@ public class BookControllerDTO implements CrudController<BookDTO,java.lang.Integ
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<BookDTO>> read(
|
||||
public ResponseEntity<Page<BookDTO>> find(
|
||||
@RequestBody BookDTO dto,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
Book entity = mapper.toEntity(dto);
|
||||
Page<BookDTO> pages = service.read(entity, pageable).map(mapper::toDto);
|
||||
Page<BookDTO> pages = service.find(entity, pageable).map(mapper::toDto);
|
||||
return ResponseEntity.ok(pages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<BookDTO> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
Book entity = service.readOne(primaryKey);
|
||||
return ResponseEntity.ok(mapper.toDto(entity));
|
||||
public ResponseEntity<BookDTO> getOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
Optional<Book> entity = service.getOne(primaryKey);
|
||||
return entity.map(e -> ResponseEntity.ok(mapper.toDto(e))).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
public interface CrudController<O,P>{
|
||||
|
||||
@@ -19,9 +19,10 @@ public interface CrudController<O,P>{
|
||||
ResponseEntity<O> update(O object);
|
||||
|
||||
@PostMapping("find")
|
||||
ResponseEntity<Page<O>> read(O object, Integer page, Integer size);
|
||||
ResponseEntity<Page<O>> find(O object, Integer page, Integer size);
|
||||
|
||||
@GetMapping("{id}")
|
||||
ResponseEntity<O> readOne(P primaryKey);
|
||||
ResponseEntity<O> getOne(P primaryKey);
|
||||
|
||||
@DeleteMapping
|
||||
void delete(P primaryKey);
|
||||
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/order/")
|
||||
@@ -31,17 +32,17 @@ public class OrderController implements CrudController<Order,java.lang.Integer>{
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<Order>> read(
|
||||
public ResponseEntity<Page<Order>> find(
|
||||
@RequestBody Order entity,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
return ResponseEntity.ok(service.read(entity,pageable));
|
||||
return ResponseEntity.ok(service.find(entity,pageable));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Order> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
return ResponseEntity.ok(service.readOne(primaryKey));
|
||||
public ResponseEntity<Order> getOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
return service.getOne(primaryKey).map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -11,9 +11,10 @@ import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/order-dto/")
|
||||
@@ -40,20 +41,20 @@ public class OrderControllerDTO implements CrudController<OrderDTO,java.lang.Int
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<OrderDTO>> read(
|
||||
public ResponseEntity<Page<OrderDTO>> find(
|
||||
@RequestBody OrderDTO dto,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
Order entity = mapper.toEntity(dto);
|
||||
Page<OrderDTO> pages = service.read(entity, pageable).map(mapper::toDto);
|
||||
Page<OrderDTO> pages = service.find(entity, pageable).map(mapper::toDto);
|
||||
return ResponseEntity.ok(pages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<OrderDTO> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
Order entity = service.readOne(primaryKey);
|
||||
return ResponseEntity.ok(mapper.toDto(entity));
|
||||
public ResponseEntity<OrderDTO> getOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
Optional<Order> entity = service.getOne(primaryKey);
|
||||
return entity.map(e -> ResponseEntity.ok(mapper.toDto(e))).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/user/")
|
||||
@@ -31,17 +32,17 @@ public class UserController implements CrudController<User,java.lang.Integer>{
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<User>> read(
|
||||
public ResponseEntity<Page<User>> find(
|
||||
@RequestBody User entity,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
return ResponseEntity.ok(service.read(entity,pageable));
|
||||
return ResponseEntity.ok(service.find(entity,pageable));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<User> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
return ResponseEntity.ok(service.readOne(primaryKey));
|
||||
public ResponseEntity<User> getOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
return service.getOne(primaryKey).map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -11,9 +11,10 @@ import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/user-dto/")
|
||||
@@ -40,20 +41,20 @@ public class UserControllerDTO implements CrudController<UserDTO,java.lang.Integ
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<UserDTO>> read(
|
||||
public ResponseEntity<Page<UserDTO>> find(
|
||||
@RequestBody UserDTO dto,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
User entity = mapper.toEntity(dto);
|
||||
Page<UserDTO> pages = service.read(entity, pageable).map(mapper::toDto);
|
||||
Page<UserDTO> pages = service.find(entity, pageable).map(mapper::toDto);
|
||||
return ResponseEntity.ok(pages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<UserDTO> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
User entity = service.readOne(primaryKey);
|
||||
return ResponseEntity.ok(mapper.toDto(entity));
|
||||
public ResponseEntity<UserDTO> getOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
Optional<User> entity = service.getOne(primaryKey);
|
||||
return entity.map(e -> ResponseEntity.ok(mapper.toDto(e))).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,11 +2,8 @@ package com.example.demo.controller.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Data
|
||||
public class BookDTO {
|
||||
|
||||
@@ -2,11 +2,8 @@ package com.example.demo.controller.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Data
|
||||
public class OrderDTO {
|
||||
|
||||
@@ -2,11 +2,8 @@ package com.example.demo.controller.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Data
|
||||
public class UserDTO {
|
||||
|
||||
@@ -6,7 +6,7 @@ import java.util.List;
|
||||
|
||||
/**
|
||||
* The persistent class for the books database table.
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Entity
|
||||
@Table(name="books")
|
||||
|
||||
@@ -16,7 +16,7 @@ import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* The persistent class for the orders database table.
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Entity
|
||||
@Table(name="orders")
|
||||
|
||||
@@ -6,7 +6,7 @@ import java.util.List;
|
||||
|
||||
/**
|
||||
* The persistent class for the users database table.
|
||||
*
|
||||
*
|
||||
*/
|
||||
@Entity
|
||||
@Table(name="users")
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Repository
|
||||
public interface BookRepository extends JpaRepository<Book, java.lang.Integer> {
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Repository
|
||||
public interface OrderRepository extends JpaRepository<Order, java.lang.Integer> {
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Repository
|
||||
public interface UserRepository extends JpaRepository<User, java.lang.Integer> {
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.example.demo.service;
|
||||
import com.example.demo.model.Book;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
public interface BookService extends CrudService<Book,java.lang.Integer> {
|
||||
|
||||
|
||||
@@ -2,18 +2,20 @@ package com.example.demo.service;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
public interface CrudService<E,P> {
|
||||
public interface CrudService<E, P> {
|
||||
|
||||
E create(E entity);
|
||||
|
||||
E update(E entity);
|
||||
|
||||
Page<E> read(E entity, Pageable pageable);
|
||||
E readOne(P primaryKey);
|
||||
Page<E> find(E entity, Pageable pageable);
|
||||
|
||||
Optional<E> getOne(P primaryKey);
|
||||
|
||||
void delete(P primaryKey);
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.example.demo.service;
|
||||
import com.example.demo.model.Order;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
public interface OrderService extends CrudService<Order,java.lang.Integer> {
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.example.demo.service;
|
||||
import com.example.demo.model.User;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
public interface UserService extends CrudService<User,java.lang.Integer> {
|
||||
|
||||
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Service
|
||||
public class BookServiceBean implements BookService {
|
||||
@@ -30,14 +31,14 @@ public class BookServiceBean implements BookService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Book> read(Book entity, Pageable pageable) {
|
||||
public Page<Book> find(Book entity, Pageable pageable) {
|
||||
Example<Book> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Book readOne(java.lang.Integer primaryKey) {
|
||||
return repository.getOne(primaryKey);
|
||||
public Optional<Book> getOne(java.lang.Integer primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Service
|
||||
public class OrderServiceBean implements OrderService {
|
||||
@@ -30,14 +31,14 @@ public class OrderServiceBean implements OrderService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Order> read(Order entity, Pageable pageable) {
|
||||
public Page<Order> find(Order entity, Pageable pageable) {
|
||||
Example<Order> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Order readOne(java.lang.Integer primaryKey) {
|
||||
return repository.getOne(primaryKey);
|
||||
public Optional<Order> getOne(java.lang.Integer primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Service
|
||||
public class UserServiceBean implements UserService {
|
||||
@@ -30,14 +31,14 @@ public class UserServiceBean implements UserService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<User> read(User entity, Pageable pageable) {
|
||||
public Page<User> find(User entity, Pageable pageable) {
|
||||
Example<User> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public User readOne(java.lang.Integer primaryKey) {
|
||||
return repository.getOne(primaryKey);
|
||||
public Optional<User> getOne(java.lang.Integer primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.example.demo.controller.dto.BookDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface BookMapper {
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.example.demo.controller.dto.OrderDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface OrderMapper {
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.example.demo.controller.dto.UserDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 11:09:45 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface UserMapper {
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.example.demo.serviceInterface;
|
||||
|
||||
import com.example.demo.model.Book;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:11:11 PM
|
||||
*/
|
||||
public interface BookService extends CrudService<Book,java.lang.Integer> {
|
||||
|
||||
}
|
||||
@@ -2,18 +2,20 @@ package com.example.demo.serviceInterface;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:45:37 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:20:30 PM
|
||||
*/
|
||||
public interface CrudService<E,P> {
|
||||
public interface CrudService<E, P> {
|
||||
|
||||
E create(E entity);
|
||||
|
||||
E update(E entity);
|
||||
|
||||
Page<E> read(E entity, Pageable pageable);
|
||||
E readOne(P primaryKey);
|
||||
Page<E> find(E entity, Pageable pageable);
|
||||
|
||||
Optional<E> getOne(P primaryKey);
|
||||
|
||||
void delete(P primaryKey);
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.example.demo.serviceInterface;
|
||||
|
||||
import com.example.demo.model.Order;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:11:11 PM
|
||||
*/
|
||||
public interface OrderService extends CrudService<Order,java.lang.Integer> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.example.demo.serviceInterface;
|
||||
|
||||
import com.example.demo.model.User;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:11:11 PM
|
||||
*/
|
||||
public interface UserService extends CrudService<User,java.lang.Integer> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.example.demo.serviceInterface.impl;
|
||||
|
||||
import com.example.demo.model.Book;
|
||||
import com.example.demo.repository.BookRepository;
|
||||
import com.example.demo.serviceInterface.BookService;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:11:11 PM
|
||||
*/
|
||||
@Service
|
||||
public class BookServiceBean implements BookService {
|
||||
|
||||
@Autowired
|
||||
private BookRepository repository;
|
||||
|
||||
@Override
|
||||
public Book create(Book entity) {
|
||||
return repository.save(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Book update(Book entity) {
|
||||
return repository.save(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Book> find(Book entity, Pageable pageable) {
|
||||
Example<Book> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Book> getOne(java.lang.Integer primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(java.lang.Integer primaryKey) {
|
||||
repository.deleteById(primaryKey);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.example.demo.serviceInterface.impl;
|
||||
|
||||
import com.example.demo.model.Order;
|
||||
import com.example.demo.repository.OrderRepository;
|
||||
import com.example.demo.serviceInterface.OrderService;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:11:11 PM
|
||||
*/
|
||||
@Service
|
||||
public class OrderServiceBean implements OrderService {
|
||||
|
||||
@Autowired
|
||||
private OrderRepository repository;
|
||||
|
||||
@Override
|
||||
public Order create(Order entity) {
|
||||
return repository.save(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Order update(Order entity) {
|
||||
return repository.save(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Order> find(Order entity, Pageable pageable) {
|
||||
Example<Order> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Order> getOne(java.lang.Integer primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(java.lang.Integer primaryKey) {
|
||||
repository.deleteById(primaryKey);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.example.demo.serviceInterface.impl;
|
||||
|
||||
import com.example.demo.model.User;
|
||||
import com.example.demo.repository.UserRepository;
|
||||
import com.example.demo.serviceInterface.UserService;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:11:11 PM
|
||||
*/
|
||||
@Service
|
||||
public class UserServiceBean implements UserService {
|
||||
|
||||
@Autowired
|
||||
private UserRepository repository;
|
||||
|
||||
@Override
|
||||
public User create(User entity) {
|
||||
return repository.save(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public User update(User entity) {
|
||||
return repository.save(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<User> find(User entity, Pageable pageable) {
|
||||
Example<User> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<User> getOne(java.lang.Integer primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(java.lang.Integer primaryKey) {
|
||||
repository.deleteById(primaryKey);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.example.demo.serviceInterface.mapper;
|
||||
|
||||
import com.example.demo.model.Book;
|
||||
import com.example.demo.controller.dto.BookDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:11:11 PM
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface BookMapper {
|
||||
|
||||
Book toEntity(BookDTO dto);
|
||||
|
||||
BookDTO toDto(Book entity);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.example.demo.serviceInterface.mapper;
|
||||
|
||||
import com.example.demo.model.Order;
|
||||
import com.example.demo.controller.dto.OrderDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:11:11 PM
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface OrderMapper {
|
||||
|
||||
Order toEntity(OrderDTO dto);
|
||||
|
||||
OrderDTO toDto(Order entity);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.example.demo.serviceInterface.mapper;
|
||||
|
||||
import com.example.demo.model.User;
|
||||
import com.example.demo.controller.dto.UserDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:11:11 PM
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface UserMapper {
|
||||
|
||||
User toEntity(UserDTO dto);
|
||||
|
||||
UserDTO toDto(User entity);
|
||||
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
projectPath: /Users/Gaetano_Piazzolla/Workspaces/workspace_private/Layer3Gen/demo-jakarta
|
||||
projectPath: ./
|
||||
outputDirectory : src/main/java
|
||||
options:
|
||||
dtoLayer : true
|
||||
serviceInterface: true
|
||||
entityControllers: true
|
||||
|
||||
inputPackages:
|
||||
jpaEntities : com.example.demo.model
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
|
||||
buildscript {
|
||||
dependencies {
|
||||
classpath "gradle.plugin.gae.piaz:layer3gen:1.8"
|
||||
}
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
@@ -11,6 +8,7 @@ plugins {
|
||||
id 'org.springframework.boot' version '2.3.4.RELEASE'
|
||||
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
|
||||
id 'java'
|
||||
id "gae.piaz.layer3gen" version "1.9"
|
||||
}
|
||||
|
||||
repositories {
|
||||
@@ -21,27 +19,19 @@ group = 'com.example'
|
||||
version = '0.0.1-SNAPSHOT'
|
||||
|
||||
dependencies {
|
||||
|
||||
implementation 'org.springframework.boot:spring-boot-starter'
|
||||
|
||||
// needed dependency also for generated classes
|
||||
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||
implementation 'org.mapstruct:mapstruct:1.3.1.Final'
|
||||
compileOnly 'org.projectlombok:lombok:1.18.2'
|
||||
|
||||
annotationProcessor "org.mapstruct:mapstruct-processor:1.3.1.Final"
|
||||
annotationProcessor 'org.projectlombok:lombok:1.18.12'
|
||||
|
||||
|
||||
implementation 'org.mapstruct:mapstruct:1.5.3.Final'
|
||||
compileOnly 'org.projectlombok:lombok:1.18.26'
|
||||
runtimeOnly 'com.h2database:h2'
|
||||
annotationProcessor 'org.projectlombok:lombok:1.18.26'
|
||||
annotationProcessor "org.mapstruct:mapstruct-processor:1.5.3.Final"
|
||||
testImplementation('org.springframework.boot:spring-boot-starter-test') {
|
||||
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
|
||||
apply plugin: 'gae.piaz.layer3gen'
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.example.demo.controller;
|
||||
|
||||
import com.example.demo.model.Book;
|
||||
import com.example.demo.serviceInterface.BookService;
|
||||
import com.example.demo.service.BookService;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/book/")
|
||||
@@ -31,17 +32,17 @@ public class BookController implements CrudController<Book,java.lang.Integer>{
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<Book>> read(
|
||||
public ResponseEntity<Page<Book>> find(
|
||||
@RequestBody Book entity,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
return ResponseEntity.ok(service.read(entity,pageable));
|
||||
return ResponseEntity.ok(service.find(entity,pageable));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Book> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
return ResponseEntity.ok(service.readOne(primaryKey));
|
||||
public ResponseEntity<Book> getOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
return service.getOne(primaryKey).map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,8 +2,8 @@ package com.example.demo.controller;
|
||||
|
||||
import com.example.demo.model.Book;
|
||||
import com.example.demo.controller.dto.BookDTO;
|
||||
import com.example.demo.serviceInterface.BookService;
|
||||
import com.example.demo.serviceInterface.mapper.BookMapper;
|
||||
import com.example.demo.service.BookService;
|
||||
import com.example.demo.service.mapper.BookMapper;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
@@ -11,9 +11,10 @@ import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/book-dto/")
|
||||
@@ -40,20 +41,20 @@ public class BookControllerDTO implements CrudController<BookDTO,java.lang.Integ
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<BookDTO>> read(
|
||||
public ResponseEntity<Page<BookDTO>> find(
|
||||
@RequestBody BookDTO dto,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
Book entity = mapper.toEntity(dto);
|
||||
Page<BookDTO> pages = service.read(entity, pageable).map(mapper::toDto);
|
||||
Page<BookDTO> pages = service.find(entity, pageable).map(mapper::toDto);
|
||||
return ResponseEntity.ok(pages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<BookDTO> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
Book entity = service.readOne(primaryKey);
|
||||
return ResponseEntity.ok(mapper.toDto(entity));
|
||||
public ResponseEntity<BookDTO> getOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
Optional<Book> entity = service.getOne(primaryKey);
|
||||
return entity.map(e -> ResponseEntity.ok(mapper.toDto(e))).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:29 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
public interface CrudController<O,P>{
|
||||
|
||||
@@ -19,9 +19,10 @@ public interface CrudController<O,P>{
|
||||
ResponseEntity<O> update(O object);
|
||||
|
||||
@PostMapping("find")
|
||||
ResponseEntity<Page<O>> read(O object, Integer page, Integer size);
|
||||
ResponseEntity<Page<O>> find(O object, Integer page, Integer size);
|
||||
|
||||
@GetMapping("{id}")
|
||||
ResponseEntity<O> readOne(P primaryKey);
|
||||
ResponseEntity<O> getOne(P primaryKey);
|
||||
|
||||
@DeleteMapping
|
||||
void delete(P primaryKey);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.example.demo.controller;
|
||||
|
||||
import com.example.demo.model.Order;
|
||||
import com.example.demo.serviceInterface.OrderService;
|
||||
import com.example.demo.service.OrderService;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:29 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/order/")
|
||||
@@ -31,17 +32,17 @@ public class OrderController implements CrudController<Order,java.lang.Integer>{
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<Order>> read(
|
||||
public ResponseEntity<Page<Order>> find(
|
||||
@RequestBody Order entity,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
return ResponseEntity.ok(service.read(entity,pageable));
|
||||
return ResponseEntity.ok(service.find(entity,pageable));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Order> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
return ResponseEntity.ok(service.readOne(primaryKey));
|
||||
public ResponseEntity<Order> getOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
return service.getOne(primaryKey).map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,8 +2,8 @@ package com.example.demo.controller;
|
||||
|
||||
import com.example.demo.model.Order;
|
||||
import com.example.demo.controller.dto.OrderDTO;
|
||||
import com.example.demo.serviceInterface.OrderService;
|
||||
import com.example.demo.serviceInterface.mapper.OrderMapper;
|
||||
import com.example.demo.service.OrderService;
|
||||
import com.example.demo.service.mapper.OrderMapper;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
@@ -11,9 +11,10 @@ import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/order-dto/")
|
||||
@@ -40,20 +41,20 @@ public class OrderControllerDTO implements CrudController<OrderDTO,java.lang.Int
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<OrderDTO>> read(
|
||||
public ResponseEntity<Page<OrderDTO>> find(
|
||||
@RequestBody OrderDTO dto,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
Order entity = mapper.toEntity(dto);
|
||||
Page<OrderDTO> pages = service.read(entity, pageable).map(mapper::toDto);
|
||||
Page<OrderDTO> pages = service.find(entity, pageable).map(mapper::toDto);
|
||||
return ResponseEntity.ok(pages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<OrderDTO> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
Order entity = service.readOne(primaryKey);
|
||||
return ResponseEntity.ok(mapper.toDto(entity));
|
||||
public ResponseEntity<OrderDTO> getOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
Optional<Order> entity = service.getOne(primaryKey);
|
||||
return entity.map(e -> ResponseEntity.ok(mapper.toDto(e))).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.example.demo.controller;
|
||||
|
||||
import com.example.demo.model.User;
|
||||
import com.example.demo.serviceInterface.UserService;
|
||||
import com.example.demo.service.UserService;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/user/")
|
||||
@@ -31,17 +32,17 @@ public class UserController implements CrudController<User,java.lang.Integer>{
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<User>> read(
|
||||
public ResponseEntity<Page<User>> find(
|
||||
@RequestBody User entity,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
return ResponseEntity.ok(service.read(entity,pageable));
|
||||
return ResponseEntity.ok(service.find(entity,pageable));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<User> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
return ResponseEntity.ok(service.readOne(primaryKey));
|
||||
public ResponseEntity<User> getOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
return service.getOne(primaryKey).map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,8 +2,8 @@ package com.example.demo.controller;
|
||||
|
||||
import com.example.demo.model.User;
|
||||
import com.example.demo.controller.dto.UserDTO;
|
||||
import com.example.demo.serviceInterface.UserService;
|
||||
import com.example.demo.serviceInterface.mapper.UserMapper;
|
||||
import com.example.demo.service.UserService;
|
||||
import com.example.demo.service.mapper.UserMapper;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
@@ -11,9 +11,10 @@ import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/user-dto/")
|
||||
@@ -40,20 +41,20 @@ public class UserControllerDTO implements CrudController<UserDTO,java.lang.Integ
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<UserDTO>> read(
|
||||
public ResponseEntity<Page<UserDTO>> find(
|
||||
@RequestBody UserDTO dto,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
User entity = mapper.toEntity(dto);
|
||||
Page<UserDTO> pages = service.read(entity, pageable).map(mapper::toDto);
|
||||
Page<UserDTO> pages = service.find(entity, pageable).map(mapper::toDto);
|
||||
return ResponseEntity.ok(pages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<UserDTO> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
User entity = service.readOne(primaryKey);
|
||||
return ResponseEntity.ok(mapper.toDto(entity));
|
||||
public ResponseEntity<UserDTO> getOne(@PathVariable("id") java.lang.Integer primaryKey) {
|
||||
Optional<User> entity = service.getOne(primaryKey);
|
||||
return entity.map(e -> ResponseEntity.ok(mapper.toDto(e))).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,11 +2,8 @@ package com.example.demo.controller.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Data
|
||||
public class BookDTO {
|
||||
|
||||
@@ -2,11 +2,8 @@ package com.example.demo.controller.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Data
|
||||
public class OrderDTO {
|
||||
|
||||
@@ -2,11 +2,8 @@ package com.example.demo.controller.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Data
|
||||
public class UserDTO {
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Repository
|
||||
public interface BookRepository extends JpaRepository<Book, java.lang.Integer> {
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:29 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Repository
|
||||
public interface OrderRepository extends JpaRepository<Order, java.lang.Integer> {
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Repository
|
||||
public interface UserRepository extends JpaRepository<User, java.lang.Integer> {
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.example.demo.service;
|
||||
import com.example.demo.model.Book;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:03:25 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
public interface BookService extends CrudService<Book,java.lang.Integer> {
|
||||
|
||||
|
||||
@@ -2,18 +2,20 @@ package com.example.demo.service;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:03:25 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
public interface CrudService<E,P> {
|
||||
public interface CrudService<E, P> {
|
||||
|
||||
E create(E entity);
|
||||
|
||||
E update(E entity);
|
||||
|
||||
Page<E> read(E entity, Pageable pageable);
|
||||
E readOne(P primaryKey);
|
||||
Page<E> find(E entity, Pageable pageable);
|
||||
|
||||
Optional<E> getOne(P primaryKey);
|
||||
|
||||
void delete(P primaryKey);
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.example.demo.service;
|
||||
import com.example.demo.model.Order;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:03:25 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
public interface OrderService extends CrudService<Order,java.lang.Integer> {
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.example.demo.service;
|
||||
import com.example.demo.model.User;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:03:25 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
public interface UserService extends CrudService<User,java.lang.Integer> {
|
||||
|
||||
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:03:25 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Service
|
||||
public class BookServiceBean implements BookService {
|
||||
@@ -30,14 +31,14 @@ public class BookServiceBean implements BookService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Book> read(Book entity, Pageable pageable) {
|
||||
public Page<Book> find(Book entity, Pageable pageable) {
|
||||
Example<Book> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Book readOne(java.lang.Integer primaryKey) {
|
||||
return repository.getOne(primaryKey);
|
||||
public Optional<Book> getOne(java.lang.Integer primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:03:25 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Service
|
||||
public class OrderServiceBean implements OrderService {
|
||||
@@ -30,14 +31,14 @@ public class OrderServiceBean implements OrderService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Order> read(Order entity, Pageable pageable) {
|
||||
public Page<Order> find(Order entity, Pageable pageable) {
|
||||
Example<Order> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Order readOne(java.lang.Integer primaryKey) {
|
||||
return repository.getOne(primaryKey);
|
||||
public Optional<Order> getOne(java.lang.Integer primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:03:25 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Service
|
||||
public class UserServiceBean implements UserService {
|
||||
@@ -30,14 +31,14 @@ public class UserServiceBean implements UserService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<User> read(User entity, Pageable pageable) {
|
||||
public Page<User> find(User entity, Pageable pageable) {
|
||||
Example<User> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public User readOne(java.lang.Integer primaryKey) {
|
||||
return repository.getOne(primaryKey);
|
||||
public Optional<User> getOne(java.lang.Integer primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.example.demo.controller.dto.BookDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:03:25 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface BookMapper {
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.example.demo.controller.dto.OrderDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:03:25 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface OrderMapper {
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.example.demo.controller.dto.UserDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:03:25 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:26:01 PM
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface UserMapper {
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.example.demo.serviceInterface;
|
||||
import com.example.demo.model.Book;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:20:30 PM
|
||||
*/
|
||||
public interface BookService extends CrudService<Book,java.lang.Integer> {
|
||||
|
||||
|
||||
@@ -2,18 +2,20 @@ package com.example.demo.serviceInterface;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:29 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:20:29 PM
|
||||
*/
|
||||
public interface CrudService<E,P> {
|
||||
public interface CrudService<E, P> {
|
||||
|
||||
E create(E entity);
|
||||
|
||||
E update(E entity);
|
||||
|
||||
Page<E> read(E entity, Pageable pageable);
|
||||
E readOne(P primaryKey);
|
||||
Page<E> find(E entity, Pageable pageable);
|
||||
|
||||
Optional<E> getOne(P primaryKey);
|
||||
|
||||
void delete(P primaryKey);
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.example.demo.serviceInterface;
|
||||
import com.example.demo.model.Order;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:29 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:20:30 PM
|
||||
*/
|
||||
public interface OrderService extends CrudService<Order,java.lang.Integer> {
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.example.demo.serviceInterface;
|
||||
import com.example.demo.model.User;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:20:30 PM
|
||||
*/
|
||||
public interface UserService extends CrudService<User,java.lang.Integer> {
|
||||
|
||||
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:20:30 PM
|
||||
*/
|
||||
@Service
|
||||
public class BookServiceBean implements BookService {
|
||||
@@ -30,14 +31,14 @@ public class BookServiceBean implements BookService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Book> read(Book entity, Pageable pageable) {
|
||||
public Page<Book> find(Book entity, Pageable pageable) {
|
||||
Example<Book> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Book readOne(java.lang.Integer primaryKey) {
|
||||
return repository.getOne(primaryKey);
|
||||
public Optional<Book> getOne(java.lang.Integer primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:29 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:20:30 PM
|
||||
*/
|
||||
@Service
|
||||
public class OrderServiceBean implements OrderService {
|
||||
@@ -30,14 +31,14 @@ public class OrderServiceBean implements OrderService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Order> read(Order entity, Pageable pageable) {
|
||||
public Page<Order> find(Order entity, Pageable pageable) {
|
||||
Example<Order> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Order readOne(java.lang.Integer primaryKey) {
|
||||
return repository.getOne(primaryKey);
|
||||
public Optional<Order> getOne(java.lang.Integer primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,9 +9,10 @@ import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:20:30 PM
|
||||
*/
|
||||
@Service
|
||||
public class UserServiceBean implements UserService {
|
||||
@@ -30,14 +31,14 @@ public class UserServiceBean implements UserService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<User> read(User entity, Pageable pageable) {
|
||||
public Page<User> find(User entity, Pageable pageable) {
|
||||
Example<User> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public User readOne(java.lang.Integer primaryKey) {
|
||||
return repository.getOne(primaryKey);
|
||||
public Optional<User> getOne(java.lang.Integer primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.example.demo.controller.dto.BookDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:20:30 PM
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface BookMapper {
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.example.demo.controller.dto.OrderDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:20:30 PM
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface OrderMapper {
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.example.demo.controller.dto.UserDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at Jan 23, 2023, 10:35:30 AM
|
||||
* Generated by Springboot-3layer-Generator at Feb 26, 2023, 4:20:30 PM
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface UserMapper {
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
projectPath: /Users/Gaetano_Piazzolla/Workspaces/workspace_private/Layer3Gen/demo
|
||||
projectPath: ./
|
||||
outputDirectory : src/main/java
|
||||
options:
|
||||
dtoLayer : true
|
||||
serviceInterface: true
|
||||
entityControllers: true
|
||||
|
||||
inputPackages:
|
||||
jpaEntities : com.example.demo.model
|
||||
|
||||
@@ -2,10 +2,6 @@ package gae.piaz.layer3gen;
|
||||
|
||||
import freemarker.template.TemplateException;
|
||||
import gae.piaz.layer3gen.config.CodeGeneratorConfig;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.reflections.Reflections;
|
||||
import org.reflections.scanners.FieldAnnotationsScanner;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.net.URLClassLoader;
|
||||
@@ -14,240 +10,291 @@ import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.reflections.Reflections;
|
||||
import org.reflections.scanners.FieldAnnotationsScanner;
|
||||
|
||||
@Slf4j
|
||||
public class CodeGenerator {
|
||||
|
||||
private static CodeGeneratorConfig config;
|
||||
private CodeGenerator() {}
|
||||
|
||||
private static URLClassLoader classLoader;
|
||||
private static CodeGeneratorConfig config;
|
||||
|
||||
public static void run(CodeGeneratorConfig arg, URLClassLoader classLoader) throws IOException, TemplateException {
|
||||
private static URLClassLoader classLoader;
|
||||
|
||||
CodeGenerator.config = arg;
|
||||
CodeGenerator.classLoader = classLoader;
|
||||
log.debug("configuration: {}", config);
|
||||
log.debug("ClassLoader: {}", classLoader);
|
||||
public static void run(CodeGeneratorConfig arg, URLClassLoader classLoader)
|
||||
throws IOException, TemplateException {
|
||||
|
||||
Set<Class<?>> entities = getEntityClasses();
|
||||
log.debug("found {} entities", entities.size());
|
||||
generateCode(entities);
|
||||
CodeGenerator.config = arg;
|
||||
CodeGenerator.classLoader = classLoader;
|
||||
log.debug("configuration: {}", config);
|
||||
log.debug("ClassLoader: {}", classLoader);
|
||||
|
||||
Set<Class<?>> entities = getEntityClasses();
|
||||
log.debug("found {} entities", entities.size());
|
||||
generateCode(entities);
|
||||
}
|
||||
|
||||
private static void generateCode(Set<Class<?>> entities) throws IOException, TemplateException {
|
||||
|
||||
createCrudInterfaces();
|
||||
|
||||
for (Class<?> entity : entities) {
|
||||
|
||||
createRepository(entity);
|
||||
|
||||
if (Boolean.TRUE.equals(config.getOptions().getServiceInterface())) {
|
||||
createServiceBean(entity);
|
||||
createServiceInterface(entity);
|
||||
} else {
|
||||
createService(entity);
|
||||
}
|
||||
|
||||
if (Boolean.TRUE.equals(config.getOptions().getEntityControllers())) {
|
||||
createController(entity);
|
||||
}
|
||||
|
||||
if (Boolean.TRUE.equals(config.getOptions().getDtoLayer())) {
|
||||
createDto(entity);
|
||||
createMapper(entity);
|
||||
createControllerDTO(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static Set<Class<?>> getEntityClasses() {
|
||||
Reflections reflections =
|
||||
new Reflections(config.getInputPackages().getJpaEntities(), classLoader);
|
||||
Set<Class<?>> classes = reflections.getTypesAnnotatedWith(javax.persistence.Entity.class);
|
||||
classes.addAll(reflections.getTypesAnnotatedWith(jakarta.persistence.Entity.class));
|
||||
return classes;
|
||||
}
|
||||
|
||||
private static void createControllerDTO(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setPrimaryKeyClass(getPrimaryKeyClass(entity));
|
||||
data.setEntityPackage(entity.getPackageName());
|
||||
String code = CodeRenderer.render("controllerdto.ftl", data);
|
||||
|
||||
String filepath =
|
||||
Paths.get(
|
||||
config.getProjectPath(),
|
||||
config.getOutputDirectory(),
|
||||
config.getOutputPackages().getControllers().replaceAll("\\.", "/"),
|
||||
entity.getSimpleName() + "ControllerDTO.java")
|
||||
.toString();
|
||||
|
||||
writeFile(code, filepath);
|
||||
}
|
||||
|
||||
private static void createMapper(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
if (StringUtils.isBlank(config.getOutputPackages().getMappers())) {
|
||||
config.getOutputPackages().setMappers(config.getOutputPackages().getServices() + ".mapper");
|
||||
}
|
||||
|
||||
private static void generateCode(Set<Class<?>> entities) throws IOException, TemplateException {
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setEntityPackage(entity.getPackageName());
|
||||
|
||||
createCrudInterfaces();
|
||||
String code = CodeRenderer.render("mapper.ftl", data);
|
||||
String filepath =
|
||||
Paths.get(
|
||||
config.getProjectPath(),
|
||||
config.getOutputDirectory(),
|
||||
config.getOutputPackages().getMappers().replaceAll("\\.", "/"),
|
||||
entity.getSimpleName() + "Mapper.java")
|
||||
.toString();
|
||||
|
||||
for (Class<?> entity : entities) {
|
||||
writeFile(code, filepath);
|
||||
}
|
||||
|
||||
createRepository(entity);
|
||||
|
||||
if (config.getOptions().getServiceInterface()) {
|
||||
createServiceBean(entity);
|
||||
createServiceInterface(entity);
|
||||
} else {
|
||||
createService(entity);
|
||||
}
|
||||
|
||||
createController(entity);
|
||||
|
||||
if (config.getOptions().getDtoLayer()) {
|
||||
createDto(entity);
|
||||
createMapper(entity);
|
||||
createControllerDTO(entity);
|
||||
}
|
||||
}
|
||||
private static void createDto(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
if (StringUtils.isBlank(config.getOutputPackages().getDtos())) {
|
||||
config.getOutputPackages().setDtos(config.getOutputPackages().getControllers() + ".dto");
|
||||
}
|
||||
|
||||
private static Set<Class<?>> getEntityClasses() {
|
||||
Reflections reflections = new Reflections(config.getInputPackages().getJpaEntities(), classLoader);
|
||||
Set<Class<?>> classes = reflections.getTypesAnnotatedWith(javax.persistence.Entity.class);
|
||||
classes.addAll(reflections.getTypesAnnotatedWith(jakarta.persistence.Entity.class));
|
||||
return classes;
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setEntityFields(Arrays.asList(entity.getDeclaredFields()));
|
||||
|
||||
String code = CodeRenderer.render("dto.ftl", data);
|
||||
String filepath =
|
||||
Paths.get(
|
||||
config.getProjectPath(),
|
||||
config.getOutputDirectory(),
|
||||
config.getOutputPackages().getDtos().replaceAll("\\.", "/"),
|
||||
entity.getSimpleName() + "DTO.java")
|
||||
.toString();
|
||||
|
||||
writeFile(code, filepath);
|
||||
}
|
||||
|
||||
private static void createController(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setPrimaryKeyClass(getPrimaryKeyClass(entity));
|
||||
data.setEntityPackage(entity.getPackageName());
|
||||
String code = CodeRenderer.render("controller.ftl", data);
|
||||
|
||||
String filepath =
|
||||
Paths.get(
|
||||
config.getProjectPath(),
|
||||
config.getOutputDirectory(),
|
||||
config.getOutputPackages().getControllers().replaceAll("\\.", "/"),
|
||||
entity.getSimpleName() + "Controller.java")
|
||||
.toString();
|
||||
|
||||
writeFile(code, filepath);
|
||||
}
|
||||
|
||||
private static void createService(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setPrimaryKeyClass(getPrimaryKeyClass(entity));
|
||||
data.setEntityPackage(entity.getPackageName());
|
||||
|
||||
String code = CodeRenderer.render("service.ftl", data);
|
||||
|
||||
String filepath =
|
||||
Paths.get(
|
||||
config.getProjectPath(),
|
||||
config.getOutputDirectory(),
|
||||
config.getOutputPackages().getServices().replaceAll("\\.", "/"),
|
||||
entity.getSimpleName() + "Service.java")
|
||||
.toString();
|
||||
|
||||
writeFile(code, filepath);
|
||||
}
|
||||
|
||||
private static void createServiceInterface(Class<?> entity)
|
||||
throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setPrimaryKeyClass(getPrimaryKeyClass(entity));
|
||||
data.setEntityPackage(entity.getPackageName());
|
||||
|
||||
String code = CodeRenderer.render("serviceInterface.ftl", data);
|
||||
|
||||
String filepath =
|
||||
Paths.get(
|
||||
config.getProjectPath(),
|
||||
config.getOutputDirectory(),
|
||||
config.getOutputPackages().getServices().replaceAll("\\.", "/"),
|
||||
entity.getSimpleName() + "Service.java")
|
||||
.toString();
|
||||
|
||||
writeFile(code, filepath);
|
||||
}
|
||||
|
||||
private static void createServiceBean(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setPrimaryKeyClass(getPrimaryKeyClass(entity));
|
||||
data.setEntityPackage(entity.getPackageName());
|
||||
|
||||
String code = CodeRenderer.render("serviceBean.ftl", data);
|
||||
|
||||
String filepath =
|
||||
Paths.get(
|
||||
config.getProjectPath(),
|
||||
config.getOutputDirectory(),
|
||||
config.getOutputPackages().getServices().replaceAll("\\.", "/"),
|
||||
"impl",
|
||||
entity.getSimpleName() + "ServiceBean.java")
|
||||
.toString();
|
||||
|
||||
writeFile(code, filepath);
|
||||
}
|
||||
|
||||
private static void createCrudInterfaces() throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
|
||||
String code = CodeRenderer.render("crudservice.ftl", data);
|
||||
String filepath =
|
||||
Paths.get(
|
||||
config.getProjectPath(),
|
||||
config.getOutputDirectory(),
|
||||
config.getOutputPackages().getServices().replaceAll("\\.", "/"),
|
||||
"CrudService.java")
|
||||
.toString();
|
||||
writeFile(code, filepath);
|
||||
|
||||
code = CodeRenderer.render("crudcontroller.ftl", data);
|
||||
filepath =
|
||||
Paths.get(
|
||||
config.getProjectPath(),
|
||||
config.getOutputDirectory(),
|
||||
config.getOutputPackages().getControllers().replaceAll("\\.", "/"),
|
||||
"CrudController.java")
|
||||
.toString();
|
||||
writeFile(code, filepath);
|
||||
}
|
||||
|
||||
private static void createRepository(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setPrimaryKeyClass(getPrimaryKeyClass(entity));
|
||||
|
||||
String code = CodeRenderer.render("repository.ftl", data);
|
||||
|
||||
String filepath =
|
||||
Paths.get(
|
||||
config.getProjectPath(),
|
||||
config.getOutputDirectory(),
|
||||
config.getOutputPackages().getRepositories().replaceAll("\\.", "/"),
|
||||
entity.getSimpleName() + "Repository.java")
|
||||
.toString();
|
||||
|
||||
writeFile(code, filepath);
|
||||
}
|
||||
|
||||
private static void writeFile(String code, String filepath) throws IOException {
|
||||
|
||||
Path path = Paths.get(filepath);
|
||||
if (!Files.exists(path)) {
|
||||
Files.createDirectories(path.getParent());
|
||||
}
|
||||
Files.write(path, code.getBytes());
|
||||
log.debug("path: {}, code: {}", path, code);
|
||||
}
|
||||
|
||||
private static String getPrimaryKeyClass(Class<?> entity) {
|
||||
|
||||
Reflections reflections = new Reflections(entity, classLoader, new FieldAnnotationsScanner());
|
||||
|
||||
Set<Field> ids = reflections.getFieldsAnnotatedWith(javax.persistence.Id.class);
|
||||
ids.addAll(reflections.getFieldsAnnotatedWith(jakarta.persistence.Id.class));
|
||||
if (ids.isEmpty()) {
|
||||
ids = reflections.getFieldsAnnotatedWith(javax.persistence.EmbeddedId.class);
|
||||
ids.addAll(reflections.getFieldsAnnotatedWith(javax.persistence.EmbeddedId.class));
|
||||
|
||||
if (ids.isEmpty()) {
|
||||
log.warn("No @Id found for " + entity + " using generic object \"Object\" ");
|
||||
return "Object";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static void createControllerDTO(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setPrimaryKeyClass(getPrimaryKeyClass(entity));
|
||||
data.setEntityPackage(entity.getPackageName());
|
||||
String code = CodeRenderer.render("controllerdto.ftl", data);
|
||||
|
||||
String filepath = config.getProjectPath() + "/" + config.getOutputDirectory() + "/" +
|
||||
config.getOutputPackages().getControllers().replaceAll("\\.", "/") + "/" + entity.getSimpleName() + "ControllerDTO.java";
|
||||
|
||||
writeFile(code, filepath);
|
||||
|
||||
}
|
||||
|
||||
private static void createMapper(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setEntityPackage(entity.getPackageName());
|
||||
|
||||
String code = CodeRenderer.render("mapper.ftl", data);
|
||||
|
||||
String filepath = config.getProjectPath() + "/" + config.getOutputDirectory() + "/" +
|
||||
config.getOutputPackages().getServices().replaceAll("\\.", "/") + "/mapper/" + entity.getSimpleName() + "Mapper.java";
|
||||
|
||||
writeFile(code, filepath);
|
||||
|
||||
}
|
||||
|
||||
private static void createDto(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setEntityFields(Arrays.asList(entity.getDeclaredFields()));
|
||||
|
||||
String code = CodeRenderer.render("dto.ftl", data);
|
||||
|
||||
String filepath = config.getProjectPath() + "/" + config.getOutputDirectory() + "/" +
|
||||
config.getOutputPackages().getControllers().replaceAll("\\.", "/") + "/dto/" + entity.getSimpleName() + "DTO.java";
|
||||
|
||||
writeFile(code, filepath);
|
||||
|
||||
}
|
||||
|
||||
private static void createController(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setPrimaryKeyClass(getPrimaryKeyClass(entity));
|
||||
data.setEntityPackage(entity.getPackageName());
|
||||
String code = CodeRenderer.render("controller.ftl", data);
|
||||
|
||||
String filepath = config.getProjectPath() + "/" + config.getOutputDirectory() + "/" +
|
||||
config.getOutputPackages().getControllers().replaceAll("\\.", "/") + "/" + entity.getSimpleName() + "Controller.java";
|
||||
|
||||
writeFile(code, filepath);
|
||||
|
||||
}
|
||||
|
||||
private static void createService(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setPrimaryKeyClass(getPrimaryKeyClass(entity));
|
||||
data.setEntityPackage(entity.getPackageName());
|
||||
|
||||
String code = CodeRenderer.render("service.ftl", data);
|
||||
|
||||
String filepath = config.getProjectPath() + "/" + config.getOutputDirectory() + "/" +
|
||||
config.getOutputPackages().getServices().replaceAll("\\.", "/") + "/" + entity.getSimpleName() + "Service.java";
|
||||
|
||||
writeFile(code, filepath);
|
||||
|
||||
}
|
||||
|
||||
private static void createServiceInterface(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setPrimaryKeyClass(getPrimaryKeyClass(entity));
|
||||
data.setEntityPackage(entity.getPackageName());
|
||||
|
||||
String code = CodeRenderer.render("serviceInterface.ftl", data);
|
||||
|
||||
String filepath = config.getProjectPath() + "/" + config.getOutputDirectory() + "/" +
|
||||
config.getOutputPackages().getServices().replaceAll("\\.", "/") + "/" + entity.getSimpleName() + "Service.java";
|
||||
|
||||
writeFile(code, filepath);
|
||||
|
||||
}
|
||||
|
||||
private static void createServiceBean(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setPrimaryKeyClass(getPrimaryKeyClass(entity));
|
||||
data.setEntityPackage(entity.getPackageName());
|
||||
|
||||
String code = CodeRenderer.render("serviceBean.ftl", data);
|
||||
|
||||
String filepath = config.getProjectPath() + "/" + config.getOutputDirectory() + "/" +
|
||||
config.getOutputPackages().getServices().replaceAll("\\.", "/")
|
||||
+ "/impl/" + entity.getSimpleName() + "ServiceBean.java";
|
||||
|
||||
writeFile(code, filepath);
|
||||
|
||||
}
|
||||
|
||||
private static void createCrudInterfaces() throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
|
||||
String code = CodeRenderer.render("crudservice.ftl", data);
|
||||
String filepath = config.getProjectPath() + "/" + config.getOutputDirectory() + "/" +
|
||||
config.getOutputPackages().getServices().replaceAll("\\.", "/") + "/" + "CrudService.java";
|
||||
writeFile(code, filepath);
|
||||
|
||||
code = CodeRenderer.render("crudcontroller.ftl", data);
|
||||
filepath = config.getProjectPath() + "/" + config.getOutputDirectory() + "/" +
|
||||
config.getOutputPackages().getControllers().replaceAll("\\.", "/") + "/" + "CrudController.java";
|
||||
writeFile(code, filepath);
|
||||
|
||||
}
|
||||
|
||||
private static void createRepository(Class<?> entity) throws IOException, TemplateException {
|
||||
|
||||
CodeRenderer.RenderingData data = new CodeRenderer.RenderingData();
|
||||
data.setConfig(config);
|
||||
data.setEntityClass(entity.getSimpleName());
|
||||
data.setPrimaryKeyClass(getPrimaryKeyClass(entity));
|
||||
|
||||
String code = CodeRenderer.render("repository.ftl", data);
|
||||
|
||||
String filepath = config.getProjectPath() + "/" + config.getOutputDirectory() + "/" +
|
||||
config.getOutputPackages().getRepositories().replaceAll("\\.", "/") + "/" + entity.getSimpleName() + "Repository.java";
|
||||
|
||||
writeFile(code, filepath);
|
||||
|
||||
}
|
||||
|
||||
private static void writeFile(String code, String filepath) throws IOException {
|
||||
|
||||
Path path = Paths.get(filepath);
|
||||
if (!Files.exists(path)) {
|
||||
Files.createDirectories(path.getParent());
|
||||
}
|
||||
Files.write(path, code.getBytes());
|
||||
log.debug("path: {}, code: {}", path, code);
|
||||
|
||||
}
|
||||
|
||||
private static String getPrimaryKeyClass(Class<?> entity) {
|
||||
|
||||
Reflections reflections = new Reflections(entity, classLoader, new FieldAnnotationsScanner());
|
||||
|
||||
Set<Field> ids = reflections.getFieldsAnnotatedWith(javax.persistence.Id.class);
|
||||
ids.addAll(reflections.getFieldsAnnotatedWith(jakarta.persistence.Id.class));
|
||||
if (ids.isEmpty()) {
|
||||
ids = reflections.getFieldsAnnotatedWith(javax.persistence.EmbeddedId.class);
|
||||
ids.addAll(reflections.getFieldsAnnotatedWith(javax.persistence.EmbeddedId.class));
|
||||
|
||||
if (ids.isEmpty()) {
|
||||
log.warn("No @Id found for " + entity + " using generic object \"Object\" ");
|
||||
return "Object";
|
||||
}
|
||||
}
|
||||
|
||||
return ids.stream().findFirst().get().getType().getName();
|
||||
|
||||
}
|
||||
|
||||
|
||||
return ids.stream().findFirst().get().getType().getName();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,59 +7,51 @@ import freemarker.template.Template;
|
||||
import freemarker.template.TemplateException;
|
||||
import freemarker.template.TemplateExceptionHandler;
|
||||
import gae.piaz.layer3gen.config.CodeGeneratorConfig;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.*;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* Code renderer.
|
||||
*/
|
||||
/** Code renderer. */
|
||||
public class CodeRenderer {
|
||||
|
||||
/**
|
||||
* Renders source code by using Freemarker template engine.
|
||||
*/
|
||||
public static String render(String templatePath, RenderingData data) throws IOException, TemplateException {
|
||||
Configuration config = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
|
||||
StringTemplateLoader templateLoader = new StringTemplateLoader();
|
||||
String source;
|
||||
try (InputStream is = ResourceReader.getResourceAsStream(templatePath);
|
||||
BufferedReader buffer = new BufferedReader(new InputStreamReader(is))) {
|
||||
source = buffer.lines().collect(Collectors.joining("\n"));
|
||||
}
|
||||
templateLoader.putTemplate("template", source);
|
||||
config.setTemplateLoader(templateLoader);
|
||||
config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
|
||||
config.setObjectWrapper(new BeansWrapper(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS));
|
||||
config.setWhitespaceStripping(true);
|
||||
|
||||
try (Writer writer = new StringWriter()) {
|
||||
Template template = config.getTemplate("template");
|
||||
template.process(data, writer);
|
||||
return writer.toString();
|
||||
}
|
||||
/** Renders source code by using Freemarker template engine. */
|
||||
public static String render(String templatePath, RenderingData data)
|
||||
throws IOException, TemplateException {
|
||||
Configuration config = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
|
||||
StringTemplateLoader templateLoader = new StringTemplateLoader();
|
||||
String source;
|
||||
try (InputStream is = ResourceReader.getResourceAsStream(templatePath);
|
||||
BufferedReader buffer = new BufferedReader(new InputStreamReader(is))) {
|
||||
source = buffer.lines().collect(Collectors.joining("\n"));
|
||||
}
|
||||
templateLoader.putTemplate("template", source);
|
||||
config.setTemplateLoader(templateLoader);
|
||||
config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
|
||||
config.setObjectWrapper(new BeansWrapper(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS));
|
||||
config.setWhitespaceStripping(true);
|
||||
|
||||
/**
|
||||
* Data used when rendering source code.
|
||||
*/
|
||||
@Data
|
||||
public static class RenderingData {
|
||||
|
||||
private String entityClass;
|
||||
private String entityPackage;
|
||||
|
||||
private String primaryKeyClass;
|
||||
private CodeGeneratorConfig config;
|
||||
|
||||
private List<Field> entityFields;
|
||||
|
||||
private Date dateGen = new Date();
|
||||
|
||||
|
||||
try (Writer writer = new StringWriter()) {
|
||||
Template template = config.getTemplate("template");
|
||||
template.process(data, writer);
|
||||
return writer.toString();
|
||||
}
|
||||
}
|
||||
|
||||
/** Data used when rendering source code. */
|
||||
@Data
|
||||
public static class RenderingData {
|
||||
|
||||
private String entityClass;
|
||||
private String entityPackage;
|
||||
|
||||
private String primaryKeyClass;
|
||||
private CodeGeneratorConfig config;
|
||||
|
||||
private List<Field> entityFields;
|
||||
|
||||
private Date dateGen = new Date();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,21 +5,17 @@ import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* Utility to reader classpath resources.
|
||||
*/
|
||||
/** Utility to reader classpath resources. */
|
||||
public class ResourceReader {
|
||||
|
||||
private ResourceReader() {
|
||||
}
|
||||
private ResourceReader() {}
|
||||
|
||||
public static InputStream getResourceAsStream(String path) throws IOException {
|
||||
InputStream classPathResource = ResourceReader.class.getClassLoader().getResourceAsStream(path);
|
||||
if (classPathResource != null) {
|
||||
return classPathResource;
|
||||
}
|
||||
InputStream fileResource = new FileInputStream(new File(path));
|
||||
return fileResource;
|
||||
public static InputStream getResourceAsStream(String path) throws IOException {
|
||||
InputStream classPathResource = ResourceReader.class.getClassLoader().getResourceAsStream(path);
|
||||
if (classPathResource != null) {
|
||||
return classPathResource;
|
||||
}
|
||||
|
||||
InputStream fileResource = new FileInputStream(new File(path));
|
||||
return fileResource;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,52 +1,46 @@
|
||||
package gae.piaz.layer3gen.config;
|
||||
|
||||
import gae.piaz.layer3gen.ResourceReader;
|
||||
import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.yaml.snakeyaml.Yaml;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
@Data
|
||||
@Slf4j
|
||||
public class CodeGeneratorConfig implements Serializable {
|
||||
|
||||
private String projectPath;
|
||||
private String classesDirectory;
|
||||
private String outputDirectory;
|
||||
private Options options;
|
||||
private InputPackages inputPackages;
|
||||
private OutputPackages outputPackages;
|
||||
private String projectPath;
|
||||
private String classesDirectory;
|
||||
private String outputDirectory;
|
||||
private Options options;
|
||||
private InputPackages inputPackages;
|
||||
private OutputPackages outputPackages;
|
||||
|
||||
private static final Yaml YAML = new Yaml();
|
||||
private static final Yaml YAML = new Yaml();
|
||||
|
||||
public static CodeGeneratorConfig load(String path, boolean fromClassPath) throws IOException {
|
||||
|
||||
if(StringUtils.isBlank(path)){
|
||||
path = "3layer-settings.yml";
|
||||
}
|
||||
|
||||
InputStream is;
|
||||
|
||||
if(!fromClassPath) {
|
||||
Path a = Paths.get(path);
|
||||
log.info("Configuration path: {}",a.toString());
|
||||
is = Files.newInputStream(a);
|
||||
}
|
||||
|
||||
else{
|
||||
is = ResourceReader.getResourceAsStream(path);
|
||||
}
|
||||
|
||||
try (Reader reader = new InputStreamReader(is)) {
|
||||
return YAML.loadAs(reader, CodeGeneratorConfig.class);
|
||||
}
|
||||
public static CodeGeneratorConfig load(String path, boolean fromClassPath) throws IOException {
|
||||
|
||||
if (StringUtils.isBlank(path)) {
|
||||
path = "3layer-settings.yml";
|
||||
}
|
||||
|
||||
InputStream is;
|
||||
|
||||
if (!fromClassPath) {
|
||||
Path a = Paths.get(path);
|
||||
log.info("Configuration path: {}", a.toString());
|
||||
is = Files.newInputStream(a);
|
||||
} else {
|
||||
is = ResourceReader.getResourceAsStream(path);
|
||||
}
|
||||
|
||||
try (Reader reader = new InputStreamReader(is)) {
|
||||
return YAML.loadAs(reader, CodeGeneratorConfig.class);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,5 +4,5 @@ import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class InputPackages {
|
||||
private String jpaEntities;
|
||||
private String jpaEntities;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class Options {
|
||||
private Boolean dtoLayer;
|
||||
private Boolean serviceInterface;
|
||||
private Boolean dtoLayer;
|
||||
private Boolean serviceInterface;
|
||||
private Boolean entityControllers;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,9 @@ import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class OutputPackages {
|
||||
private String repositories;
|
||||
private String services;
|
||||
private String controllers;
|
||||
private String repositories;
|
||||
private String services;
|
||||
private String controllers;
|
||||
private String dtos;
|
||||
private String mappers;
|
||||
}
|
||||
|
||||
@@ -1,32 +1,28 @@
|
||||
package gae.piaz.layer3gen.gradle;
|
||||
|
||||
import gae.piaz.layer3gen.config.CodeGeneratorConfig;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.file.FileCollection;
|
||||
import org.gradle.api.invocation.Gradle;
|
||||
import org.gradle.api.plugins.JavaPluginConvention;
|
||||
import org.gradle.api.tasks.SourceSetContainer;
|
||||
import org.gradle.tooling.model.GradleProject;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.file.FileCollection;
|
||||
import org.gradle.api.plugins.JavaPluginConvention;
|
||||
import org.gradle.api.tasks.SourceSetContainer;
|
||||
|
||||
public final class ClassLoaderBuilderGradle {
|
||||
|
||||
private ClassLoaderBuilderGradle(){
|
||||
}
|
||||
private ClassLoaderBuilderGradle() {}
|
||||
|
||||
public static URLClassLoader getClassLoader(Project project) throws MalformedURLException {
|
||||
List<URL> listOfURL = new ArrayList<>();
|
||||
SourceSetContainer ssc = project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets();
|
||||
FileCollection classesDir = ssc.getByName("main").getOutput().getClassesDirs();
|
||||
for (File file : classesDir) {
|
||||
listOfURL.add(file.toURI().toURL());
|
||||
}
|
||||
return new java.net.URLClassLoader(listOfURL.toArray(new URL[0]));
|
||||
public static URLClassLoader getClassLoader(Project project) throws MalformedURLException {
|
||||
List<URL> listOfURL = new ArrayList<>();
|
||||
SourceSetContainer ssc =
|
||||
project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets();
|
||||
FileCollection classesDir = ssc.getByName("main").getOutput().getClassesDirs();
|
||||
for (File file : classesDir) {
|
||||
listOfURL.add(file.toURI().toURL());
|
||||
}
|
||||
return new java.net.URLClassLoader(listOfURL.toArray(new URL[0]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,5 @@ import lombok.Data;
|
||||
@Data
|
||||
public class Layer3GenExtension {
|
||||
|
||||
private String configPath = "src/main/resources/3layer-settings.yml";
|
||||
|
||||
private String configPath = "src/main/resources/3layer-settings.yml";
|
||||
}
|
||||
|
||||
@@ -1,24 +1,20 @@
|
||||
package gae.piaz.layer3gen.gradle;
|
||||
|
||||
import gae.piaz.layer3gen.CodeGenerator;
|
||||
import org.gradle.api.Plugin;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.Task;
|
||||
|
||||
/**
|
||||
* entityGen Gradle plugin.
|
||||
*/
|
||||
/** entityGen Gradle plugin. */
|
||||
public class Layer3GenPlugin implements Plugin<Project> {
|
||||
|
||||
@Override
|
||||
public void apply(Project project) {
|
||||
@Override
|
||||
public void apply(Project project) {
|
||||
|
||||
project.getExtensions().create("layer3gen", Layer3GenExtension.class);
|
||||
project.getTasks().create("layer3gen", Layer3GenTask.class);
|
||||
project.getExtensions().create("layer3gen", Layer3GenExtension.class);
|
||||
project.getTasks().create("layer3gen", Layer3GenTask.class);
|
||||
|
||||
/*project.getExtensions().create("layer3gen", Layer3GenExtension.class);
|
||||
Task task = project.getTasks().create("layer3gen", Layer3GenTask.class);
|
||||
org.gradle.api.Task javaCompile = project.getTasks().getByName("compileJava");
|
||||
task.dependsOn(javaCompile);*/
|
||||
}
|
||||
/*project.getExtensions().create("layer3gen", Layer3GenExtension.class);
|
||||
Task task = project.getTasks().create("layer3gen", Layer3GenTask.class);
|
||||
org.gradle.api.Task javaCompile = project.getTasks().getByName("compileJava");
|
||||
task.dependsOn(javaCompile);*/
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,19 +5,17 @@ import gae.piaz.layer3gen.config.CodeGeneratorConfig;
|
||||
import org.gradle.api.DefaultTask;
|
||||
import org.gradle.api.tasks.TaskAction;
|
||||
|
||||
/**
|
||||
* entityGen Gradle task.
|
||||
*/
|
||||
/** entityGen Gradle task. */
|
||||
public class Layer3GenTask extends DefaultTask {
|
||||
|
||||
@TaskAction
|
||||
public void generateAll() throws Exception {
|
||||
@TaskAction
|
||||
public void generateAll() throws Exception {
|
||||
|
||||
Layer3GenExtension ext = getProject().getExtensions().getByType(Layer3GenExtension.class);
|
||||
if (ext == null) {
|
||||
ext = new Layer3GenExtension();
|
||||
}
|
||||
CodeGeneratorConfig config = CodeGeneratorConfig.load(ext.getConfigPath(),true);
|
||||
CodeGenerator.run(config,ClassLoaderBuilderGradle.getClassLoader(getProject()));
|
||||
Layer3GenExtension ext = getProject().getExtensions().getByType(Layer3GenExtension.class);
|
||||
if (ext == null) {
|
||||
ext = new Layer3GenExtension();
|
||||
}
|
||||
CodeGeneratorConfig config = CodeGeneratorConfig.load(ext.getConfigPath(), true);
|
||||
CodeGenerator.run(config, ClassLoaderBuilderGradle.getClassLoader(getProject()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package gae.piaz.layer3gen.main;
|
||||
|
||||
import gae.piaz.layer3gen.config.CodeGeneratorConfig;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
@@ -11,12 +10,13 @@ import java.util.List;
|
||||
|
||||
public final class ClassLoaderBuilderMain {
|
||||
|
||||
private ClassLoaderBuilderMain() {}
|
||||
|
||||
public static URLClassLoader getClassLoader(CodeGeneratorConfig config) throws MalformedURLException {
|
||||
final File classes = new File(Paths.get(config.getProjectPath(), config.getClassesDirectory()).toString());
|
||||
List<URL> listOfURL = List.of(classes.toURI().toURL());
|
||||
return new URLClassLoader(listOfURL.toArray(new URL[0]));
|
||||
}
|
||||
private ClassLoaderBuilderMain() {}
|
||||
|
||||
public static URLClassLoader getClassLoader(CodeGeneratorConfig config)
|
||||
throws MalformedURLException {
|
||||
final File classes =
|
||||
new File(Paths.get(config.getProjectPath(), config.getClassesDirectory()).toString());
|
||||
List<URL> listOfURL = List.of(classes.toURI().toURL());
|
||||
return new URLClassLoader(listOfURL.toArray(new URL[0]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,13 +6,12 @@ import org.apache.commons.lang3.ArrayUtils;
|
||||
|
||||
public class Layer3GenMain {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
String configFile = "";
|
||||
if(!ArrayUtils.isEmpty(args)){
|
||||
configFile = args[0];
|
||||
}
|
||||
CodeGeneratorConfig config = CodeGeneratorConfig.load(configFile,false);
|
||||
CodeGenerator.run(config,ClassLoaderBuilderMain.getClassLoader(config));
|
||||
public static void main(String[] args) throws Exception {
|
||||
String configFile = "";
|
||||
if (!ArrayUtils.isEmpty(args)) {
|
||||
configFile = args[0];
|
||||
}
|
||||
|
||||
}
|
||||
CodeGeneratorConfig config = CodeGeneratorConfig.load(configFile, false);
|
||||
CodeGenerator.run(config, ClassLoaderBuilderMain.getClassLoader(config));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at ${dateGen?datetime}
|
||||
@@ -31,17 +32,17 @@ public class ${entityClass}Controller implements CrudController<${entityClass},$
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<${entityClass}>> read(
|
||||
public ResponseEntity<Page<${entityClass}>> find(
|
||||
@RequestBody ${entityClass} entity,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
return ResponseEntity.ok(service.read(entity,pageable));
|
||||
return ResponseEntity.ok(service.find(entity,pageable));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<${entityClass}> readOne(@PathVariable("id") ${primaryKeyClass} primaryKey) {
|
||||
return ResponseEntity.ok(service.readOne(primaryKey));
|
||||
public ResponseEntity<${entityClass}> getOne(@PathVariable("id") ${primaryKeyClass} primaryKey) {
|
||||
return service.getOne(primaryKey).map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package ${config.outputPackages.controllers};
|
||||
|
||||
import ${entityPackage}.${entityClass};
|
||||
import ${config.outputPackages.controllers}.dto.${entityClass}DTO;
|
||||
import ${config.outputPackages.dtos}.${entityClass}DTO;
|
||||
import ${config.outputPackages.services}.${entityClass}Service;
|
||||
import ${config.outputPackages.services}.mapper.${entityClass}Mapper;
|
||||
import ${config.outputPackages.mappers}.${entityClass}Mapper;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
@@ -11,6 +11,7 @@ import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at ${dateGen?datetime}
|
||||
@@ -40,20 +41,20 @@ public class ${entityClass}ControllerDTO implements CrudController<${entityClass
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Page<${entityClass}DTO>> read(
|
||||
public ResponseEntity<Page<${entityClass}DTO>> find(
|
||||
@RequestBody ${entityClass}DTO dto,
|
||||
@RequestParam("page") Integer page,
|
||||
@RequestParam("size") Integer size) {
|
||||
Pageable pageable = PageRequest.of(page,size);
|
||||
${entityClass} entity = mapper.toEntity(dto);
|
||||
Page<${entityClass}DTO> pages = service.read(entity, pageable).map(mapper::toDto);
|
||||
Page<${entityClass}DTO> pages = service.find(entity, pageable).map(mapper::toDto);
|
||||
return ResponseEntity.ok(pages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<${entityClass}DTO> readOne(@PathVariable("id") ${primaryKeyClass} primaryKey) {
|
||||
${entityClass} entity = service.readOne(primaryKey);
|
||||
return ResponseEntity.ok(mapper.toDto(entity));
|
||||
public ResponseEntity<${entityClass}DTO> getOne(@PathVariable("id") ${primaryKeyClass} primaryKey) {
|
||||
Optional<${entityClass}> entity = service.getOne(primaryKey);
|
||||
return entity.map(e -> ResponseEntity.ok(mapper.toDto(e))).orElseGet(() -> ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -19,9 +19,10 @@ public interface CrudController<O,P>{
|
||||
ResponseEntity<O> update(O object);
|
||||
|
||||
@PostMapping("find")
|
||||
ResponseEntity<Page<O>> read(O object, Integer page, Integer size);
|
||||
ResponseEntity<Page<O>> find(O object, Integer page, Integer size);
|
||||
|
||||
@GetMapping("{id}")
|
||||
ResponseEntity<O> readOne(P primaryKey);
|
||||
ResponseEntity<O> getOne(P primaryKey);
|
||||
|
||||
@DeleteMapping
|
||||
void delete(P primaryKey);
|
||||
|
||||
@@ -2,18 +2,20 @@ package ${config.outputPackages.services};
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at ${dateGen?datetime}
|
||||
*/
|
||||
public interface CrudService<E,P> {
|
||||
public interface CrudService<E, P> {
|
||||
|
||||
E create(E entity);
|
||||
|
||||
E update(E entity);
|
||||
|
||||
Page<E> read(E entity, Pageable pageable);
|
||||
E readOne(P primaryKey);
|
||||
Page<E> find(E entity, Pageable pageable);
|
||||
|
||||
Optional<E> getOne(P primaryKey);
|
||||
|
||||
void delete(P primaryKey);
|
||||
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
package ${config.outputPackages.controllers}.dto;
|
||||
package ${config.outputPackages.dtos};
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at ${dateGen?datetime}
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package ${config.outputPackages.services}.mapper;
|
||||
package ${config.outputPackages.mappers};
|
||||
|
||||
import ${entityPackage}.${entityClass};
|
||||
import ${config.outputPackages.controllers}.dto.${entityClass}DTO;
|
||||
import ${config.outputPackages.dtos}.${entityClass}DTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
|
||||
@@ -8,6 +8,7 @@ import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at ${dateGen?datetime}
|
||||
@@ -29,14 +30,14 @@ public class ${entityClass}Service implements CrudService<${entityClass},${prima
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<${entityClass}> read(${entityClass} entity, Pageable pageable) {
|
||||
public Page<${entityClass}> find(${entityClass} entity, Pageable pageable) {
|
||||
Example<${entityClass}> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ${entityClass} readOne(${primaryKeyClass} primaryKey) {
|
||||
return repository.getOne(primaryKey);
|
||||
public Optional<${entityClass}> getOne(${primaryKeyClass} primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,6 +9,7 @@ import org.springframework.data.domain.Example;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Generated by Springboot-3layer-Generator at ${dateGen?datetime}
|
||||
@@ -30,14 +31,14 @@ public class ${entityClass}ServiceBean implements ${entityClass}Service {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<${entityClass}> read(${entityClass} entity, Pageable pageable) {
|
||||
public Page<${entityClass}> find(${entityClass} entity, Pageable pageable) {
|
||||
Example<${entityClass}> example = Example.of(entity);
|
||||
return repository.findAll(example,pageable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ${entityClass} readOne(${primaryKeyClass} primaryKey) {
|
||||
return repository.getOne(primaryKey);
|
||||
public Optional<${entityClass}> getOne(${primaryKeyClass} primaryKey) {
|
||||
return repository.findById(primaryKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,26 +1,23 @@
|
||||
package gae.piaz.layer3gen.test;
|
||||
|
||||
|
||||
import freemarker.template.TemplateException;
|
||||
import gae.piaz.layer3gen.CodeGenerator;
|
||||
import gae.piaz.layer3gen.config.CodeGeneratorConfig;
|
||||
import gae.piaz.layer3gen.main.ClassLoaderBuilderMain;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
import org.junit.Test;
|
||||
|
||||
public class TestMainGenerator {
|
||||
|
||||
@Test
|
||||
public void testGeneration() throws IOException, TemplateException {
|
||||
CodeGeneratorConfig config = CodeGeneratorConfig.load("3layer-settings.yml",true);
|
||||
CodeGenerator.run(config,ClassLoaderBuilderMain.getClassLoader(config));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJakartaGeneration() throws IOException, TemplateException {
|
||||
CodeGeneratorConfig config = CodeGeneratorConfig.load("3layer-settings-jakarta.yml",true);
|
||||
CodeGenerator.run(config,ClassLoaderBuilderMain.getClassLoader(config));
|
||||
}
|
||||
@Test
|
||||
public void testGeneration() throws IOException, TemplateException {
|
||||
CodeGeneratorConfig config = CodeGeneratorConfig.load("3layer-settings.yml", true);
|
||||
CodeGenerator.run(config, ClassLoaderBuilderMain.getClassLoader(config));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJakartaGeneration() throws IOException, TemplateException {
|
||||
CodeGeneratorConfig config = CodeGeneratorConfig.load("3layer-settings-jakarta.yml", true);
|
||||
CodeGenerator.run(config, ClassLoaderBuilderMain.getClassLoader(config));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
projectPath: /Users/Gaetano_Piazzolla/Workspaces/workspace_private/Layer3Gen/demo-jakarta
|
||||
projectPath: demo-jakarta
|
||||
classesDirectory: build/classes/java/main
|
||||
outputDirectory : src/main/java
|
||||
options:
|
||||
dtoLayer: true
|
||||
serviceInterface: true
|
||||
entityControllers: true
|
||||
|
||||
inputPackages:
|
||||
jpaEntities: com.example.demo.model
|
||||
|
||||
outputPackages:
|
||||
repositories: com.example.demo.repository
|
||||
services: com.example.demo.serviceInterface
|
||||
services: com.example.demo.service
|
||||
controllers: com.example.demo.controller
|
||||
@@ -1,14 +1,15 @@
|
||||
projectPath: /Users/Gaetano_Piazzolla/Workspaces/workspace_private/Layer3Gen/demo
|
||||
projectPath: demo
|
||||
classesDirectory: build/classes/java/main
|
||||
outputDirectory : src/main/java
|
||||
options:
|
||||
dtoLayer : true
|
||||
serviceInterface: true
|
||||
entityControllers: true
|
||||
|
||||
inputPackages:
|
||||
jpaEntities : com.example.demo.model
|
||||
|
||||
outputPackages:
|
||||
repositories : com.example.demo.repository
|
||||
services: com.example.demo.serviceInterface
|
||||
services: com.example.demo.service
|
||||
controllers: com.example.demo.controller
|
||||
Reference in New Issue
Block a user