MySql 연동
2021. 8. 5. 09:51ㆍ(구)공부/SpringBoot
728x90
properties에 추가
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/jpadb?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=false
spring.jpa.show-sql=true
spring.jpa.database=mysql
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
VO 만들기
package com.bit.domain;
import java.sql.Timestamp;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
//JPA에 필요한 어노테이션
@Entity
@Table(name = "tbl_boards")//테이블명(만약 생략되면 클래스 명으로 테이블 만들어짐)
public class Board {
@Id//pk
@GeneratedValue(strategy = GenerationType.AUTO) //자동 증가
private Long bno;
private String title;
private String writer;
private String content;
@CreationTimestamp
private Timestamp regdate; // 게시물 작성시간
@UpdateTimestamp
private Timestamp updatedate;//게시물 최종 수정시간
}
repository 생성
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference
Spring Data JPA - Reference Documentation
Example 109. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del
docs.spring.io
에서 메소드명 참고. 메소드 명으로 sql문을 조정한다.
package com.bit.persistence;
import java.util.List;
import org.springframework.data.repository.CrudRepository;
import com.bit.domain.Board;
public interface BoardRepository extends CrudRepository<Board, Long>{
//findBy~ : select where 절
//title 조건으로 검색
public List<Board> findByTitle(String title);
public List<Board> findByWriter(String title);
public List<Board> findByBnoGreaterThan(Long i);
public List<Board> findByContent(String writer);
//content에 '7'이 들어가 있는 레코드 검색
public List<Board> findByTitleContaining(String title);
//content에 '9채우기'로 끝나는 레코드 검색
public List<Board> findByContentEndingWith(String content);
//content에 '7'로 끝나는 레코드 검색
public List<Board> findByWriterEndingWith(String title);
//title에서 '제목...2' 시작하는 레코드 검색
public List<Board> findByTitleStartingWith(String title);
}
CRUD
package com.bit;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.bit.domain.Board;
import com.bit.persistence.BoardRepository;
@ExtendWith(SpringExtension.class)
@SpringBootTest
public class BoardRepositoryTests {
@Autowired
BoardRepository repo;
@Test
public void testCreate() {
System.out.println("테이블 생성");
}
//더미 데이터
@Test
public void testInsert200() {
for (int i=0; i < 200; i++) {
Board board = new Board();
board.setTitle("제목 :"+i);
board.setContent("내용 :"+i+"채우기");
board.setWriter("user0 :"+i%10);
repo.save(board);
}
}
@Test
public void testByTitle() {
List<Board> results = repo.findByTitle("제목 :0");
for(int i=0; i<results.size(); i++) {
Board board = results.get(i);
System.out.println(board);
}
for(Board board:results) {
System.out.println(board);
}
results.forEach(board->System.out.println(board)); //람다 1
results.forEach(System.out::println); // 람다 2
}
@Test
public void testByWriter() {
repo.findByWriter("user0 :0").forEach(System.out::println);;
}
@Test
public void update200() {
for (int i=0; i < 200; i++) {
Iterable<Board> iter = repo.findAll();
iter.forEach(board->board.setContent("1"));
repo.saveAll(iter);
// repo.save(board);
}
}
@Test
public void testContent() {
repo.findByContent("내용...0 채우기").
forEach(board->System.out.println(board));
}
@Test
public void testByTitleContaining() {
repo.findByTitleContaining("7").
forEach(board->System.out.println(board));
}
@Test
public void testByContentEndingWith() {
repo.findByContentEndingWith("9 채우기").
forEach(board->System.out.println(board));
}
@Test
public void testByWriterEndingWith() {
repo.findByWriterEndingWith("7").
forEach(board->System.out.println(board));
}
@Test
public void testByTitleStartingWith() {
repo.findByTitleStartingWith("제목 :2").
forEach(board->System.out.println(board));
}
}
728x90
'(구)공부 > SpringBoot' 카테고리의 다른 글
Thymeleaf 입문 (0) | 2021.08.10 |
---|---|
JPA 다양한 select 메소드 (0) | 2021.08.06 |
JUnit (0) | 2021.08.05 |
어노테이션 (0) | 2021.08.05 |
스프링부트 들어가기 (0) | 2021.08.04 |