Search

JDBC

태그
JDBC
자바
멀티캠퍼스
파일
MVC2 패턴 - Controller
Model, View, Controller 로 소프트웨어 구조를 구성하는 소프트웨어아키텍처 패턴
Controller
Presentation Layer
Application에서 Client와 직접 상호작용하는 Layer
핵심 로직인 Service Layer가 외부의 변화에 종속되지 않도록 분리하기 위해
Client와 직접 상호작용하는 Presentation Layer를 분리.
Client 변경시 Controller의 코드만 변경이 발생
입력데이터를 어플리케이션 내에서 사용하기 적합한 형태로 파싱
부적합한 요청에 대해 허가/불가를 처리하는 외벽 역할(validator, 권한관리)
Client에게 비즈니스로직의 결과물을 어떻게 보여줄 것 인지 선택
HTMl로 보낼 것인지, JSON, XML 같은 특정 데이터형식으로 보낼 것인지 등등…
MVC2 패턴 - Model
DAO (Data Access Object)
Persistence Layer (영속성 계층)
: 데이터를 영구적으로 저장하기 위해 DB와 상호작용하는 Layer
필요한 데이터를 DBMS 에 요청
DBMS 로 부터 읽어온 데이터를 어플리케이션 내에서 사용하기 적합한 형태로 파싱
사용자인증
// DBMS와의 연결(session)을 관리 // transaction 관리를 위한 메서드를 가진 객체 // transaction 시작 시 Connection 객체 생성 // transaction 종료 시 Connection을 닫음 (close()) Connection conn = null; // 쿼리 전송용 객체 // select, insert, update, delete 같은 구문을 수행하기 위한 객체 // 데이터베이스에 전달할 sql문을 작성 Statement stmt = null; // Select 쿼리의 결과로 반환된 데이터들의 집합 // DBMS로 부터 조회된 데이터를 읽어오는 객체 ResultSet rset = null;
Java
복사
Service
비지니스 로직(기능 구현)을 구현
DB transaction 관리
transaction : 논리적 최소 작업 단위.
commit/rollback을 Service에서 결정
JDBC 코딩 순서
public class MemberDao { // 사용자 인증 public Member userAuthenticate(String userId, String password) { Member member = null; // DBMS와의 연결(session)을 관리 // transaction 관리를 위한 메서드를 가진 객체 // transaction 시작 시 Connection 객체 생성 // transaction 종료 시 Connection을 닫음 (close()) Connection conn = null; // 쿼리 전송용 객체 // select, insert, update, delete 같은 구문을 수행하기 위한 객체 // 데이터베이스에 전달할 sql문을 작성 Statement stmt = null; // Select 쿼리의 결과로 반환된 데이터들의 집합 // DBMS로 부터 조회된 데이터를 읽어오는 객체 ResultSet rset = null; try { // JDBC 코딩 순서 // 1. jdbc driver 객체를 jvm에 등록 // Reflection을 사용해 원하는 DBMS의 드라이버 객체를 JVM에 등록할 수 있다. // 인스턴스 생성을 문자열로 하고, 메서드나 필드에 접근할 수 있는 기술 // private 같은 객체지향프로그래밍의 원칙을 위해 만든 자바의 규칙을 무시하고 메서드나 속성 등을 사용할 수 // 있어서 가능하면 사용하지 않는 것이 좋다. // 우리가 사용할 DBMS의 Driver 클래스를 JVM에 등록 Class.forName("com.mysql.cj.jdbc.Driver"); // 2. 데이터베이스와 연결 // jdbc:mysql//<ip>:<port>/<database이름>?queryString String url = "jdbc:mysql://localhost:3306/bookmanager?useUnicode=true&characterEncoding=utf8"; conn = DriverManager.getConnection(url, "bm", "123qwe!@#QWE"); // 3. 쿼리 전송용 객체 생성 stmt = conn.createStatement(); // 3-1. 쿼리 작성 String query = "select * from member where user_id = '" + userId + "' and password = '" + password + "'"; rset = stmt.executeQuery(query); // resultSet에서 각 row를 한 줄씩 읽어오는 코드 while (rset.next()) { member = new Member(); member.setUserId(rset.getString("user_id")); member.setPassword(rset.getString("password")); member.setGrade(rset.getString("grade")); member.setTell(rset.getString("tell")); member.setEmail(rset.getString("email")); member.setLeave(rset.getBoolean("is_leave")); member.setRegDate(rset.getTimestamp("reg_date").toLocalDateTime()); member.setRentableDate(rset.getTimestamp("rentable_date").toLocalDateTime()); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { rset.close(); stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return member; }
Java
복사
DTO (Data Transfer Object)
데이터 전송을 담당하는 객체
테이블에 존재하는 컬럼을 속성으로 구현, getter / setter 구현
자바빈 규약
모든 필드변수는 private
반드시 기본 생성자가 존재한다.
모든 필드변수는 getter / setter 를 가진다.
타입
mysql
java
mysql
java
문자열 타입
String
숫자
int, double
Timestamp
timestamp
boolean
boolean
JDBC Template
singleton pattern 임으로 프로그램내에서 한번만 호출되는 생성자
JVM에 com.mysql.cj.jdbc.Driver 클래스의 정보를 올리는 코드.
클래스 정보 데이터는 static영역에 올라가기 때문에, 한번만 드라이버를 등록하면 프로그램 종료 때 까지 메모리에 내려오지 않는다.