on
myBatis - 4. 실습 (class + xml 형식)
myBatis - 4. 실습 (class + xml 형식)
이번에는 class 애너테이션 + xml remix버전으로 실습을 진행할려고합니다.
나머지는 class 애너테이션버전이용하지만
쿼리같은경우는 xml방식이 가독성이좀더좋기 때문에
쿼리는 xml로 진행할려고합니다.
기본세팅
Template.java
package com.memory.batis3.common; import org.apache.ibatis.datasource.pooled.PooledDataSource; import org.apache.ibatis.mapping.Environment; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; import com.memory.batis3.model.dao.MenuMapper; 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); } }
화면에 출력을위한 파일
PrintResult.java
package com.memory.batis3.view; import java.util.List; import com.memory.batis3.model.vo.Menu; public class ResultPrint { public void succesPrint(List menuList) { for(Menu menu : menuList) { System.out.println(menu); } } public void failPrint(String errorMsg) { switch(errorMsg) { case "selectAllMenu" : System.out.println("메뉴 전체 조회를 실패하였습니다."); break; case "insert" : System.out.println("신규 메뉴 추가 실패하였습니다."); break; case "update" : System.out.println("기존 메뉴 수정 실패하였습니다."); break; case "delete" : System.out.println("메뉴 삭제에 실패하였습니다."); break; } } // 메뉴 하나만 출력 public void menuPrint(Menu menu) { System.out.println(menu); } public void sPrint(String sMessage) { String message = ""; switch(sMessage) { case "insert" : message = "신규 메뉴 추가에 성공하셨습니다."; break; case "update" : message = "기존 메뉴 수정에 성공하셨습니다."; break; case "delete" : message = "메뉴 삭제에 성공하셨습니다."; break; } System.out.println(message); } }
메뉴실행을위한 파일
Application.java
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); }
메뉴 목차
1. 메뉴 전체 조회
2. 메뉴 코드로 메뉴 조회
3. 신규 메뉴 추가
4. 메뉴 수정
5. 메뉴 삭제
5가지의 목차로 존재하고
메뉴번호를 입력 했을시 기능이 동작하도록 설정하였습니다.
그리고 값을 넘길때 Map형식으로 넘기는 이유는
jsp/servlet 작업할때 매핑을 Controller에 넘기는데
서버작업하듯이 할려고 Map에담아 값을 넘기는거였습니다!
1. 메뉴 전체 조회
MenuController.java
// 메뉴 전체 조회 public void selectAllMenu() { List menuList = menuService.selectAllMenu(); if(menuList != null) { resultPrint.succesPrint(menuList); }else{ resultPrint.failPrint("selectAllMenu"); } }
MenuService.java
// 메뉴 전체 조회 public List selectAllMenu() { SqlSession sqlSession = getSqlSession(); menuMapper = sqlSession.getMapper(MenuMapper.class); List menuList = menuMapper.selectAllMenu(); sqlSession.close(); return menuList; }
MenuMapper.interface
// 전체 목록 List selectAllMenu();
menuMapper.xml
SELECT MENU_CODE , MENU_NAME , MENU_PRICE , CATEGORY_CODE , ORDERABLE_STATUS FROM TBL_MENU WHERE ORDERABLE_STATUS = 'Y' ORDER BY MENU_CODE
그리고 이렇게 xml과 애너테이션 혼합해서 사용할때는
mapper의 Mapper.interface위치와 xml위치를 같은폴더에 같은이름으로 등록을해줘야하고
메소드이름과 id의 값이 일치해야합니다 .
2. 메뉴 코드로 메뉴 조회
Application.java
// 메뉴코드 번호 받아오기 private static Map inputMenu(){ Scanner sc = new Scanner(System.in); System.out.print("조회하실 메뉴코드를 입력해주세요 : "); String code = sc.nextLine(); Map parameter = new HashMap<>(); parameter.put("code", code); return parameter; }
MenuService.java
// 메뉴코드로 메뉴조회 public Menu selectMenu(int code) { SqlSession sqlSession = getSqlSession(); menuMapper = sqlSession.getMapper(MenuMapper.class); Menu menu = menuMapper.selectMenu(code); sqlSession.close(); return menu; }
MenuMapper.interface
//메뉴 코드로 조회 Menu selectMenu(int code);
menuMapper.xml
SELECT MENU_CODE , MENU_NAME , MENU_PRICE , CATEGORY_CODE , ORDERABLE_STATUS FROM TBL_MENU WHERE ORDERABLE_STATUS = 'Y' AND MENU_CODE = #{code}
3. 신규 메뉴 추가
Application.java
// 신규 메뉴 추가 입력 private static Map 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 parameter = new HashMap<>(); parameter.put("name", name); parameter.put("price", price); parameter.put("categoryCode", categoryCode); return parameter; }
MenuController.java
// 메뉴코드로 메뉴조회 public void selectMenu(Map parameter) { int code = Integer.parseInt(parameter.get("code")); Menu menu = menuService.selectMenu(code); if(menu != null) { resultPrint.menuPrint(menu); }else{ resultPrint.failPrint("selectMenu"); } }
MenuService.java
// 신규메뉴 추가 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.java
// 신규 메뉴 추가 int insertMenu(Menu menu);
menuMapper.xml
INSERT INTO TBL_MENU ( MENU_CODE , MENU_NAME , MENU_PRICE , CATEGORY_CODE , ORDERABLE_STATUS ) VALUES ( SEQ_MENU_CODE.NEXTVAL , #{name} , #{price} , #{categoryCode} , 'Y' )
4. 메뉴 수정
Application.java
// 메뉴 수정 private static Map 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 parameter = new HashMap<>(); parameter.put("code", code); parameter.put("name", name); parameter.put("price", price); parameter.put("categoryCode", categoryCode); return parameter; }
MenuController.java
// 메뉴 수정 public void UpdateMenu(Map 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.java
// 메뉴 수정 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
// 메뉴 수정 int updateMenu(Menu menu);
menuMapper.xml
UPDATE TBL_MENU SET MENU_NAME = #{name} , MENU_PRICE = #{price} , CATEGORY_CODE = #{categoryCode} WHERE MENU_CODE = #{code}
5. 메뉴 삭제
MenuController.java
// 메뉴 삭제 public void deleteMenu(Map parameter) { int code = Integer.parseInt(parameter.get("code")); if(menuService.deleteMenu(code)) { resultPrint.sPrint("delete"); }else { resultPrint.failPrint("delete"); } }
MenuService.java
// 메뉴 삭제 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.java
// 메뉴 삭제 int deleteMenu(int code);
MenuMapper.xml
DELETE FROM TBL_MENU WHERE MENU_CODE = #{code}
후기
코드가줄어서 .. 많은것은좋지만 뭔가 좀더 복잡한느낌을받았고
좀만더 연습해서 잘활용하면 시간단축많이할수있을것같습니다
728x90
from http://memory-develo.tistory.com/124 by ccl(A) rewrite - 2021-10-07 15:01:30