myBatis - 3. 실습 (class형식)

xml과 다른거는 비슷하지만 다른점은 Service, dao, xml을 사용 안한다는점이 다릅니다.

XML방식은 XML에 쿼리문이랑 CONNECTION 작성하지만 

애너테이션방식은 Mapper 인터페이스에 애너테이션형식으로 쿼리문작성합니다.

 

Template.class

public class Template {

	public static String DRIVER = "oracle.jdbc.driver.OracleDriver";
	public static String URL = "jdbc:oracle:thin:@localhost:1521:xe";
	public static String USER = "mybatis";
	public static String PASSWORD = "mybatis";
	public static SqlSessionFactory sqlSessionFactory;
	
	public static SqlSession getSqlSession() {
		
		if(sqlSessionFactory == null) {
			Environment environment = new Environment("dev", new JdbcTransactionFactory(), new PooledDataSource(DRIVER, URL, USER, PASSWORD));
			
			Configuration configuration = new Configuration(environment);
			configuration.addMapper(MenuMapper.class);
			
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
		}
		
		return sqlSessionFactory.openSession(false);
	}
	
}

 

Application.class

package com.memory.batis2.run;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

import com.memory.batis2.controller.MenuController;

public class Application {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		MenuController menuController = new MenuController();
		
		do {
			System.out.println("================ 메뉴 관련 ================");
			System.out.println("1. 메뉴 전체 조회");
			System.out.println("2. 메뉴 코드로 메뉴 조회");
			System.out.println("3. 신규 메뉴 추가");
			System.out.println("4. 메뉴 수정");
			System.out.println("5. 메뉴 삭제");
			System.out.println("메뉴 관리 번호를 입력하세요 : ");
			int no = sc.nextInt();
			
			switch(no) {
				case 1 : menuController.selectAllMenu(); break;
				case 2 : menuController.selectMenu(inputMenu()); break;
				case 3 : menuController.insertMenu(inputInsert()); break;
				case 4 : menuController.UpdateMenu(inputUpdate()); break;
				case 5 : menuController.deleteMenu(inputMenu()); break;
				default : System.out.println("잘못된 메뉴를 선택하셨습니다."); break;
			}
			
		}while(true);
	}
	
	// 메뉴코드 번호 받아오기
	private static Map<String, String> inputMenu(){
		Scanner sc = new Scanner(System.in);
		
		System.out.print("조회하실 메뉴코드를 입력해주세요 : ");
		String code = sc.nextLine();
		
		Map<String, String> parameter = new HashMap<>();
		parameter.put("code", code);
		
		return parameter;
	}
	
	// 신규 메뉴 추가 입력
	private static Map<String, String> inputInsert(){
		Scanner sc = new Scanner(System.in);
		
		System.out.print("추가하실 메뉴명을 입력해주세요 : ");
		String name = sc.nextLine();
		
		System.out.print("추가하실 메뉴의 가격을 입력해주세요 : ");
		String price = sc.nextLine();
		
		System.out.print("추가하실 메뉴의 카테고리 코드를 입력해주세요 : ");
		String categoryCode = sc.nextLine();
		
		Map<String, String> parameter = new HashMap<>();
		parameter.put("name", name);
		parameter.put("price", price);
		parameter.put("categoryCode", categoryCode);
		
		return parameter;
	} 
	
	// 메뉴 수정
	private static Map<String, String> inputUpdate(){
		Scanner sc = new Scanner(System.in);
		
		System.out.print("수정하실 메뉴 코드를 입력해주세요 : ");
		String code = sc.nextLine();
		
		System.out.print("수정하실 메뉴명을 입력해주세요 : ");
		String name = sc.nextLine();
		
		System.out.print("수정하실 메뉴의 가격을 입력해주세요 : ");
		String price = sc.nextLine();
		
		System.out.print("수정하실 메뉴의 카테고리 코드를 입력해주세요 : ");
		String categoryCode = sc.nextLine();
		
		Map<String, String> parameter = new HashMap<>();
		parameter.put("code", code);
		parameter.put("name", name);
		parameter.put("price", price);
		parameter.put("categoryCode", categoryCode);
		
		return parameter;
	} 
}

 

1. 전체 목록 조회

MenuController.class

// 메뉴 전체 조회
	public void selectAllMenu() {
		List<Menu> menuList = menuService.selectAllMenu();
		
		if(menuList != null) {
			resultPrint.succesPrint(menuList);
		}else{
			resultPrint.failPrint("selectAllMenu");
		}
		
	}

 

MenuService.class

// 메뉴 전체 조회
	public List<Menu> selectAllMenu() {
		SqlSession sqlSession = getSqlSession();
		
		menuMapper = sqlSession.getMapper(MenuMapper.class);
		List<Menu> menuList = menuMapper.selectAllMenu();
		
		sqlSession.close();
		
		return menuList;
	}

 

MenuMapper.inteface

// 전체 목록
	@Results(id = "menuResultMap", value= {
		@Result(id = true, property = "code", column = "MENU_CODE"),
		@Result(property = "name", column = "MENU_NAME"),
		@Result(property = "price", column = "MENU_PRICE"),
		@Result(property = "categoryCode", column = "CATEGORY_CODE"),
		@Result(property = "orderableStatus", column = "ORDERABLE_STATUS"),
	})
	@Select("SELECT"
		  + "       MENU_CODE"
		  + "     , MENU_NAME"
		  + "     , MENU_PRICE"
		  + "     , CATEGORY_CODE"
		  + "     , ORDERABLE_STATUS"
		  + "  FROM TBL_MENU"
		  + " WHERE ORDERABLE_STATUS = 'Y'"
		  + " ORDER BY MENU_CODE"
		  )
	List<Menu> selectAllMenu();

2 . 메뉴 코드로 메뉴 조회

MenuController.class

// 메뉴코드로 메뉴조회
	public void selectMenu(Map<String, String> parameter) {
		int code = Integer.parseInt(parameter.get("code"));
		
		Menu menu = menuService.selectMenu(code);
		
		if(menu != null) {
			resultPrint.menuPrint(menu);
		}else{
			resultPrint.failPrint("selectMenu");
		}
		
	}

 

MenuService.class

// 메뉴코드로 메뉴조회
	public Menu selectMenu(int code) {
		SqlSession sqlSession = getSqlSession();
		
		menuMapper = sqlSession.getMapper(MenuMapper.class);
		Menu menu = menuMapper.selectMenu(code);
		
		sqlSession.close();
		
		return menu;
	}

 

MenuMapper.class

	//메뉴 코드로 조회
	@Select("SELECT"
		  + "       MENU_CODE"
		  + "     , MENU_NAME"
		  + "	  , MENU_PRICE"
		  + "	  , CATEGORY_CODE"
		  + "     , ORDERABLE_STATUS"
		  + "  FROM TBL_MENU"
		  + " WHERE ORDERABLE_STATUS = 'Y'"
		  + "   AND MENU_CODE = #{code}")
	@ResultMap("menuResultMap")
	Menu selectMenu(int code);

 

 

 

3 . 신규 메뉴 추가

MenuController.class

// 신규 메뉴 추가
	public void insertMenu(Map<String, String> parameter) {
		
		// 전달받은 파라미터값을 변수에 저장
		String name = parameter.get("name");
		int price = Integer.parseInt(parameter.get("price"));
		int categoryCode = Integer.parseInt(parameter.get("categoryCode"));
		
		// 작업에 필요한 값을 Menu객체에 저장
		Menu menu = new Menu();
		menu.setName(name);
		menu.setPrice(price);
		menu.setCategoryCode(categoryCode);
		
		if(menuService.insertMenu(menu)) {
			resultPrint.sPrint("insert");
		}else {
			resultPrint.failPrint("insert");
		}
		
	}

 

MenuService.class

// 신규메뉴 추가
	public boolean insertMenu(Menu menu) {
		SqlSession sqlSession = getSqlSession();
		
		menuMapper = sqlSession.getMapper(MenuMapper.class);
		int result = menuMapper.insertMenu(menu);
		
		if(result > 0) {
			sqlSession.commit();
		}else {
			sqlSession.rollback();
		}
		
		sqlSession.close();
		
		return result > 0 ? true : false;
	}

 

MenuMapper.class

// 신규 메뉴 추가
	@Insert("INSERT "
			+ "INTO TBL_MENU "
			+ "("
			+ "		MENU_CODE"
			+ "   , MENU_NAME"
			+ "	  , MENU_PRICE"
			+ "   , CATEGORY_CODE"
			+ "   , ORDERABLE_STATUS"
			+ ") "
			+ "VALUES "
			+ "("
			+ "		SEQ_MENU_CODE.NEXTVAL"
			+ "   , #{name}"
			+ "	  , #{price}"
			+ "   , #{categoryCode}"
			+ "   , 'Y' "
			+ ") ")
	int insertMenu(Menu menu);

 

4 . 메뉴 수정

MenuController.class

// 메뉴 수정
	public void UpdateMenu(Map<String, String> parameter) {
		int code = Integer.parseInt(parameter.get("code"));
		String name = parameter.get("name");
		int price = Integer.parseInt(parameter.get("price"));
		int categoryCode = Integer.parseInt(parameter.get("categoryCode"));
		
		// 작업에 필요한 값을 Menu객체에 저장
		Menu menu = new Menu();
		menu.setCode(code);
		menu.setName(name);
		menu.setPrice(price);
		menu.setCategoryCode(categoryCode);
		
		if(menuService.updateMenu(menu)) {
			resultPrint.sPrint("update");
		}else {
			resultPrint.failPrint("update");
		}
		
	}

 

MenuService.class

// 메뉴 수정
	public boolean updateMenu(Menu menu) {
		SqlSession sqlSession = getSqlSession();
		
		menuMapper = sqlSession.getMapper(MenuMapper.class);
		int result = menuMapper.updateMenu(menu);
		
		if(result > 0) {
			sqlSession.commit();
		}else {
			sqlSession.rollback();
		}
		
		sqlSession.close();
		
		return result > 0 ? true : false;
	}

 

MenuMapper.interface

// 메뉴 수정
	@Update("UPDATE "
		  + "	    TBL_MENU "
		  + "   SET MENU_NAME = #{name}"
		  + "	  , MENU_PRICE = #{price}"
		  + "     , CATEGORY_CODE = #{categoryCode}"
		  + " WHERE MENU_CODE = #{code} "
		  + "   AND ORDERABLE_STATUS = 'Y' ")
	int updateMenu(Menu menu);

 

 

5 . 메뉴 삭제

MenuController.class

// 메뉴 삭제
	public void deleteMenu(Map<String, String> parameter) {
		int code = Integer.parseInt(parameter.get("code"));
		
		if(menuService.deleteMenu(code)) {
			resultPrint.sPrint("delete");
		}else {
			resultPrint.failPrint("delete");
		}
		
	}

 

MenuService.class

// 메뉴 삭제
	public boolean deleteMenu(int code) {
		SqlSession sqlSession = getSqlSession();
		
		menuMapper = sqlSession.getMapper(MenuMapper.class);
		int result = menuMapper.deleteMenu(code);
		
		if(result > 0) {
			sqlSession.commit();
		}else {
			sqlSession.rollback();
		}
		
		sqlSession.close();
		
		return result > 0 ? true : false;
	}

 

MenuMapper.inteface

// 메뉴 삭제
	@Delete("DELETE "
		  + "FROM TBL_MENU "
		  + "WHERE MENU_CODE = #{code} "
		  + "  AND ORDERABLE_STATUS = 'Y' ")
	int deleteMenu(int code);

 

 

작업을 해보았지만

뭔가 ..xml에 보다 좀불편한느낌이든다 ..

다음엔 xml + 애너테이션 방식으로 작업을 진행하겠습니다.

'프로그래밍 > myBatis' 카테고리의 다른 글

myBatis - 5. 동적 쿼리  (0) 2021.10.07
myBatis - 4. 실습 (class + xml 형식)  (0) 2021.10.07
myBatis - 2. 실습 전체 목록 조회(xml형식)  (0) 2021.10.05
myBatis - 1. 기본설정  (0) 2021.10.05
Framwork, Library  (0) 2021.10.05
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유