JAVA/HIGH JAVA

5/23 Homework - mybatis적용 lprod테이블추가

아잠만_ 2024. 5. 23. 14:02

문제

LPROD 테이블에 새로운 데이터 추가하기
lprod_gu와 lprod_nm은 직접 입력받아서 처리하고, lprod_id는 현재의 lprod_id값 중에 제일 큰값+1 한다
입력받은 lprod_gu가 이미 등록되어 있으면 다시 입력 받아서 처리한다.

(myBatis를 적용한 프로그램으로 변환하시오)


 

jdbc-mapper.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- 이 문서는 myBatis에서 처리할 SQL문을 작성하는 문서입니다 -->
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
	
<!-- <mapper>태그의 namespace속성에 설정된 값은 Java소스에서 실행할 SQL문을 호출할 때
	 같이 사용되는 이름이다 -->
<mapper namespace="jdbc">
	<select id="guChk" parameterType="String" resultType="int">
		select 1 from lprod where lprod_gu = #{lprod_gu}
	</select>
	
	<insert id="insertLprod" parameterType="lprodVo"> <!-- kr.or.ddit.vo.lprodVO -->
	 	insert into lprod (lprod_id, lprod_gu, lprod_nm)
	 	values (#{lprod_id},#{lprod_gu},#{lprod_nm})
	 </insert>
	 
	 <select id="max" resultType="int">
	 	select max(lprod_id) as max from lprod
	 </select>
</mapper>

JdbcToMybatisTest.java

package kr.or.ddit.basic;

import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

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 kr.or.ddit.vo.LprodVO;

// jdbcTest05.java 프로그램 myBatis를 적용한 프로그램으로 변환하시오
//문제 ) LPROD 테이블에 새로운 데이터 추가하기
//lprod_gu와 lprod_nm은 직접 입력받아서 처리하고, lprod_id는 현재의 lprod_id값 중에 제일 큰값+1 한다
//입력받은 lprod_gu가 이미 등록되어 있으면 다시 입력 받아서 처리한다.

public class JdbcToMybatisTest {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		InputStream in = null;
		SqlSessionFactory sqlSessionFactory = null;
		try {
			in = Resources.getResourceAsStream("kr/or/ddit/mybatis/config/mybatis-config.xml");
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
			
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			if(in!=null)try {in.close();}catch(IOException e) {}
		}
		
		SqlSession session = null;
		try {
			session = sqlSessionFactory.openSession();
			
			int max = session.selectOne("jdbc.max");
			
			String lprod_gu ="";
			while(true) {
				System.out.print("Lprod_gu >> ");
				lprod_gu = scan.next();
				// 만약에 데이터가 없으면 null값으로 나오기 때문에 int로 받지 못함.
				if(session.selectOne("jdbc.guChk", lprod_gu)==null){
					break;
				}
			}
			System.out.print("Lprod_nm >> ");
			String lprod_nm = scan.next();
			
			LprodVO vo = new LprodVO();
			vo.setLprod_gu(lprod_gu);
			vo.setLprod_id(++max);
			vo.setLprod_nm(lprod_nm);
			int insertChk = session.insert("jdbc.insertLprod",vo);
			if(insertChk>0) {
				session.commit();
				System.out.println("작업 성공");
			} else {
				System.out.println("작업 실패");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(session!=null) try { session.close(); } catch(Exception e) {}
		}
	}
}