Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 집합_SET
- 컬렉션프레임워크
- 자동차수리시스템
- 컬렉션 타입
- 객체 비교
- 참조형변수
- oracle
- abstract
- 어윈 사용법
- 메소드오버로딩
- 오라클
- 한국건설관리시스템
- 예외미루기
- 대덕인재개발원
- 자바
- GRANT VIEW
- 다형성
- 추상메서드
- cursor문
- exception
- 정수형타입
- 제네릭
- NestedFor
- 생성자오버로드
- 환경설정
- Java
- 사용자예외클래스생성
- 인터페이스
- 예외처리
- EnhancedFor
Archives
- Today
- Total
거니의 velog
230920_MyBatis 1 본문
[MyBatis란?]
- Java에서 DB를 편리하게 핸들링해주는 프레임워크이다.
- SQL문과 Java코드를 분리하고, 파라미터값만 변경되지 않으면 Java소스 변경없이
SQL문만 변경해서 사용할 수 있다.
- MyBatis 데이터매퍼 API를 이용하여 자바빈즈(보통 VO객체) 혹은 Map객체를 PrepareStatement의
파라미터에 매핑해주고, SQL문의 실행 결과를 자바빈즈 혹은 Map객체에 자동으로 매핑해 준다.
- https://mvnrepository.com/artifact/org.mybatis/mybatis/3.5.6
[dbinfo.properties]
# 이 줄은 주석 처리 줄 입니다...
# 이 properties 파일을 작성하는 방법은
# 'key값=value값' 과 같은 모양으로 작성합니다.
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
user=pc_09
pass=java
[mybatis-config.xml]
<?xml version="1.0" encoding="UTF-8"?>
<!-- 이 문서는 MyBatis의 환경 설정을 구성하는 문서입니다. -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org/DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- DB연결 정보가 저장된 properties파일에 대한 정보를 설정한다. -->
<properties resource="kr/or/ddit/mybatis/config/dbinfo.properties" />
<!-- MyBatis 설정과 관련된 기본 setting 설정 -->
<settings>
<!-- 데이터가 null로 전달되었으면 빈칸으로 인식하지 말고 null로 인식하라 -->
<setting name="jdbcTypeForNull" value="NULL" />
</settings>
<!--
MyBatis에서 파라미터로 사용하는 객체는 패키지명을 포함한 전체 이름을 지정해야 한다.
그렇게 되면 전체 이름이 너무 길어질 수 있어서 이것을 짧은 이름으로 사용하기 위한
별칭을 설정할 수 있다.
형식) <typeAlias type="패키지명이 포함된 전체 클래스명" alias="별칭이름" />
-->
<typeAliases>
<typeAlias type="kr.or.ddit.vo.LprodVO" alias="lprodVo" />
</typeAliases>
<!-- DB연결 설정 -->
<environments default="oracleDev">
<environment id="oracleDev">
<!-- 오라클 -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${user}" />
<property name="password" value="${pass}" />
</dataSource>
</environment>
<!-- <environment id="m1">
MySql
</environment> -->
</environments>
<!-- DB에서 처리될 SQL문들이 작성된 mapper파일들을 등록하는 부분 -->
<!-- 형식) <mapper resource="경로명/파일명.xml" /> -->
<mappers>
<mapper resource="kr/or/ddit/mybatis/mappers/lprod-mapper.xml" />
</mappers>
</configuration>
[LprodVO.java]
package kr.or.ddit.vo;
public class LprodVO {
private int lprod_id;
private String lprod_gu;
private String lprod_nm;
public LprodVO() {}
public LprodVO(int lprod_id, String lprod_gu, String lprod_nm) {
this.lprod_id = lprod_id;
this.lprod_gu = lprod_gu;
this.lprod_nm = lprod_nm;
}
public int getLprod_id() {
return lprod_id;
}
public void setLprod_id(int lprod_id) {
this.lprod_id = lprod_id;
}
public String getLprod_gu() {
return lprod_gu;
}
public void setLprod_gu(String lprod_gu) {
this.lprod_gu = lprod_gu;
}
public String getLprod_nm() {
return lprod_nm;
}
public void setLprod_nm(String lprod_nm) {
this.lprod_nm = lprod_nm;
}
@Override
public String toString() {
return "LprodVO [lprod_id=" + lprod_id + ", lprod_gu=" + lprod_gu + ", lprod_nm=" + lprod_nm + "]";
}
}
[lprod-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 속성값은 이 문서에 작성된 SQL문을 호출할 때
같이 사용되는 이름이다.
-->
<mapper namespace="lprod">
<!--
이 <mapper>태그 영역 안에는 처리할 SQL문에 맞는 태그를 사용해서 SQL문을 작성한다.
* 사용할 수 있는 태그들...
<select> select 구문 ~~~ </select>
<insert> insert 구문 ~~~ </insert>
<update> update 구문 ~~~ </update>
<delete> delete 구문 ~~~ </delete>
등...
-->
<!--
* id속성 ==> 실행할 SQL문이 작성된 태그를 Java소스에서 호출할 때 사용되는 이름으로
위의 <mapper> 태그의 namespace 속성값과 연결해서 사용한다.
예) "lprod.insertLprod"
* parameterType 속성 ==> 작성된 SQL문에 사용될 데이터가 들어있는 객체정보를 기술한다.
(보통 VO클래스, Java의 기본 자료형 이름, Map객체 등이 사용된다.)
(VO클래스 등을 기술할 때는 해당 클래스의 패키지명을 포함한 전체 이름을 기술해야 한다.)
(이 속성에는 <typeAlias>태그에서 지정한 'alias속성값'을 사용할 수 있다.)
-->
<!-- <insert id="insertLprod" parameterType="kr.or.ddit.vo.LprodVO"> -->
<insert id="insertLprod" parameterType="lprodVo">
insert into lprod (lprod_id, lprod_gu, lprod_nm)
values (#{lprod_id}, #{lprod_gu}, #{lprod_nm})
</insert>
</mapper>
[LprodMybatisTest.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;
// MyBatis를 이용하여 DB자료를 처리하는 순서 및 방법
public class LprodMybatisTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 1. MyBatis의 환경 설정 파일(mybatis-config.xml)을 읽어와서 처리하여
// SqlSessionFactory객체를 생성한다.
InputStream in = null;
SqlSessionFactory sqlSessionFactory = null;
try {
// 1-1. 환경 설정 파일을 읽어올 스트림 객체 생성
in = Resources.getResourceAsStream("kr/or/ddit/mybatis/config/mybatis-config.xml");
// 1-2. 환경 설정 파일을 읽어와 환경 설정을 완성한 후 SqlSessionFactory객체를 생성한다.
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
} catch (Exception e) {
System.out.println("MyBatis 초기화 실패!!!");
e.printStackTrace();
} finally {
if(in != null) try { in.close(); } catch (IOException e) {}
}
//--------------------------------------------------------------------------
// 2. Mapper에 등록된 SQL문들 중에 실행할 SQL문을 호출해서 원하는 작업을 수행한다.
// 2-1. insert 연습
System.out.println("insert 작업 시작...");
System.out.print("LPROD_ID 입력 >> ");
int lprodId = scan.nextInt();
System.out.print("LPROD_GU 입력 >> ");
String lprodGu = scan.next();
System.out.print("LPROD_NM 입력 >> ");
String lprodNm = scan.next();
// 1) 저장할 데이터들을 VO객체에 저장한다.
LprodVO lprodVo = new LprodVO();
lprodVo.setLprod_id(lprodId);
lprodVo.setLprod_gu(lprodGu);
lprodVo.setLprod_nm(lprodNm);
SqlSession session = null;
try {
// 2) SqlSessionFactory객체의 openSession()메서드를 이용하여
// SQL문을 호출해서 실행할 수 있는 SqlSession객체를 생성한다.
// 형식) SqlSessionFactory객체.openSession(논리값)
// '논리값'이 true이면 AutoCommit이 활성화된 상태이고
// '논리값'이 false이거나 생략되면 AutoCommit이 비활성화된 상태이다.
session = sqlSessionFactory.openSession();
// 3) SqlSession객체를 이용하여 처리할 SQL문을 호출하여 실행한다.
// 형식) SqlSession객체.insert("namespace속성값.실행할태그의id속성값", 파라미터클래스);
// 반환값 : 작업에 성공한 레코드수
int insertCnt = session.insert("lprod.insertLprod", lprodVo);
if(insertCnt > 0) {
// 4) SqlSession객체를 생성할 때 AutoCommit이 비활성화된 상태일 때는
// commit을 직접 실행해야 한다.
session.commit();
System.out.println("insert 작업 성공!!!");
}else {
System.out.println("insert 작업 실패~~~");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 5) 작업이 끝나면 SqlSession객체를 닫아준다.
if(session != null) session.close();
}
}
}
'대덕인재개발원_자바기반 애플리케이션' 카테고리의 다른 글
230921_MyBatis 과제_myBatisBoardTest (0) | 2023.09.21 |
---|---|
230921_MyBatis 2 (0) | 2023.09.21 |
230919_MVC 2 (0) | 2023.09.18 |
230918_MVC 1 (0) | 2023.09.15 |
230915_JDBC 2 (0) | 2023.09.15 |