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 |