🎯오늘 하루는
합쳤다 분리했다 하니 더 헷갈려서
수업 시간에 코드 한줄한줄의 정확한 의미보다는
전체적인 흐름이 어떻게 흘러가는지에 대해 집중하려고 노력했다.
정형화 된 틀이 있으니 그 틀을 이해하고 전체적인 맥락을 이해하기 !
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 |