Coding 공부/IntelliJ

[IntelliJ_MariaDB] To do List DB#2와 IntelliJ_Java 연결하기

CBJH 2024. 4. 23.
728x90
반응형

1. 개요

  • Maria DB에 테이블을 만든다.
  • IntelliJ로 패키지와 java class를 만든다.
  • test 패키지와 @Test 어노테이션으로 메소드를 실행해본다.

 

2. 코드

2.1 SQL 코드

#tbl_todo 테이블 만들기
create table tbl_todo
(
    tno      int auto_increment primary key,
    title    varchar(100) not null,
    dueDate  Date         not null,
    finished tinyint(1) default 0       #0,1만 입력할 수 있도록 한다.
);
#tbl_todo에 자료 추가하기
insert into tbl_todo(title, dueDate, finished)
values ('Test.....title', '2024-04-23', 0);
#tbl_todo 테이블 불러오기
select * from tbl_todo;
#tbl_todo 자료 삭제하기
delete from tbl_todo where  tno = 7;

 

 

2.2 java class

 

  • ConnectionUtil 클래스에 연결 관련 코드를 작성한다.
public enum ConnectionUtil {
    INSTANCE;
    private HikariDataSource ds;    //array 대신에 사용할 예정

    ConnectionUtil() {
        HikariConfig config = new HikariConfig();
        config.setDriverClassName("org.mariadb.jdbc.Driver");
        config.setJdbcUrl("jdbc:mariadb://localhost:3309/webdb");
        config.setUsername("유저명");
        config.setPassword("비밀번호");
        config.addDataSourceProperty("cachePrepStmts", "true");     //preparedstatement를 사용하겠다.
        config.addDataSourceProperty("prepStmtCacheSize", "250");
        config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");


        ds = new HikariDataSource(config);
    }

    public Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
}

 

  • TodoVO에 데이터베이스 속성값을 갖는 클래스를 만든다.
@Builder    //클래스를 생성할 필요가 없다. 미리 만들어준다. TodoVO.builder().~~.build();
@Getter     //setter를 사용할 수 없고 getter만 사용 가능하다.
@ToString   
public class TodoVO {
    private Long tno;
    private String title;
    private LocalDate dueDate;
    private boolean finished;
}
  • 어노테이션 @Builder와 @Getter @ToString은 생소하다.
  • TodoDAO에 데이터 테이블을 활용하는 메소드를 만들어준다.
public class TodoDAO {
    public String getTime(){
        String now = null;
        try(Connection conn = ConnectionUtil.INSTANCE.getConnection();
            PreparedStatement pstmt = conn.prepareStatement("select now()");
            ResultSet rs = pstmt.executeQuery();
        ){
            rs.next();
            now = rs.getString(1);
        }catch(SQLException e){
            e.printStackTrace();
        }
        return now;
    }

    public void insert(TodoVO todoVO){
        try(Connection conn = ConnectionUtil.INSTANCE.getConnection();
            PreparedStatement pstmt = conn.prepareStatement("insert into tbl_todo(title, dueDate, finished) values (?, ?, ?);")){

            pstmt.setString(1, todoVO.getTitle());
            if (todoVO.getDueDate() != null) {
                // LocalDate를 java.sql.Date로 변환
                Date dueDate = Date.valueOf(todoVO.getDueDate());
                pstmt.setDate(2, dueDate);
            } else {
                pstmt.setNull(2, Types.DATE); // dueDate가 null이라면 NULL을 설정
            }
            pstmt.setInt(3, todoVO.isFinished() ? 1 : 0);
            pstmt.executeUpdate();
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
}
  • getTime 메소드는 현재 시간을 문자열로 반환해준다.
  • insert 메소드는 todoVO를 매개변수로 받아 테이블에 자료를 추가해준다.

  • IntelliJ에선 test폴더 하위 폴더인 java 폴더에 @Test를 사용해 미리 메소드를 테스트해 볼 수 있다.
  • 어썰션을 사용하면 해당 메서드가 실행되었는지 완료여부도 확인할 수 있다.
public class TodoDAOTests {
    private TodoDAO todoDAO;

    @BeforeEach     //이 클래스가 호출되어 메소드가 실행되기 전에 이 부분을 미리 해라.(객체 인스턴스를 만들어라)
    public void ready(){
        todoDAO = new TodoDAO();
    }

    @Test
    public  void testTime() throws Exception{
        String time = todoDAO.getTime();
        System.out.println(time);
    }

    @Test
    public void testInsert() throws Exception{
        TodoVO todoVO = TodoVO.builder().tno((long)27).title("qqqqqqqqq1233111").dueDate(LocalDate.of(2024,04,11)).finished(true).build();
        todoDAO.insert(todoVO);
    }
}
  • TodoVO는 @Builder @Getter @ToString 어노테이션이 있어서 builder() 로 초기화해 객체를 생성해준다.
  • @Test가 있는 메소드는 옆에 초록색 재생 버튼이 생성되어 해당 버튼을 누르면 메소드를 실행시켜준다.
  • 테이블에 들어가 값이 추가되었는지 확인할 수 있다.

댓글