<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Java_dao</id>
	<title>Java dao - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Java_dao"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Java_dao&amp;action=history"/>
	<updated>2026-05-18T09:05:18Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=Java_dao&amp;diff=338&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: ==java dao dto 예제 == https://m.blog.naver.com/khm900402/220303769941  == DAO(Data Access Object) ==   - 데이터베이스 관련 작업을 전담하는 클래스    - 데이터베이스에 연결하여, 입력 , 수정, 삭제, 조회 등의 작업을 하는 클래스    - CRUD 작업     C: Create =&gt; insert     R: Read =&gt; select      U: Update     D: Delete    == DTO(Data Transfer Object), VO(Value Object), Bean ==    - 데이터 전달 단위, 객체를 표현하는 단...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Java_dao&amp;diff=338&amp;oldid=prev"/>
		<updated>2024-10-14T16:31:37Z</updated>

		<summary type="html">&lt;p&gt;새 문서: ==java dao dto 예제 == https://m.blog.naver.com/khm900402/220303769941  == DAO(Data Access Object) ==   - 데이터베이스 관련 작업을 전담하는 클래스    - 데이터베이스에 연결하여, 입력 , 수정, 삭제, 조회 등의 작업을 하는 클래스    - CRUD 작업     C: Create =&amp;gt; insert     R: Read =&amp;gt; select      U: Update     D: Delete    == DTO(Data Transfer Object), VO(Value Object), Bean ==    - 데이터 전달 단위, 객체를 표현하는 단...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==java dao dto 예제 ==&lt;br /&gt;
https://m.blog.naver.com/khm900402/220303769941&lt;br /&gt;
&lt;br /&gt;
== DAO(Data Access Object) ==&lt;br /&gt;
  - 데이터베이스 관련 작업을 전담하는 클래스&lt;br /&gt;
&lt;br /&gt;
  - 데이터베이스에 연결하여, 입력 , 수정, 삭제, 조회 등의 작업을 하는 클래스&lt;br /&gt;
&lt;br /&gt;
  - CRUD 작업&lt;br /&gt;
&lt;br /&gt;
   C: Create =&amp;gt; insert&lt;br /&gt;
&lt;br /&gt;
   R: Read =&amp;gt; select &lt;br /&gt;
&lt;br /&gt;
   U: Update&lt;br /&gt;
&lt;br /&gt;
   D: Delete&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== DTO(Data Transfer Object), VO(Value Object), Bean ==&lt;br /&gt;
&lt;br /&gt;
  - 데이터 전달 단위, 객체를 표현하는 단위&lt;br /&gt;
&lt;br /&gt;
  - 보통 테이블의 컬럼들을 멤버변수로 처리한다.&lt;br /&gt;
&lt;br /&gt;
  - 캡슐화된 객체여야 함(멤버변수는 private 으로, public getter/setter 필수)&lt;br /&gt;
&lt;br /&gt;
=== DTO 기본 예제 ===&lt;br /&gt;
&amp;lt;source lang=java&amp;gt;&lt;br /&gt;
package jdbc_day3;&lt;br /&gt;
&lt;br /&gt;
import java.sql.Timestamp;&lt;br /&gt;
&lt;br /&gt;
public class PersonDTO {&lt;br /&gt;
 /*&lt;br /&gt;
 DTO(Data Transfer Object),VO(Value Object), Bean&lt;br /&gt;
 -데이터 전달 단위, 객체를 표현하는 단위&lt;br /&gt;
 -보통 테이블의 컬럼들을 멤버변수로 처리한다&lt;br /&gt;
 -캡슐화된 객체여야 함(멤버변수는 private으로, public getter/setter필수) &lt;br /&gt;
 */&lt;br /&gt;
 //1. 멤버변수&lt;br /&gt;
 private int no;&lt;br /&gt;
 private String name;&lt;br /&gt;
 private String tel;&lt;br /&gt;
 private int age;&lt;br /&gt;
 private Timestamp regdate;&lt;br /&gt;
 &lt;br /&gt;
 //2. 생성자&lt;br /&gt;
 public PersonDTO() {&lt;br /&gt;
  super();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 public PersonDTO(int no, String name, String tel, int age, Timestamp regdate) {&lt;br /&gt;
  super();&lt;br /&gt;
  this.no = no;&lt;br /&gt;
  this.name = name;&lt;br /&gt;
  this.tel = tel;&lt;br /&gt;
  this.age = age;&lt;br /&gt;
  this.regdate = regdate;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 //3. getter/setter&lt;br /&gt;
 public int getNo() {&lt;br /&gt;
  return no;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 public void setNo(int no) {&lt;br /&gt;
  this.no = no;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 public String getName() {&lt;br /&gt;
  return name;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 public void setName(String name) {&lt;br /&gt;
  this.name = name;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 public String getTel() {&lt;br /&gt;
  return tel;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 public void setTel(String tel) {&lt;br /&gt;
  this.tel = tel;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 public int getAge() {&lt;br /&gt;
  return age;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 public void setAge(int age) {&lt;br /&gt;
  this.age = age;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 public Timestamp getRegdate() {&lt;br /&gt;
  return regdate;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 public void setRegdate(Timestamp regdate) {&lt;br /&gt;
  this.regdate = regdate;&lt;br /&gt;
 }&lt;br /&gt;
 //4. toString&lt;br /&gt;
 @Override&lt;br /&gt;
 public String toString() {&lt;br /&gt;
  return &amp;quot;PersonDTO [no=&amp;quot; + no + &amp;quot;, name=&amp;quot; + name + &amp;quot;, tel=&amp;quot; + tel&lt;br /&gt;
    + &amp;quot;, age=&amp;quot; + age + &amp;quot;, regdate=&amp;quot; + regdate + &amp;quot;]&amp;quot;;&lt;br /&gt;
 }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
​&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
​&lt;br /&gt;
=== DB연결과 자원 해제등의 작업을 하는 클래스​ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=java&amp;gt;&lt;br /&gt;
package jdbc_day3;&lt;br /&gt;
&lt;br /&gt;
import java.sql.CallableStatement;&lt;br /&gt;
import java.sql.Connection;&lt;br /&gt;
import java.sql.DriverManager;&lt;br /&gt;
import java.sql.PreparedStatement;&lt;br /&gt;
import java.sql.ResultSet;&lt;br /&gt;
import java.sql.SQLException;&lt;br /&gt;
import java.sql.Statement;&lt;br /&gt;
&lt;br /&gt;
public class DBManager {&lt;br /&gt;
  // DB연결과 자원 해제등의 작업을 하는 클래스&lt;br /&gt;
 &lt;br /&gt;
  // static 초기화 블럭 - static 변수의 복잡한 초기화에 사용됨&lt;br /&gt;
  // 해당클래스가 메모리에 로드될 때 최초로 한번만 실행됨&lt;br /&gt;
  static{&lt;br /&gt;
   //1. 드라이버 로딩&lt;br /&gt;
   try {&lt;br /&gt;
    Class.forName(&amp;quot;oracle.jdbc.driver.OracleDriver&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;드라이버 로딩 성공!&amp;quot;);&lt;br /&gt;
   } catch (ClassNotFoundException e) {&lt;br /&gt;
    System.out.println(&amp;quot;드라이버 로딩 실패&amp;quot;);&lt;br /&gt;
    e.printStackTrace();&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
  public static Connection getConnection() throws SQLException{&lt;br /&gt;
   //2. db연결하기 위한 Connection 객체 생성&lt;br /&gt;
   String url=&amp;quot;jdbc:oracle:thin:@JKH03:1521:XE&amp;quot;;&lt;br /&gt;
   String user=&amp;quot;javauser1&amp;quot;, pwd=&amp;quot;java&amp;quot;;&lt;br /&gt;
   Connection conn = DriverManager.getConnection(url, user, pwd);&lt;br /&gt;
   System.out.println(&amp;quot;DB연결, conn=&amp;quot;+conn);&lt;br /&gt;
   return conn;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void dbClose(ResultSet rs, PreparedStatement ps, Connection conn) throws SQLException{&lt;br /&gt;
   if(rs!=null)rs.close();&lt;br /&gt;
   if(ps!=null)ps.close();&lt;br /&gt;
   if(conn!=null)conn.close();&lt;br /&gt;
   System.out.println(&amp;quot;자원반납, DB Close!!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void dbClose(PreparedStatement ps, Connection conn) throws SQLException{&lt;br /&gt;
   if(ps!=null)ps.close();&lt;br /&gt;
   if(conn!=null)conn.close();&lt;br /&gt;
   System.out.println(&amp;quot;자원반납, DB Close!!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void dbClose(ResultSet rs, Statement stmt, Connection conn) throws SQLException{&lt;br /&gt;
   if(rs!=null)rs.close();&lt;br /&gt;
   if(stmt!=null)stmt.close();&lt;br /&gt;
   if(conn!=null)conn.close();&lt;br /&gt;
   System.out.println(&amp;quot;자원반납, DB Close!!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void dbClose(Statement stmt, Connection conn) throws SQLException{&lt;br /&gt;
   if(stmt!=null)stmt.close();&lt;br /&gt;
   if(conn!=null)conn.close();&lt;br /&gt;
   System.out.println(&amp;quot;자원반납, DB Close!!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void dbClose(ResultSet rs, CallableStatement cs, Connection conn) throws SQLException{&lt;br /&gt;
   if(rs!=null)rs.close();&lt;br /&gt;
   if(cs!=null)cs.close();&lt;br /&gt;
   if(conn!=null)conn.close();&lt;br /&gt;
   System.out.println(&amp;quot;자원반납, DB Close!!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static void dbClose(CallableStatement cs, Connection conn) throws SQLException{&lt;br /&gt;
   if(cs!=null)cs.close();&lt;br /&gt;
   if(conn!=null)conn.close();&lt;br /&gt;
   System.out.println(&amp;quot;자원반납, DB Close!!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
​&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
​&lt;br /&gt;
&lt;br /&gt;
​&lt;br /&gt;
&lt;br /&gt;
​&lt;br /&gt;
&lt;br /&gt;
===구문별 DTO,DAO 사용 방식 ===&lt;br /&gt;
&lt;br /&gt;
﻿- JDBC DAO/DTO 코드는 사용방식이 공식과 같아서 똑같은 방식과 코드를 반복적으로 사용한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== insert / update  사용시====&lt;br /&gt;
&lt;br /&gt;
(매개변수  DTO)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=java&amp;gt; &lt;br /&gt;
public static int insertPerson(PersonDTO personDto) throws SQLException {//DB에 Insert&lt;br /&gt;
  Connection conn = null;&lt;br /&gt;
  PreparedStatement ps = null;&lt;br /&gt;
  int rowCount = 0;&lt;br /&gt;
&lt;br /&gt;
  try{&lt;br /&gt;
   //1,2 .드라이버 로딩,db연결&lt;br /&gt;
   conn = DBManager.getConnection();&lt;br /&gt;
&lt;br /&gt;
   //3.sql문장을 처리하는 PreparedStatement 객체 생성&lt;br /&gt;
   String sql = &amp;quot;insert into person(no,name,tel,age) values(person_seq.nextval,?,?,?)&amp;quot;;&lt;br /&gt;
   &lt;br /&gt;
   ps = conn.prepareStatement(sql);&lt;br /&gt;
   ps.setString(1, personDto.getName());&lt;br /&gt;
   ps.setString(2, personDto.getTel());&lt;br /&gt;
   ps.setInt(3,personDto.getAge());&lt;br /&gt;
&lt;br /&gt;
   //4.실행&lt;br /&gt;
   rowCount = ps.executeUpdate();&lt;br /&gt;
   System.out.println(&amp;quot;person 테이블 입력 처리, rowCount = &amp;quot;+rowCount);&lt;br /&gt;
  }finally{&lt;br /&gt;
   DBManager.dbClose(ps, conn);&lt;br /&gt;
  }&lt;br /&gt;
  return rowCount;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
​&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==== delete 사용시 ====&lt;br /&gt;
&lt;br /&gt;
   (매개변수 1개)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=java&amp;gt;&lt;br /&gt;
public static int deletePerson(int no) throws SQLException{&lt;br /&gt;
&lt;br /&gt;
  Connection conn = null;&lt;br /&gt;
  PreparedStatement ps = null;&lt;br /&gt;
  PersonDTO dto = new PersonDTO();&lt;br /&gt;
  int rowCount=0;&lt;br /&gt;
  &lt;br /&gt;
  try{&lt;br /&gt;
   //2.sb연결&lt;br /&gt;
   conn = DBManager.getConnection();&lt;br /&gt;
&lt;br /&gt;
   //3.sql문장 처리&lt;br /&gt;
   String sql = &amp;quot;delete from person where no=?&amp;quot;;&lt;br /&gt;
   ps = conn.prepareStatement(sql);&lt;br /&gt;
   ps.setInt(1,no);&lt;br /&gt;
   &lt;br /&gt;
   //4.실행&lt;br /&gt;
   rowCount = ps.executeUpdate();&lt;br /&gt;
   &lt;br /&gt;
  }finally{&lt;br /&gt;
   DBManager.dbClose(ps, conn);&lt;br /&gt;
  }&lt;br /&gt;
  return rowCount;&lt;br /&gt;
 }//deletePerson&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==== Select 사용시 - Select 는 사용 방법이 2종류 ====&lt;br /&gt;
&lt;br /&gt;
===== 여러개의 레코드일 경우 =====&lt;br /&gt;
(ArrayList 사용)&lt;br /&gt;
★ tip - ArrayList 사용시 for문은 기본적으로 사용!&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=java&amp;gt;&lt;br /&gt;
public static List&amp;lt;PersonDTO&amp;gt; selectAll() throws SQLException {//전체 조회 작업&lt;br /&gt;
&lt;br /&gt;
  //db - person 테이블 전체 조회&lt;br /&gt;
  Connection conn = null;&lt;br /&gt;
  PreparedStatement ps = null;&lt;br /&gt;
  ResultSet rs = null;&lt;br /&gt;
  //여러 개의 레코드를 저장하기 위한 컬랙션&lt;br /&gt;
  // =&amp;gt; 여러 개의 dto를 담기 위한 컬렉션&lt;br /&gt;
  List&amp;lt;PersonDTO&amp;gt; list = new ArrayList&amp;lt;PersonDTO&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
  try{&lt;br /&gt;
   //1,2. 드라이버 로딩 , db연결&lt;br /&gt;
   conn = DBManager.getConnection();&lt;br /&gt;
&lt;br /&gt;
   //3.preparedStatement&lt;br /&gt;
   String sql = &amp;quot;select * from person order by no desc&amp;quot;;&lt;br /&gt;
   ps = conn.prepareStatement(sql);&lt;br /&gt;
   rs = ps.executeQuery();&lt;br /&gt;
&lt;br /&gt;
   while(rs.next()){&lt;br /&gt;
&lt;br /&gt;
    int no = rs.getInt(&amp;quot;no&amp;quot;);&lt;br /&gt;
    String name = rs.getString(&amp;quot;name&amp;quot;);&lt;br /&gt;
    String tel = rs.getString(&amp;quot;tel&amp;quot;);&lt;br /&gt;
    int age = rs.getInt(&amp;quot;age&amp;quot;);&lt;br /&gt;
    Timestamp regdate = rs.getTimestamp(&amp;quot;regdate&amp;quot;);&lt;br /&gt;
    PersonDTO personDto = new PersonDTO(no, name, tel, age, regdate);&lt;br /&gt;
&lt;br /&gt;
    //한 개의 레코드를 dto에 저장한다&lt;br /&gt;
    //한 개의 레코드는 하나의 dto&lt;br /&gt;
    //각 레코드(dto)를 컬렉션에 저장&lt;br /&gt;
    list.add(personDto);&lt;br /&gt;
   }//while&lt;br /&gt;
   System.out.println(&amp;quot;전체 조회 결과 list.size() :&amp;quot;+list.size());&lt;br /&gt;
  }finally{&lt;br /&gt;
   DBManager.dbClose(rs, ps, conn);&lt;br /&gt;
  }&lt;br /&gt;
  return list;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====== 한개의​ 레코드일 경우 =====&lt;br /&gt;
(매개변수 1개)​&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=java&amp;gt;&lt;br /&gt;
public static PersonDTO selectByNo(int no) throws SQLException{&lt;br /&gt;
&lt;br /&gt;
  Connection conn = null;&lt;br /&gt;
  PreparedStatement ps = null;&lt;br /&gt;
  ResultSet rs = null;&lt;br /&gt;
  //한 개의 레코드를 하나의 dto로 묶어서 리턴한다.&lt;br /&gt;
  PersonDTO dto = new PersonDTO();&lt;br /&gt;
&lt;br /&gt;
  try{&lt;br /&gt;
   //2.db연결&lt;br /&gt;
   conn = DBManager.getConnection();&lt;br /&gt;
&lt;br /&gt;
   //3.sql문장 처리&lt;br /&gt;
   String sql = &amp;quot;select * from person where no=?&amp;quot;;&lt;br /&gt;
   ps = conn.prepareStatement(sql);&lt;br /&gt;
   ps.setInt(1,no);&lt;br /&gt;
&lt;br /&gt;
   //4.실행&lt;br /&gt;
   rs = ps.executeQuery();&lt;br /&gt;
   if(rs.next()){&lt;br /&gt;
&lt;br /&gt;
    int age = rs.getInt(&amp;quot;age&amp;quot;);&lt;br /&gt;
    String name = rs.getString(&amp;quot;name&amp;quot;);&lt;br /&gt;
    String tel = rs.getString(&amp;quot;tel&amp;quot;);&lt;br /&gt;
    Timestamp regdate = rs.getTimestamp(&amp;quot;regdate&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    //하나의 레코드를 하나의 dto로 묶어준다.&lt;br /&gt;
    dto.setAge(age);&lt;br /&gt;
    dto.setName(name);&lt;br /&gt;
    dto.setNo(no);&lt;br /&gt;
    dto.setRegdate(regdate);&lt;br /&gt;
    dto.setTel(tel);&lt;br /&gt;
   }&lt;br /&gt;
   //System.out.println(&amp;quot;번호로 조회, dto =&amp;quot;+dto);//toString의 값이 찍힌다.&lt;br /&gt;
  }finally{&lt;br /&gt;
   DBManager.dbClose(rs, ps, conn);&lt;br /&gt;
  }&lt;br /&gt;
  return dto;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>