압축은 D드라이브 Web에 풀기 !
★ MyBatis
ORM(Object Relational Mapping) 프레임워크는 데이터베이스와 객체와의 관계를 맵핑시켜
퍼시스턴스 로직 처리를 도와주는 프레임워크이다.
대표적으로 iBatis와 hibernate, JPA가 있다
MyBatis는 SQL쿼리문, 예외처리, 트랙잭션 관리들을 XML형식으로 관리한다
POJO(Plain Old Java Object)객체와 테이블의 컬럼들을 편리하고 빠르고 정 확하게 매칭할 수 있다.
MyBatis의 목표와 특징은 쉽고, 간단하고, 의존성이 적다는 것이다
SQL문과 자바코드를 분리함으로 인해 자바 개발자는 쿼리문을 신경 쓰지 않아도 된다.
myBatis는 자바오브젝트와 SQL문 사이의 자동 매핑 기능을 지원하는 ORM 프레임워크이다
자바코드와 SQL를 분리하므로서 SQL문의 변경이 있을 때 마다 자바를 수정하지 않아도 되고 컴파일을 하지 않아도 된다
Java Project : myBatisTest
build path하기 !!
Package : user.main
Class : UserMain.java (public static void main(String[] args)
Package : user.service
Interface : UserService.java - public void execute(); (추상메소드)
Class : UserInsertService.java
UserSelectService.java
UserUpdateService.java
UserDeleteService.java
UserSearchService.java
UserMain.java
package user.main;
import java.util.Scanner;
import user.service.UserDeleteService;
import user.service.UserInsertService;
import user.service.UserSearchService;
import user.service.UserSelectService;
import user.service.UserService;
import user.service.UserUpdateService;
public class UserMain {
public void menu() {
Scanner scan = new Scanner(System.in);
UserService userService = null;
int num;
while(true) {
System.out.println();
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(" 6. 종료");
System.out.println("***************");
System.out.print(" 번호 입력 : ");
num = scan.nextInt();
if(num == 6)
break;
if(num == 1)
userService = new UserInsertService();
else if(num == 2)
userService = new UserSelectService();
else if(num == 3)
userService = new UserUpdateService();
else if(num == 4)
userService = new UserDeleteService();
else if(num == 5)
userService = new UserSearchService();
userService.execute(); //호출
}//while
}
public static void main(String[] args) {
UserMain userMain = new UserMain();
userMain.menu();
System.out.println("프로그램을 종료합니다.");
}
}
[ 테이블 생성 ]
create table usertable(
name varchar2(30) not null,
id varchar2(30) primary key,
pwd varchar2(100) not null);
Package : user.bean
UserDTO.java
package user.bean;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class UserDTO {
private String name;
private String id;
private String pwd;
}
UserInsertService.java
package user.service;
import java.util.Scanner;
import user.bean.UserDTO;
import user.dao.UserDAO;
public class UserInsertService implements UserService {
@Override
public void execute() {
System.out.println();
Scanner scan = new Scanner(System.in);
System.out.println("이름 입력 : ");
String name = scan.next();
System.out.println("아이디 입력 : ");
String id = scan.next();
System.out.println("비밀번호 입력 : ");
String pwd = scan.next();
UserDTO userDTO = new UserDTO();
userDTO.setName(name);
userDTO.setId(id);
userDTO.setPwd(pwd);
//DB
UserDAO userDAO = UserDAO.getInstance();
}
}
Package : user.dao
UserDAO.java
package user.dao;
public class UserDAO {
private static UserDAO userDAO = new UserDAO();
public static UserDAO getInstance() {
return userDAO;
}
}
싱글톤 처리해주기
MyBatis ------------------- UserDAO.java 연결해줘야함. sqlSession 객체를 통해서 접근
sqlSession(인터페이스) 생성해주는 객체가 sqlSessionFactory이다.
src : mybatis-config.xml (환경설정)
=> Connection Pool
=> mapper.xml 파일 위치를 알려줘야한다. DB
=> typeAlias (별명) 필수 x
Package : mapper
userMapper.xml (SQL문장 가지고 있음)
memberMapper.xml
boardMapper.xml
src : mybatis-config.xml (환경설정)
Package : mapper
userMapper.xml (SQL문장 가지고 있음)
userMapper.xml - Connection Pool 설정
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="C##JAVA"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
</configuration>
userMapper.xml - mapper.xml 위치 알려주기
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="C##JAVA"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/userMapper.xml"/>
</mappers>
</configuration>
DAO에서 환경설정 파일을 읽으라고 해야한다.
환경설정 파일을 읽어야 sqlSession을 만들 수 있다.
SqlSessionFactory 얘가 있어야 sqlSession이 만들어진다.
Resources 는 하나의 자원이라 생각하면 된다.MyBatis를 처리하려면 xml이라는 하나의 자원이 필요하다.xml 자원파일을 읽으려고 하는 것
Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); ------- Reader 문자단위
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
환경설정 파일을 읽어오라는 것
자바에서 IO Stream을 공부했다.
1. byte 단위로 읽는다.
InputStream
OutputStream
2. 문자(2byte) 단위로 읽는다. -- 한글 안 깨지지만 느리다.
Reader
Writer
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); -------- byte 단위
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
UserDAO.java
package user.dao;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.xml.sax.InputSource;
public class UserDAO {
private static UserDAO userDAO = new UserDAO();
private SqlSessionFactory sqlSessionFactory;
public static UserDAO getInstance() {
return userDAO;
}
public UserDAO() {
try {
//InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
}
userMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="userSQL">
</mapper>
'JSP & Servlet' 카테고리의 다른 글
DAY 50 - EL_JSTL ( 2024.09.11 ) (4) | 2024.09.11 |
---|---|
DAY 49 - MyBatis (2024.09.10) (0) | 2024.09.10 |
DAY 46 JSP - Connection Pool / 로그인 / 쿠키(2024.09.05) (1) | 2024.09.06 |
DAY 47 - 미니프로젝트(member) - 세션 / 회원정보 수정 / 글 작성 (2024.09.06) (2) | 2024.09.06 |
DAY 45 JSP - 주석 / 미니프로젝트(member) - 중복체크 ( 2024.09.04 ) (4) | 2024.09.04 |