김갱환
맨땅에 코딩
김갱환
전체 방문자
오늘
어제
  • 분류 전체보기 (239)
    • ⁂ 맨땅에 코딩 (11)
      • : Story (3)
      • : MiniProject 'MyWeb' (1)
      • : Final Project (5)
      • : Josa-Moa 한국어 조사 처리 프로젝트 (1)
    • —————Frontend——————————————.. (0)
    • ⁂ HTML (10)
      • : 기본 익히기 (10)
    • ⁂ CSS (15)
      • : 기본 익히기 (15)
    • ⁂ Java Script (32)
      • : 기본 익히기 (28)
      • : 자바스크립트 라이브러리 (1)
      • : 연습 문제 (3)
    • ⁂ jQuery (11)
      • : 기본 익히기 (11)
    • ⁂ Bootstrap (3)
      • : 기본 익히기 (3)
    • ⁂ TailWind CSS (1)
    • ⁂ AJAX (5)
      • : 기본 익히기 (5)
    • ⁂ Vue.js (3)
      • : 기본 익히기 (3)
    • —————DB : Data Base————————.. (0)
    • ⁂ Oracle DB (27)
      • : 기본 익히기 (24)
      • : 연습 문제 (3)
    • ⁂ MyBatis Framework (15)
      • : 기본 익히기 (15)
    • —————Backend———————————————.. (0)
    • ⁂ Java (62)
      • : 기본 익히기 (42)
      • : JDBC - Java DataBase Conn.. (4)
      • : Crawling (2)
      • : 독학으로 공부하기(과거) (11)
      • : 연습문제 (3)
    • ——————Web————————————————— (0)
    • ⁂ JSP (28)
      • : 기본 익히기 (28)
    • ⁂ Spring FrameWork (15)
      • : Legacy Project (1)
      • : 기본 익히기(Boot 기반) (14)
    • ——————————————————————— (0)
    • ⁂ Error Note (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코딩공부 #코딩 #자바 #자바독학 #자바공부 #개발자 #프론트앤드 #백앤드 #풀스택
  • 자바
  • 자바공부
  • 연산자 #기본연산자 #코딩 #자바 #독학 #자바공부 #자바연산자
  • 코딩 #코딩공부 #상수 #리터럴 #형변환 #개발자 #자바 #자바공부 #자바독학
  • 코딩
  • 코딩 #코딩공부 #프론트앤드 #백앤드 #풀스택개발자
  • 백앤드
  • 코딩공부
  • 프론트앤드
  • ErrorPage
  • 비트연산자 #코딩공부 #자바공부 #코딩 #자바 #프로그래밍 #개발자
  • HTML공부
  • 풀스택
  • http에러메세지
  • 개발자
  • 코딩공부 #자바공부
  • web.xml수정
  • httperror
  • 객체지향프로그래밍

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김갱환

맨땅에 코딩

⁂ MyBatis Framework/: 기본 익히기

[MyBatis3] #2 - CRUD

2022. 11. 9. 10:03

새 프로젝트 생성

web.xml은 없어도 된다.

다운로드한 mybatis를 lib 폴더에 넣어준다.

 

net.mem 패키지와 config 폴더 생성

 

mem_sql.txt (config 폴더에 생성)

-- mem_sql.txt

-- 테이블 생성
create table mem(
   num number,
   name varchar2(20),
   age number
);

-- 시퀀스 생성
create sequence mem_seq;

commit;

 

jdbc.xml, mem.xml 생성

 

jdbc.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<!-- jdbc.xml -->
<!-- DBOpen 클래스 + DAO 클래스 -->

<configuration>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<!-- Oracle DB 연결 정보 (DBOpen 클래스 역할) -->
				<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
				<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
				<property name="username" value="system" />
				<property name="password" value="1234" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- SQL문을 작성해 놓은 XML문서 (DAO 클래스 역할) -->
	<mappers>
		<mapper resource="config/mem.xml" />
	</mappers>
</configuration>

이런 식으로 사용

 

이 방식으로 비밀번호를 변경할 경우 추가로 해야 할 작업이 많다. 다시 컴파일해서 서버에 업로드하고 서버도 재부팅해줘야 한다. 하지만 아래 방식으로 할 경우 xml 파일만 바꿔 배포하면 되기 때문에 훨씬 간편하다.

 

 

mem.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- mem.xml -->
<!-- 실행할 SQL문을 정의해 놓은 파일 (DAO클래스 역할) -->
<!-- 주의사항 : 종결문자 ; 생략해야 함 -->
<mapper namespace="mem">

</mapper>

 

 

클래스 생성

 

MemDTO.java

package net.mem;

public class MemDTO {

	private int num;
	private String name;
	private int age;
	
	public MemDTO () {}
	
	public MemDTO(int num) {
		this.num = num;
	}
	
	public MemDTO(int num, int age) {
		this.num = num;
		this.age = age;
	}
	
	public MemDTO(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public MemDTO(int num, String name, int age) {
		this.num = num;
		this.name = name;
		this.age = age;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	
}//class end

 

jdbc.xml

추가

 

MemMainTest.java

package net.mem;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MemMainTest {

	public static void main(String[] args) {
		// MyBatis Framework 기반 JDBC 연습
		
		try {
			//factory 공장
			//->어떤 특정 정보를 주면 객체로 생성해 줌
			//->객체 생성 : new연산자(POJO방식), Bean
			
			//1) DB연결 환경 설정 파일 가져오기
			String resource = "config/jdbc.xml";
			InputStream is = Resources.getResourceAsStream(resource);
			
			//2) DB연결하기 위한 팩토리빈(factory bean) 생성
			//   DBOpen + DAO
			SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
			System.out.println("----- DB 연결 성공");
			
			//3)
			
		} catch (Exception e) {
			System.out.println("실패 : " + e);
		}//end

	}//main() end
}//class end

 

행 추가

 

MemMainTest.java

package net.mem;

import java.io.InputStream;
import java.sql.PreparedStatement;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MemMainTest {

	public static void main(String[] args) {
		// MyBatis Framework 기반 JDBC 연습
		
		try {
			//factory 공장
			//->어떤 특정 정보를 주면 객체로 생성해 줌
			//->객체 생성 : new연산자(POJO방식), Bean
			
			//1. DB연결 환경 설정 파일 가져오기
			String resource = "config/jdbc.xml";
			InputStream is = Resources.getResourceAsStream(resource);
			
			//2. DB연결하기 위한 팩토리빈(factory bean) 생성
			//   DBOpen + DAO
			SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
			System.out.println("----- DB 연결 성공");
			
			//3. 쿼리문 생성 및 변환
			//->PreparedStatement와 비슷한 기능
			SqlSession sql = ssf.openSession(true);
			/////////////////////////////////////////
			
			//4. 쿼리문 실행
			// 1) 행 추가
			int result = sql.insert("mem.insertRow", new MemDTO("오필승", 25));
			System.out.println("행추가 결과 : " + result);
			
		} catch (Exception e) {
			System.out.println("실패 : " + e);
		}//end

	}//main() end
}//class end

 

mem.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- mem.xml -->
<!-- 실행할 SQL문을 정의해 놓은 파일 (DAO클래스 역할) -->
<!-- 주의사항 : 종결문자 ; 생략해야 함 -->
<mapper namespace="mem">
	
	<!-- ? 기호를 대신하는 문법 : 파라미터 바인딩 표기법 #{property}-->
	<insert id="insertRow" parameterType="memDTO">
		INSERT INTO mem(num, name, age)
		VALUES (mem_seq.nextval, #{name}, #{age} )
	</insert>
	
</mapper>

위와 같이 #{name}, #{age}를 사용하기 위해서는 getter, setter가 있어야 한다.

 

이 같이 getter와 setter가 없는 변수명을 사용했을 경우 아래와 같은 에러가 발생한다.

 

 

MemMainTest.java를 run

 

 

조회

mem.xml

	<select id="selectAll" resultMap="rs">
		SELECT num, name, age
		FROM mem
		ORDER BY num DESC
	</select>
	
	<!-- ResultSet에서 행 값을 가져와서 DTO에 담고, ArrayList에 추가하는 기능 -->
	<!-- DB에서 가져온 행 값을 객체에 매핑하는 방법을 정의 -->
	<resultMap type="net.mem.MemDTO" id="rs">
		<result column="num" property="num"/>
		<result column="name" property="name"/>
		<result column="age" property="age"/>
	</resultMap>

 

 

 

 

MemMainTest.java

			// 2) 전체 목록
			List<MemDTO> list = sql.selectList("mem.selectAll");
			for(int i = 0; i<list.size(); i++) {
				MemDTO dto = list.get(i);
				System.out.print(dto.getNum() + " ");
				System.out.print(dto.getName() + " ");
				System.out.print(dto.getAge() + " ");
				System.out.println();
			}//for end

 

 

수정

MemMainTest.java

			// 3) 행 수정
			//-> num=4 행의 이름과 나이를 수정하기
			int result = sql.update("mem.updateRow", new MemDTO(4, "진달래", 10));
			System.out.println("행수정 결과 : " + result);

 

mem.xml

	<update id="updateRow" parameterType="net.mem.MemDTO">
		UPDATE mem
		SET name=#{name}, age=#{age}
		WHERE num=#{num}
	</update>

 

 

 

삭제

MemMainTest.java

			// 4) 행 삭제
			//-> 나이가 30이상 행 삭제
			int result = sql.delete("mem.deleteRow", 30);
			System.out.println("행 삭제 결과 : " + result);

 

mem.xml

	<delete id="deleteRow" parameterType="int">
		DELETE FROM mem
		WHERE age>=#{a}
	</delete>

쿼리문 안의 비교 연산자는 태그의 기호와 헷갈릴 수 있다. 따라서 이를 구분하기 위한 기호를 사용한다.

	<!-- SQL문에서 특수문자 < > / 등을 사용해야하는 경우 -->
	<!-- int a라는 매개변수 -->
	<delete id="deleteRow" parameterType="int">
		<![CDATA[
			DELETE FROM mem
			WHERE age>=#{a}
		]]>
	</delete>

 

 

검색

MemMainTest.java

			// 5) 검색
			//-> 이름에 '화' 글자가 있는 행 조회
			List<MemDTO> list = sql.selectList("mem.search", "화");
			for(int i = 0; i<list.size(); i++) {
				MemDTO dto = list.get(i);
				System.out.print(dto.getNum() + " ");
				System.out.print(dto.getName() + " ");
				System.out.print(dto.getAge() + " ");
				System.out.println();
			}//for end

 

mem.xml

	<sql id="tablename">
		SELECT num, name, age
		FROM mem
	</sql>
	
	<sql id="sort">
		ORDER BY num DESC
	</sql>
	
	<select id="search" parameterType="String" resultMap="rs">
		<include refid="tablename"></include>
		WHERE name LIKE '%' || #{keyword} || '%'
		<include refid="sort"></include>
	</select>

 

 

MemMainTest.java

			//-> num=6 행 상세보기
			MemDTO dto = sql.selectOne("mem.selectRead", 6);
			System.out.print(dto.getNum() + " ");
			System.out.print(dto.getName() + " ");
			System.out.print(dto.getAge() + " ");
			System.out.println();

 

mem.xml

	<select id="selectRead" parameterType="Integer" resultType="net.mem.MemDTO">
		<![CDATA[
			SELECT num, name, age
			FROM mem
			WHERE num=#{n}
		]]>
	</select>

 

 

전체 행 개수

MemMainTest.java

			// 6) 전체 행 갯수
			System.out.println("전체 행 갯수 : " + sql.selectOne("mem.rowCount"));

 

mem.xml

	<select id="rowCount" resultType="Integer">
		<![CDATA[
			SELECT COUNT(*)
			FROM mem
		]]>
	</select>

 

저작자표시 비영리 동일조건 (새창열림)

'⁂ MyBatis Framework > : 기본 익히기' 카테고리의 다른 글

[MyBatis3] #4-3 파일 업로드 및 댓글 게시판 만들기 : 상품 목록 페이지  (0) 2022.11.11
[MyBatis3] #4-2 파일 업로드 및 댓글 게시판 만들기 : 첫 페이지 만들기  (0) 2022.11.10
[MyBatis3] #4-1 Spring Boot + MyBatis Framework 기반 파일 업로드 및 댓글 게시판 만들기 : 환경설정  (0) 2022.11.10
[MyBatis3] #3 의존성 주입(POJO방식과 Bean방식)  (0) 2022.11.09
[MyBatis3] #1 MyBatis 환경설정하기  (0) 2022.11.08
    '⁂ MyBatis Framework/: 기본 익히기' 카테고리의 다른 글
    • [MyBatis3] #4-2 파일 업로드 및 댓글 게시판 만들기 : 첫 페이지 만들기
    • [MyBatis3] #4-1 Spring Boot + MyBatis Framework 기반 파일 업로드 및 댓글 게시판 만들기 : 환경설정
    • [MyBatis3] #3 의존성 주입(POJO방식과 Bean방식)
    • [MyBatis3] #1 MyBatis 환경설정하기
    김갱환
    김갱환
    코딩의 코자도 모르는 이의 공부 기록장

    티스토리툴바