티스토리 뷰

DB/MyBatis

Mybatis - 분리(1)

xoo | 수진 2023. 8. 7. 17:45

🎯오늘 하루는

합쳤다 분리했다 하니 더 헷갈려서

수업 시간에 코드 한줄한줄의 정확한 의미보다는

전체적인 흐름이 어떻게 흘러가는지에 대해 집중하려고 노력했다.

정형화 된 틀이 있으니 그 틀을 이해하고 전체적인 맥락을 이해하기 !

 

main - service - DAO

의 흐름을 항상 생각할것

 

 


 

 

 

 

 

✅ 순서

1. DAO
2. Service (인터페이스)
3. serviceImpl 에서 구현
4. Main에서 서브에 있는 것 호출

 

 


 

 

 

📖 정리

 

✅ 생성

 

 

 

configuration.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

<!-- 추가해주기  -->
<typeAliases>
	<typeAlias alias="DeptDTO" type="com.dto.DeptDTO"/>
</typeAliases>

  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
        <property name="username" value="SCOTT"/>
        <property name="password" value="TIGER"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/config/DeptMapper.xml"/>    <!-- .이 아니라 / 이다. -->
  </mappers>
</configuration>

 

DeptMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="DeptMapper">

  <select id="findAll" resultType="DeptDTO">
  	select deptno, dname, loc
  	from dept
  	order by deptno
  </select>
  
  
  
</mapper>

 

DeptDTO.java

package com.dto;

//dept 테이블의 하나의 행(레코드)을 저장하는 용도
public class DeptDTO {
	
	// DeptDTO 클래스의 변수명은 dept테이블의 컬럼명과 동일하게 지정
	int deptno;  // dept테이블의 deptno 컬럼 저장
	String dname; // dept테이블의 dname 컬럼 저장
	String loc;  // dept테이블의 loc 컬럼 저장
	
	// 생성자
	public DeptDTO() {}

	public DeptDTO(int deptno, String dname, String loc) {
		this.deptno = deptno;
		this.dname = dname;
		this.loc = loc;
	}

	// getter, setter
	public int getDeptno() {
		return deptno;
	}

	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}

	public String getDname() {
		return dname;
	}

	public void setDname(String dname) {
		this.dname = dname;
	}

	public String getLoc() {
		return loc;
	}

	public void setLoc(String loc) {
		this.loc = loc;
	}

	// toString()
	@Override
	public String toString() {
		return deptno+"\\t"+dname+"\\t"+loc;
	}
	
	
}

 

DeptDAO.java

package com.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dto.DeptDTO;

public class DeptDAO {
	
	// service에 있는 메서드
	// SqlSession = JDBC에서의 Connection 역할
	public List<DeptDTO> findAll(SqlSession session) {
		List<DeptDTO> list = session.selectList("DeptMapper.findAll");
		return list;
	}
}

 

DeptService.java (인터페이스)

package com.service;

import java.util.List;

import com.dto.DeptDTO;

public interface DeptService {
	public List<DeptDTO> findAll();
}

 

DeptServiceImpl.java

package com.service;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.dao.DeptDAO;
import com.dto.DeptDTO;

public class DeptServiceImpl implements DeptService {
	// static 영역에서는 인스턴스를 못사용하기 때문에 static 으로 만들어준다.
	static SqlSessionFactory sqlSessionFactory = null;
	static {
		
		String resource = "com/config/Configuration.xml";
		InputStream inputStream=null;   // 초기화
		try {
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}
		SqlSessionFactory sqlSessionFactory =
		  new SqlSessionFactoryBuilder().build(inputStream);
	}// end static 
	
	@Override
	public List<DeptDTO> findAll() {
		List<DeptDTO> list = null;
		// SqlSession 얻기
		SqlSession session = sqlSessionFactory.openSession();
		try {
		///////////////////////////////
		// DAO 연동
		DeptDAO dao = new DeptDAO();
		list = dao.findAll(session);
		//////////////////////////////
		}finally {
		// close
		session.close();
		}
		
		return list;
		
	}
	
}

 

DeptMain.java

import java.util.List;

import com.dto.DeptDTO;
import com.service.DeptService;
import com.service.DeptServiceImpl;

public class DeptMain {

	public static void main(String[] args) {
		DeptService service = new DeptServiceImpl();
		List<DeptDTO> list = service.findAll();
		for (DeptDTO dto : list) {
			System.out.println(dto);
		}

	}

}

 

 


 

2️⃣select - 선택목록   findByDeptno

 

 

DeptDAO.java
package com.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dto.DeptDTO;

public class DeptDAO {

// 2. findByDeptno
	public DeptDTO findByDeptno(SqlSession session, int deptno) {
		DeptDTO dto = session.selectOne("DeptMapper.findByDeptno", deptno);
		return dto;
	}

}

 

DeptService.java (인터페이스)
package com.service;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dto.DeptDTO;

public interface DeptService {
	public DeptDTO findByDeptno(int deptno); // 2.findByDeptno
}

 

DeptServiceImpl.java
package com.service;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.dao.DeptDAO;
import com.dto.DeptDTO;

public class DeptServiceImpl implements DeptService {
	// static 영역에서는 인스턴스를 못사용하기 때문에 static 으로 만들어준다.
	static SqlSessionFactory sqlSessionFactory = null;
	static {
		
		String resource = "com/config/Configuration.xml";
		InputStream inputStream=null;   // 초기화
		try {
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}
		SqlSessionFactory sqlSessionFactory =
		  new SqlSessionFactoryBuilder().build(inputStream);
	}// end static 
	

	@Override    // 2. findByDeptno
	public DeptDTO findByDeptno(int deptno) {
		DeptDTO dto = null;
		SqlSession session = sqlSessionFactory.openSession();
		try {
			//DAO 연동
			DeptDAO dao = new DeptDAO();
			dto = dao.findByDeptno(session, deptno);
		}finally {
			session.close();
		}
		
		return dto;
	}
	
}

 

DeptMain.java
import java.util.List;

import com.dto.DeptDTO;
import com.service.DeptService;
import com.service.DeptServiceImpl;

public class DeptMain {

	public static void main(String[] args) {
		
		// 서비스 연동
		
		// 2. findByDeptno
		DeptDTO xxx = service.findByDeptno(20);
		System.out.println(xxx);
		
	}

}

 

 


 

 

3️⃣ 저장 insert

DeptDAO.java

package com.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dto.DeptDTO;

public class DeptDAO {

// 3. insert
	public int addDept(SqlSession session, DeptDTO dto) {
		int n = session.insert("DeptMapper2.addDept", dto);
		return n;
	}
	
}

 

DeptService.java

package com.service;

import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dto.DeptDTO;

public interface DeptService {
public int addDept(DeptDTO dto); // 3.insert
}

 

DeptServiceImpl.java

package com.service;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.dao.DeptDAO;
import com.dto.DeptDTO;

public class DeptServiceImpl implements DeptService {
	// static 영역에서는 인스턴스를 못사용하기 때문에 static 으로 만들어준다.
	static SqlSessionFactory sqlSessionFactory = null;
	static {
		
		String resource = "com/config/Configuration.xml";
		InputStream inputStream=null;   // 초기화
		try {
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}
		SqlSessionFactory sqlSessionFactory =
		  new SqlSessionFactoryBuilder().build(inputStream);
	}// end static

@Override
	public int addDept(DeptDTO dto) {
		int n = 0;
		SqlSession session = sqlSessionFactory.openSession();
			try {
			// DAO 연동
				DeptDAO dao = new DeptDAO();
				n = dao.addDept(session, dto);
				session.commit();    // 명시적 commit
			}finally {
				session.close();
			}
		return n;
	}
	
}

 

DeptMain.java

import java.util.List;

import com.dto.DeptDTO;
import com.service.DeptService;
import com.service.DeptServiceImpl;

public class DeptMain {

	public static void main(String[] args) {
		
		// 서비스 연동
		// 3. 저장 insert
		int n = service.addDept(new DeptDTO(99, "관리", "부산"));
		System.out.println(n+" 개가 저장됨.");
	}

}

 

 


 

4️⃣ 수정 update

 

DeptDAO.java
package com.dao;

import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dto.DeptDTO;

public class DeptDAO {

// 4. update
	public int updateDept(SqlSession session, HashMap<String, Object> map) {
		int n = session.update("DeptMapper.updateDept", map);
		return n;
	}

 

DeptService.java
package com.service;

import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dto.DeptDTO;

public interface DeptService {

public int updateDept(HashMap<String, Object> map);  // 4.update

}

 

DeptServiceImpl.java

 

package com.service;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.dao.DeptDAO;
import com.dto.DeptDTO;

public class DeptServiceImpl implements DeptService {
	// static 영역에서는 인스턴스를 못사용하기 때문에 static 으로 만들어준다.
	static SqlSessionFactory sqlSessionFactory = null;
	static {
		
		String resource = "com/config/Configuration.xml";
		InputStream inputStream=null;   // 초기화
		try {
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}
		SqlSessionFactory sqlSessionFactory =
		  new SqlSessionFactoryBuilder().build(inputStream);
	}// end static

@Override   // 4.update
	public int updateDept(HashMap<String, Object> map) {
		int n = 0;
		SqlSession session = sqlSessionFactory.openSession();
		try {
			//DAO 연동
			DeptDAO dao = new DeptDAO();
			n = dao.updateDept(session, map);
			session.commit();
		}finally {
			session.close();
		}
		
		
		return n;
	}

 

DeptMain.java

import java.util.HashMap;
import java.util.List;

import com.dto.DeptDTO;
import com.service.DeptService;
import com.service.DeptServiceImpl;

public class DeptMain {

	public static void main(String[] args) {
		
		// 서비스 연동
// 4. 수정 update
		HashMap<String, Object> map = new HashMap<>();
		map.put("deptno", 99);
		map.put("dname", "관리과");
		map.put("loc", "부산시");
				
		int n2 = service.updateDept(map);
		System.out.println(n2+" 개가 수정됨.");
}

 

 


 

4️⃣ 수정 update

DeptDAO.java

package com.dao;

import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dto.DeptDTO;

public class DeptDAO {

// 4. update
	public int updateDept(SqlSession session, HashMap<String, Object> map) {
		int n = session.update("DeptMapper.updateDept", map);
		return n;
	}

 

DeptService.java

package com.service;

import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dto.DeptDTO;

public interface DeptService {

public int updateDept(HashMap<String, Object> map);  // 4.update

}

 

DeptServiceImpl.java
package com.service;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.dao.DeptDAO;
import com.dto.DeptDTO;

public class DeptServiceImpl implements DeptService {
	// static 영역에서는 인스턴스를 못사용하기 때문에 static 으로 만들어준다.
	static SqlSessionFactory sqlSessionFactory = null;
	static {
		
		String resource = "com/config/Configuration.xml";
		InputStream inputStream=null;   // 초기화
		try {
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}
		SqlSessionFactory sqlSessionFactory =
		  new SqlSessionFactoryBuilder().build(inputStream);
	}// end static

@Override   // 4.update
	public int updateDept(HashMap<String, Object> map) {
		int n = 0;
		SqlSession session = sqlSessionFactory.openSession();
		try {
			//DAO 연동
			DeptDAO dao = new DeptDAO();
			n = dao.updateDept(session, map);
			session.commit();
		}finally {
			session.close();
		}
		
		
		return n;
	}

 

DeptMain.java

import java.util.HashMap;
import java.util.List;

import com.dto.DeptDTO;
import com.service.DeptService;
import com.service.DeptServiceImpl;

public class DeptMain {

	public static void main(String[] args) {
		
		// 서비스 연동
// 4. 수정 update
		HashMap<String, Object> map = new HashMap<>();
		map.put("deptno", 99);
		map.put("dname", "관리과");
		map.put("loc", "부산시");
				
		int n2 = service.updateDept(map);
		System.out.println(n2+" 개가 수정됨.");
}

 


 

5️⃣ 삭제 delete

DeptDAO.java

package com.dao;

import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dto.DeptDTO;

public class DeptDAO {

// 5. delete
	public int deleteDept(SqlSession session, int deptno) {
		int n = session.delete("DeptMapper.deleteDept", deptno);
		return n;
	}
}

 

DeptService.java

package com.service;

import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dto.DeptDTO;

public interface DeptService {

public int deleteDept(int deptno);  // 5.delete

}

 

DeptServiceImpl.java

package com.service;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.dao.DeptDAO;
import com.dto.DeptDTO;

public class DeptServiceImpl implements DeptService {
	// static 영역에서는 인스턴스를 못사용하기 때문에 static 으로 만들어준다.
	static SqlSessionFactory sqlSessionFactory = null;
	static {
		
		String resource = "com/config/Configuration.xml";
		InputStream inputStream=null;   // 초기화
		try {
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}
		SqlSessionFactory sqlSessionFactory =
		  new SqlSessionFactoryBuilder().build(inputStream);
	}// end static

@Override
	public int deleteDept(int deptno) {
		int n = 0;
		SqlSession session = sqlSessionFactory.openSession();
		try {
			//DAO 연동
			DeptDAO dao = new DeptDAO();
			n = dao.deleteDept(session, deptno);
			session.commit();
		}finally {
			session.close();
		}
		
		return n;
	}
	
}

 

DeptMain.java

import java.util.HashMap;
import java.util.List;

import com.dto.DeptDTO;
import com.service.DeptService;
import com.service.DeptServiceImpl;

public class DeptMain {

	public static void main(String[] args) {
		
		// 서비스 연동
//5. 삭제 delete
		int n3 = service.deleteDept(99);
		System.out.println(n2+" 개가 삭제됨.");
		
	}

 

 

'DB > MyBatis' 카테고리의 다른 글

Mybatis - 분리(2)  (0) 2023.08.07
Mybatis - 조건문  (0) 2023.08.07
Mybatis - Dynamic SQL  (0) 2023.08.07
Mybatis - 환경설정 및 SELECT 예제  (0) 2023.08.04
트랜잭션(Transaction) 처리  (0) 2023.08.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함