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