「SpringBoot」SpringBoot掲示板


SpringBoot+Gradle+JPAプロジェクト掲示板登録


プロジェクトはNext jsを使ったプロジェクトなので、Swaggerを使ってテストします

1. build.グラデーションへのSwaggerの追加


🌟 Swagger 2を使用
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
    	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	runtimeOnly 'mysql:mysql-connector-java'
	// swagger
	compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
	compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'
	compile group: 'io.swagger', name: 'swagger-annotations', version: '1.5.21'
	compile group: 'io.swagger', name: 'swagger-models', version: '1.5.21'
}
//swaggerの下に4つのdependenciesを追加
gradle refreshを実行し、SwaggerConfigを作成します.

SwaggerConfigに次の内容を追加します.
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.ant("/api/**"))
                .build();
    }
}
basePackageを指定する例がたくさんあります.
この項目では、コントローラは1つの場所に集中するのではなく、機能別に分離されます..apis(RequestHandlerSelectors.basePackage(basePackage))そうじゃない.apis(RequestHandlerSelectors.any())このように実施する.
実行後、http://localhost:8080/swagger-ui.htmlで次の画面を表示できます.

2.コントローラの作成

@Controller
@AllArgsConstructor
@RequestMapping("/api/v1")
public class ShareController {
    private ShareService shareService;

    @PostMapping("/share")
    public String write(ShareDto shareDto) {
        shareService.savePost(shareDto);

        return "hi";
    }

}
@AllArgsController
:存在する場合、beanオブジェクトを作成してサービスに接続する必要はありません.したがって、サービス受信時に@Autowiredは不要です.

3.サービスの作成

@AllArgsConstructor
@Service
public class ShareService {
    private ShareRepository shareRepository;
    @Transactional
    public Long savePost(ShareDto shareDto) {
        return shareRepository.save(shareDto.toEntity()).getIdx();
    }
}
@Transactional
:このサービスは完全に完了する必要があります(たとえば、データベースに1、2、3および4のコラムがある場合、1、2、3は正常にアクセスしますが、4番の値が誤って入力されると、1、2、3の値だけを保存することはできません.したがって、1、2、3、4の値が完全に入力されるまで何も行われません).

4.レポートの作成

public interface ShareRepository extends JpaRepository<ShareEntity, Long> {
}
インタフェースとして作成し、Jpa Repositoryを継承JpaRepository<Entity 클래스, Primary Key 타입>形式で作成

5.Entityの作成


1) ShareEntity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Entity
public class ShareEntity extends TimeEntity {

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Long idx;

    @Column
    private Long writer;

    @Column
    private String title;

    @Column
    private String content;

    @Column
    private Integer catego;

    @Column
    private Integer state;


    @Builder
    public ShareEntity(Long idx, String title, String content, Long writer,
                       Integer catego, Integer state) {
        this.idx = idx;
        this.writer = writer;
        this.title = title;
        this.content = content;
        this.catego = catego;
        this.state = state;
    }
}
ShareEntity継承TimeEntity
2) TimeEntity
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class TimeEntity {

    @Column(updatable = false)
    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime modifiedDate;

}

6.Dtoの作成

@Getter
@Setter
@ToString
@NoArgsConstructor
public class ShareDto {
    private Long idx;
    private Long writer;
    private String title;
    private String content;
    private Integer catego;
    private Integer state;
    private LocalDateTime createdDate;
    private LocalDateTime modifiedDate;

    public ShareEntity toEntity(){
        ShareEntity shareEntity = ShareEntity.builder()
                .idx(idx)
                .writer(writer)
                .title(title)
                .content(content)
                .catego(catego)
                .state(state)
                .build();
        return shareEntity;
    }

    @Builder
    public ShareDto(Long idx, String title, String content, Long writer, LocalDateTime createdDate, LocalDateTime modifiedDate,
                    Integer catego, Integer state) {
        this.idx = idx;
        this.writer = writer;
        this.title = title;
        this.content = content;
        this.catego = catego;
        this.state = state;
        this.createdDate = createdDate;
        this.modifiedDate = modifiedDate;
    }
}

7. Swagger Test


SWAGで適切なAPIを選択し、値を入力します.
createdDateとmodifiedDate、idxは自動的に生成されるため、空です.


🍋 ddl autoをcreateとして保持し、Entityクラス名に基づいてテーブルを作成します.
📌 参考になるブログ
Jpa掲示板の作成
  • 参考にする。
    Swagger
  • 参考にする。
  • 参考にする。