본문 바로가기
개발/개발이야기

Springboot JPA kotlin 1. 글 등록 과 목록 조회

by rCan 2023. 2. 11.
728x90
반응형

https://github.com/rcaninhu/springboot3-demo

 

GitHub - rcaninhu/springboot3-demo

Contribute to rcaninhu/springboot3-demo development by creating an account on GitHub.

github.com

샘플샘플 스프링부트3 데모~

springboot3 + kotlin + JPA 

개발환경(?) 주변에 필요한건 도커로 구성 지금은 mysql8.0 하나 필요에 의해서 나중에 추가추가 하고 

간단하게 springboot  kotlin 데모 샘플 코드~

목적이 없으면 심심하니까 게시판(?) 정도 만드는걸 목표로?

목표 1. 글 등록

목표2. 글 목록

 

1. 글등록

제목, 내용, 작성일

@Entity
class Board(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long? = null,

    val active: Boolean? = true,

    @Column(updatable = false)
    var createdDate: LocalDate? = LocalDate.now(),

    @Column(length = 200)
    val title: String,

    @Column(length = 1000)
    val contents: String,
)

살아 있는 글인지 아닌지 체크와 글의 아이디 추가 된형태?

title은 200자 contents는 1000자 로 작성

컨트롤러에 글 등록 API를 만들어 보면..

@RestController
@RequestMapping("/api/board")
class BoardController(
    private val boardService: BoardService
) {
    @PostMapping("")
    fun saveBoard(
        @RequestBody boardSaveRequest: BoardSaveRequest
    ): ResponseEntity<BoardSaveResponse> =
        ResponseEntity
            .status(HttpStatus.CREATED)
            .body(boardService.saveBoard(boardSaveRequest))
}

간단하게 저장. 

벨리데이션 작성자 등등 처리는 아니고 간단하게 글제목 글내용 작성하도록.

BoardSaveRequest는

// 글등록 요청
data class BoardSaveRequest(
    val title: String,
    val contents: String,
)

// 글등록 결과 응답
data class BoardSaveResponse(
    var id: Long?,
    val title: String,
)

서비스 코드는 

@Service
class BoardService(
    private val boardRepository: BoardRepository
) {
    @Transactional
    fun saveBoard(
        boardSaveRequest: BoardSaveRequest
    ): BoardSaveResponse = boardSaveRequest.let {
        Board(
            title = it.title,
            contents = it.contents
        ).run {
            boardRepository.save(this)
        }.let {
            BoardSaveResponse(
                id = it.id,
                title = it.title
            )
        }
    }
}

 

글등록이 완성되었으니 글 목록 조회 조회 조건을 제목을 할수 있도록 ~

## 컨트롤러에 추가.

@GetMapping("")
fun searchBoard(boardSearchRequest: BoardSearchRequest): ResponseEntity<List<BoardSearchResponse>> =
    boardService.searchBoard(boardSearchRequest).let {
        if (it.isNotEmpty()) {
            ResponseEntity.ok(it)
        } else {
            ResponseEntity.noContent().build()
        }
    }
    
    
## 서비스에 추가.
@Transactional(readOnly = true)
fun searchBoard(
    boardSearchRequest: BoardSearchRequest
): List<BoardSearchResponse> =
    boardRepository.findByActiveAndTitleStartsWith(titleStartWidth = boardSearchRequest.title)
        .map {
            BoardSearchResponse(
                id = it.id,
                writeDate = it.createdDate!!.format(DateTimeFormatter.ISO_DATE),
                title = it.title,
                contents = it.contents
            )
        }

 

잘 될까 저장과 목록이...

저장 요청은 타이틀과 컨텐츠

 

저장이 되었으니 확인. 목록 조회를 해볼까

조회! 

제목으로 시작하느 글을 조회 했다. 조금더 글을 넣어 볼까...

제목으로 시작되는 글들이 조회가 되었다~~

다음은 수정, 삭제, 그리고 페이징 ~~~

728x90
반응형
SMALL

댓글