티스토리 뷰

DB/MyBatis

Mybatis - 분리(2)

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

🎯오늘 하루는

정적 메소드 (static method) 의 개념을 확실하게 되짚어볼 수 있었다.

1. 인스턴스 생성 없이 호출이 가능하고

2. 유틸리티 관련 함수를 만드는데 유용하게 사용된다는 점 !

이 개념을 몰랐으면 아주 번거롭게 코드를 짰을거란 생각이...이래서 기초개념을 탄탄하게 다져야하는구나 싶다!

 

 

 


 

📌오늘의 키워드

🔔 MyBatis ( 과거 ibatis ⇒ 에러 메시지에 출력될 수 있음)
jar ⇒ mybatis-3.5.13.jar & ojdbc6_g.jar ⇒ 이클립스 build path 필수!!
xml(Configuration, Mapper - 이름 대소문자 구분함!!)
java-xml 읽기 (import 주의! , 경로는 패키지나 이름에 따라 다를 수 있음)
SqlSession 객체 (메서드 호출 / 값 반환)
typeAlias(별칭 적용) [session].commit() 호출 또는 openSession(true) 설정
DAO
Service 인터페이스



SqlSessionFactory 주요 메서드
.openSession() ⇒ SqlSession 반환
SqlSession 주요 메서드
.selectOne()
.selectList()
.insert()
.update()
.delete()
.commit()
.close()

 


 

✅ 이 부분을 분리하기 위해 클래스를 새로 만든다.

 

 

 


 

 

1️⃣클래스 생성

 

 


2️⃣ DeptServiceImple에 있는 부분을 잘라서 새로운 클래스에 붙여넣는다.

 

 

 


3️⃣ MySqlSessionFactory 클래스에서 session을 리턴해주는 작업이 필요한데
      new 없이 메서드를 사용하기 위해 static으로 수정해준다.

💡 Static을 안쓴다면?
 객체 생성을 해주고 써야 하는 번거로운 점이 생김

 

 


4️⃣ Static으로 변경해주었기 때문에 MySqlSessionFactory.getSession();으로 다 변경해준다.

 

 

 

 

 


 

 

✅ MySqlSessionFactory.java

package com.comfig;

import java.io.IOException;
import java.io.InputStream;

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

public class MySqlSessionFactory {

	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 =
		  new SqlSessionFactoryBuilder().build(inputStream);
	}// end static 
	
	
	// ServiceImpl에 SqlSession 반환하는 메서드
	// 객체 생성하지않고 (new 없이) 메서드를 사용하기 위해 static으로 설정
	public static SqlSession getSession() {
		SqlSession session = sqlSessionFactory.openSession();
		return session;
	}
}

 

 

 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.comfig.MySqlSessionFactory;
import com.dao.DeptDAO;
import com.dto.DeptDTO;

public class DeptServiceImpl implements DeptService {
	
	@Override    // 1. findAll
	public List<DeptDTO> findAll() {
		List<DeptDTO> list = null;
		// SqlSession 얻기
		SqlSession session = MySqlSessionFactory.getSession();
		try {
		///////////////////////////////
		// DAO 연동
		DeptDAO dao = new DeptDAO();
		list = dao.findAll(session);
		//////////////////////////////
		}finally {
		// close
		session.close();
		}
		
		return list;
	}

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




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




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




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

 

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

Mybatis - 분리(1)  (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
글 보관함