framework/mybatis

[mybatis] 5. 인터페이스 기반의 매퍼파일 (MyMember 출력 프로그램)

jeri 2024. 7. 20. 20:09
반응형

 

1) [DTO] MyMember.java

package xyz.itwill.dto;

//create table mymember(id varchar2(20) primary key, name varchar2(50), phone varchar2(20), email varchar2(100));

/*
이름    널?       유형
----- -------- -------------
ID    NOT NULL VARCHAR2(20)
NAME           VARCHAR2(50)
PHONE          VARCHAR2(20)
EMAIL          VARCHAR2(100)
*/
public class MyMember {
	private String id;
	private String name;
	private String phone;
	private String email;
    public MyMember() {
		// TODO Auto-generated constructor stub
	}
	public String getId() {return id;}
	public void setId(String id) {this.id = id;}
	public String getName() {return name;}
	public void setName(String name) {this.name = name;}
	public String getPhone() {return phone;}
	public void setPhone(String phone) {this.phone = phone;}
	public String getEmail() {return email;
	}public void setEmail(String email) {this.email = email;}
}

2) [Mapper] MyMemberInterfaceMapper.java

package xyz.itwill.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import xyz.itwill.dto.MyMember;

//mybatis 프레임워크에서는 인터페이스를 이용하여 매퍼 설정 가능
//=> 추상메소드에 매퍼 어노테이션(Mapper Annotation)을 사용하여 SQL 명령 등록
public interface MyMemberInterfaceMapper {
	//@Insert : 추상메소드에 INSERT 명령을 등록하기 위한 어노테이션
	//value속성 : 추상메소드에 등록할 SQL 명령을 속성값으로 설정
	//=> 주의) value 속성외에 다른 속성이 없는 경우 속성값만 작성 가능
	//@Insert(value = "insert into mymember values (#{id},#{name},#{phone},#{email})")
	@Insert("insert into mymember values(#{id},#{name},#{phone},#{email})")
    
	//추상메소드의 매개변수에는 SQL 명령에 필요한 객체(값)를 전달하기 위해 선언하며, 반환형은 등록된 SQL 명령을 전달하여 실행한 결과를 제공받기 위해 Java 자료형을 선언
	//=> XML기반의 매퍼파일과 비교
	//=> @Insert : insert엘리먼트
  	//=> 반환형 : resultType
  	//=> 메소드 : elementId
  	//=> 매개변수 : parameterType
	int insertMember(MyMember member);
    
	//@Update : 추상메소드에 UPDATE 명령을 등록하기 위한 어노테이션
	@Update("update mymember set name=#{name}, phone=#{phone}, email=#{email} where id=#{id}")
	int updateMember(MyMember member);

	//@Delete : 추상메소드에 DELETE 명령을 등록하기 위한 어노테이션
	@Delete("delete from mymember where id=#{id}")
	int deleteMember(String id);
    
	//@Select : 추상메소드에 SELECT 명령을 등록하기 위한 어노테이션
	@Select("select * from mymember where id=#{id}")
	MyMember selectMember(String id);
    
	//xml기반의 매퍼파일과는 다르게 반환형에 반환받을 "List"객체 명시해줌
	@Select("select * from mymember order by id")
	List<MyMember> selectMemberList();
    
}

 

3) [DAO] MyMemberInterfaceDAO.java

package xyz.itwill.dao;

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 xyz.itwill.dto.MyMember;
import xyz.itwill.mapper.MyMemberInterfaceMapper;

public class MyMemberInterfaceDAO {
	private static MyMemberInterfaceDAO _dao;

	private MyMemberInterfaceDAO() {
		// TODO Auto-generated constructor stub
	}

	static {
		_dao = new MyMemberInterfaceDAO();
	}
	public static MyMemberInterfaceDAO getDAO() {
		return _dao;
	}
	//SqlSessionFactory를 반환하는 메소드
	private SqlSessionFactory getSessionFactory() {
		String resource = "mybatis-config.xml";
		InputStream inputStream = null;
		try {
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			throw new IllegalArgumentException();
		}
		return new SqlSessionFactoryBuilder().build(inputStream);
	}
	//회원정보를 전달받아 MYMEMBER 테이블에 삽입하고 삽입행의 갯수를 반환하는 메소드
	public int insertMember(MyMember member) {
		SqlSession sqlSession = getSessionFactory().openSession(true);
		try {
			//SqlSession.getMapper(Class<T> clazz) : 메모리에 저장된 인터페이스(매퍼)를 제공받아 Mapper 객체로 생성하여 반환한는 메소드
      		//클래즈 만드는 방법 3가지 : getClass / class.forName /
			// => 매개변수에 [XXX.class] 형식으로 인터페이스를 직접 표현하여 class 객체(clazz)를 전달
			//Mapper 객체 : 인터페이스를 제공받아 생성하며 추상메소드를 호출하여 등록된 SQL
			//명령을 전달하여 실행하고 실행결과를 매핑하여 반환하기 위한 기능을 제공하는 객체
			return sqlSession.getMapper(MyMemberInterfaceMapper.class).insertMember(member);
		} finally {
			sqlSession.close();
		}
	}
	//회원정보를 전달받아 MYMEMBER 테이블에 저장된 회원정보를 변경하고 변경행의 갯수를 반환하는 메소드
	public int updateMember(MyMember member) {
		SqlSession sqlSession = getSessionFactory().openSession(true);
		try {
			return sqlSession.getMapper(MyMemberInterfaceMapper.class).updateMember(member);
		} finally {
			sqlSession.close();
		}
	}
	//아이디를 전달받아  MYMEMBER 테이블에 저장된 회원정보를 삭제하고 삭제행의 갯수를 반환하는 메소드
	public int deleteMember(String id) {
		SqlSession sqlSession = getSessionFactory().openSession(true);
		try {
			return sqlSession.getMapper(MyMemberInterfaceMapper.class).deleteMember(id);
		} finally {
			sqlSession.close();
		}
	}
	//아이디를 전달받아  MYMEMBER 테이블에 저장된 회원정보를 검색하여 반환하는 메소드
	public MyMember selectMember(String id) {
		SqlSession sqlSession = getSessionFactory().openSession(true);
		try {
			return sqlSession.getMapper(MyMemberInterfaceMapper.class).selectMember(id);
		} finally {
			sqlSession.close();
		}
	}
	//MYMEMBER 테이블에 저장된 모든 회원정보를 검색하여 반환하는 메소드
	public List<MyMember> selectMemberList() {
		SqlSession sqlSession = getSessionFactory().openSession(true);
		try {
			return sqlSession.getMapper(MyMemberInterfaceMapper.class).selectMemberList();
		} finally {
			sqlSession.close();
		}
	}
}
반응형