새 프로젝트 생성
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 |