Java Spring Boot - JDBC 프로그래밍
MVC Pattern
- Model : 업무로직 → 영속데이터 (dbms; oracle, mysql)
- View : html / jsp
- Controller : Servlet
JDBC 프로그래밍 기본 절차
-
DBMS 설치, JDBC API(JavaSE 포함), JDBC Driver (oracle: ojdbc6.jar) 필요
-
ojdbc6.jar 위치 : jdk\jre\lib\ext>
-
JDBC API : java.sql, → 웹 추가 api : 이제 javax.sql, javax.naming 을 사용
-
JDBC 환경설정 (property) : 소스코드 하드코딩(유지보수 문제발생)
⇒ 별도 파일로 분리설계 : context.xml (시스템단위, 프로젝트단위)
-
-
순서
- JDBC driver 메모리 로딩
- db 연결
- sql 통로개설 : Statement, PreparedStatement (전용통로, sql문자열변환편리, sql injection 보안이슈 해결), CallableStatement
- sql 수행요청 : CRUD
- 결과처리
- 자원해제
웹 데이터베이스 연결
- sql 스크립트 파일 이용한 테이블 및 초기화 레코드 생성 → member 테이블
- 회원 테이블 매핑 도메인 클래스 : Member.java
- 회원 테이블 dao 클래스 : MemberDao.java
- 회원관리 서비스 클래스 : MemberServices.java
Database 웹 연결
- DataSource Connection Pool 사용
- DB 연결 관련 리소스 파일 분리 설계
- javax.sql., javax.naming.
- tomcat\conf> context.xml (시스템 단위 환경설정)
- project\META-INF> context.xml (프로젝트 단위 환경설정)
tomcat\conf>context.xml
- DataSource Connection Pool 관련 환경설정
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource auth="Container"
driverClassName="oracle.jdbc.driver.OracleDriver"
maxActive="20"
maxIdle="2"
maxWait="-1"
name="jdbc/Oracle11g"
username="hr"
password="tiger"
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@localhost:1521:XE" />
</Context>
DAO에서 DataSource Connection Pool에 생성된 Connection 객체 가져오기
public Connection getConnection() {
Connection conn = null;
try {
Context context = new InitialContext(); // NamingException
DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/Oracle11g");
conn = ds.getConnection(); // SQLException
} catch (Exception e) { // NamingException, SQLException
e.printStackTrace();
}
return conn;
}FactoryDao.java, MemberDao.java, DomainDao.java 등
JNDI
— Naming & Directory Interface
JDBC Pattern
— DTO Pattern : Member.java
— DAO Pattern : MemberDao.java, DomainDao.java 등
Factory Pattern
— FactoryDao.java
- DAO와 관련된 공통 기능을 분리 설계
- Connection 객체 가져오기
- 자원해제
Singleton Pattern
-
하나의 클래스에 대해서 단일 instance(단일 객체)로 사용하기 위한 설계 방법
-
DAO 관련 클래스에 반영 설계
- FactoryDao.java, MemberDao.java, DomainDao.java 등
-
설계 규칙:
- private 생성자 (다른 사람이 만들 수 없도록)
- private static 클래스이름 instance = new 클래스이름(); 멤버변수 선언 및 객체 생성
- public static 클래스이름 getInstance() { return instance; }
-
Singleton Pattern 적용 클래스 사용방법:
-
직접 객체 생성 접근 불가: 1.private 생성자
-
getInstance() 메서드를 통해서 객체 반환받아서 사용
⇒ 클래스이름 참조변수명 = 클래스이름.getInstance();
-
댓글남기기