Mostafa Ramadan a671902f8c Enhancements (#3)
* Adding option to generate only controllerDto
Adding option to specify dto package name
Adding option to specify mapper package name
Adding option to exclude generation of CrudController interface
Adding option to exclude generation of CrudService interface
Fix reading verb in controller
Remove extra imports from Dto
Remove static project path from setting yaml in testing and update output package

* fix yml setting in testing

* update demo projects and plugin version

* update demo projects

* delete wrong files

* update jakarta demo folder

* update lombok version

* update README.md

* update demo-jakarta files

* update mapstruct version

---------

Co-authored-by: MostafaaRamadan <mostafa.ramadan@pixelogicmedia.com>
2023-02-26 15:53:54 +01:00
2021-01-06 20:41:19 +01:00
2023-02-26 15:53:54 +01:00
2023-02-26 15:53:54 +01:00
2020-11-01 12:11:28 +01:00
2023-02-26 15:53:54 +01:00
2020-11-01 12:11:28 +01:00
2023-02-26 15:53:54 +01:00
2021-01-30 16:50:27 +01:00
2020-10-26 19:16:30 +01:00
2023-02-26 15:53:54 +01:00
2020-10-28 15:38:33 +01:00

Layer3gen

Generates the standard SPRING 3 layer CRUD architecture starting from JPA entities.


sketch


How to run as a standalone application:

  1. Download and extract the ZIP/TAR file from releases;
  2. Edit the file in /bin directory named 3layer-settings.yml;
  3. Run the application (layer3gen.sh or layer3gen.bat).

How to run as gradle plugin:

  1. Add the plugin in your build.gradle;
buildscript {
    dependencies {
	classpath "gae.piaz:layer3gen:1.9"
    }
    // ....
}
// ...
apply plugin: 'gae.piaz.layer3gen'

or for gradle version above 2.1

plugins {
    id "gae.piaz.layer3gen" version "1.8"
}
  1. Create a file named 3layer-settings.yml (you willl find an example below) in the directory src/main/resources/;
  2. Run the gradle task.
gradlew clean build layer3gen

3layer-settings.yml configuration template:

projectPath: /home/tano/workspace_autogenerate/springboot-3layer-generator/demo
# projectPath: c://workspace_private/springboot-3layer-generator/demo
classesDirectory: build/classes/java/main
outputDirectory : src/main/java
options:
  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

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:

Checkout the example project with generated classes present in /demo and /demo-jakarta folder.

Repository generated example class:

@Repository
public interface BooksRepository extends JpaRepository<Books, java.lang.Integer> {

}

Service generated example class:

@Service
public class BooksService implements CrudService<Books,java.lang.Integer> {

    @Autowired
    private BooksRepository repository;

    @Override
    public Books create(Books entity) {
        return repository.save(entity);
    }

    @Override
    public Books update(Books entity) {
        return repository.save(entity);
    }

    @Override
    public Page<Book> read(Pageable pageable) {
        return repository.findAll(pageable);
    }

    @Override
    public Optional<Book> readOne(java.lang.Integer primaryKey) {
        return repository.findById(primaryKey);
    }

    @Override
    public void delete(java.lang.Integer primaryKey) {
        repository.deleteById(primaryKey);
    }
}

Controller generated example class:

@RestController
@RequestMapping("/books-dto/")
public class BooksControllerDTO implements CrudController<BooksDTO,java.lang.Integer>{

    @Autowired
    private BooksService service;

    @Autowired
    private BooksMapper mapper;

    @Override
    public ResponseEntity<BooksDTO> create(@RequestBody BooksDTO dto) {
       Books entity = mapper.toEntity(dto);
       entity = service.create(entity);
       return ResponseEntity.ok(mapper.toDto(entity));
    }

    @Override
    public ResponseEntity<BooksDTO> update(@RequestBody BooksDTO dto) {
      Books entity = mapper.toEntity(dto);
       entity = service.update(entity);
       return ResponseEntity.ok(mapper.toDto(entity));
    }

    @Override
    public ResponseEntity<Page<BookDTO>> read(
            @RequestParam("page") Integer page,
            @RequestParam("size") Integer size) {
        Pageable pageable = PageRequest.of(page,size);
        Page<BookDTO> pages = service.read(pageable).map(mapper::toDto);
        return ResponseEntity.ok(pages);
    }

    @Override
    public ResponseEntity<BookDTO> readOne(@PathVariable("id") java.lang.Integer primaryKey) {
        Optional<Book> entity = service.readOne(primaryKey);
        return entity.map(e -> ResponseEntity.ok(mapper.toDto(e))).orElseGet(() -> ResponseEntity.notFound().build());
    }

    @Override
    public void delete(java.lang.Integer primaryKey) {
        service.delete(primaryKey);
    }
}

Other insight can be found in this blog post: https://medium.com/p/49f3fbbc7b2d

Description
Easy Auto Generating the SPRING 3 layer architecture ( Controller-Service-Repository) from JPA Entities
Readme 58 MiB
Languages
Java 82.8%
Fluent 15.1%
Kotlin 1.7%
FreeMarker 0.4%