MyBatis 다운로드 관련 글 : http://offetuoso.tistory.com/83
1. Java와 MyBatis 연동 ??
Mybatis는 Web 뿐만 아니라 Java에서도 사용 가능하다 !!
오늘은 Java와 Mybatis를 연동해보도록 하겠다.
2. MyBatis 라이브러리 추가
다운받은 Mybatis.jar를 프로젝트에 Build Path에 추가 한다.
[그림] Build Path 메뉴에서 Configure Build Path 선택
[그림] Libraries
[그림] Libraries에서 Add External Jars를 선택한 모습
3. Mybatis Project 구조
[그림] JavaMybatis 예제의 구조
3.1 user.action
UserAction을 Implement 해서 사용자 조회, 등록, 수정, 삭제 등 기능을 구현한 패키지
하나의 execute를 오버라이딩 하여 각기 다른 기능을
[그림] user.action 패키지
3.2 user.bean
UserDTO라는 데이터 타입을 구현한 패키지
private String name;
private String id;
private String pwd;
[그림] user.bean 패키지
3.3 user.dao
DB와 관련된 패키지, DAO는 실제적으로 DB에 관한 함수들을 가지고 있고,
Mapper 파일은 DAO의 함수들의 SQL들을 가지고 있다
[그림] user.dao 패키지
3.4 user.main
메인 함수이며, 메뉴를 통해 컨트롤 한다.
****** 메뉴 ******
1. 사용자 조회
2. 사용자 입력
3. 사용자 수정
4. 사용자 삭제
5. 종료
****************
메뉴를 선택하세요:
[그림] user.main 패키지
3.5 mybatis 환경설정 파일
JDBC 및 Mapper의 파일이 설정되어있다.
[그림] mybatis 환경설정 파일
3.6 흐름도
[그림] mybatis Project 흐름
3.7 src
UserMain.java |
package user.main; import java.util.Scanner; import user.action.UserAction; import user.action.UserDeleteAction; import user.action.UserSelectAction; import user.action.UserUpdateAction; import user.action.UserInsertAction; public class UserMain { public void menu() { while (true) { 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("****************"); System.out.print("메뉴를 선택하세요: "); Scanner scan = new Scanner(System.in); int iSelectMenu = scan.nextInt();
if(iSelectMenu==5) break;
UserAction userAction = null;
switch (iSelectMenu) { case 1: userAction = new UserSelectAction(); break; case 2: userAction = new UserInsertAction(); break; case 3: userAction = new UserUpdateAction(); break; case 4: userAction = new UserDeleteAction(); break; default: System.out.println("1~5 값만 선택하세요."); } if(userAction != null) userAction.execute();
} } public static void main(String[] args) { UserMain userMain = new UserMain(); userMain.menu(); System.out.println("종료되었습니다."); } } |
UserDTO.java |
package user.bean; public class UserDTO { private String name; private String id; private String pwd;
public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } } |
UserDAO.java |
package user.dao; import java.io.IOException; import java.io.Reader; import java.util.List; 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 user.bean.UserDTO; public class UserDAO { // singleton private static UserDAO instance; private SqlSessionFactory factory; public static UserDAO getInstance() { if (instance == null) { synchronized (UserDAO.class) { instance = new UserDAO(); } } return instance; } // constructor public UserDAO() { //InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); try { Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); factory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } }
// 유저 등록 public void userWrite(UserDTO userDto) { SqlSession sqlSession = factory.openSession(); sqlSession.insert("userSQL.userWrite", userDto); sqlSession.commit(); sqlSession.close(); // userSQL 이라는 namespace안에 userWrite라는 mapper를 찾아간다. (in userMapper.xml) } // userWrite()
// 유저 삭제 public void userDelete(UserDTO userDto) { SqlSession sqlSession = factory.openSession(); sqlSession.delete("userSQL.userDelete", userDto); sqlSession.commit(); sqlSession.close(); } // userDelete() // 유저 리스트 public List<UserDTO> getUserList() { SqlSession sqlSession = factory.openSession(); List<UserDTO> list = sqlSession.selectList("userSQL.getUserList"); sqlSession.close(); return list; } // getUserList()
// 유저정보 얻어오기 public UserDTO getUser(String id) { UserDTO userDto = new UserDTO(); SqlSession sqlSession = factory.openSession(); userDto = sqlSession.selectOne("userSQL.getUser", id); sqlSession.close(); return userDto; }
// 유저 업데이트 public int updateUser(UserDTO userDto) { int su = 0; SqlSession sqlSession = factory.openSession(); su = sqlSession.update("userSQL.updateUser", userDto); sqlSession.commit(); sqlSession.close(); return su; } } |
userMapper.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"> <mapper namespace="userSQL"> <resultMap type="user" id="userResult"> <result property="name" column="NAME"/> <result property="id" column="id"/> <result property="pwd" column="pwd"/> </resultMap> <insert id="userWrite" parameterType="user"> <!-- user라는 별칭은 user.bean.UserDTO를 가리킨다. mybatis-config.xml 에서 설정 --> insert into usertable values(#{name}, #{id}, #{pwd}) </insert> <delete id="userDelete" parameterType="user"> delete usertable where id = #{id} and pwd = #{pwd} </delete> <select id="getUserList" resultType="user"> <!-- <select id="getUserList" >--> select * from usertable </select> <!-- <select id="getUser" resultType="user.bean.UserDTO" parameterType="String"> --> <select id="getUser" parameterType="String" resultType="user"> select * from usertable where id = #{id} </select> <update id="updateUser" parameterType="user.bean.UserDTO"> update usertable set name=#{name}, pwd=#{pwd} where id=#{id} </update> </mapper> |
DBClose.java |
package user.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DBClose { public static void close(Connection conn, PreparedStatement pstmt) { try { if(pstmt!=null) pstmt.close(); if(conn!=null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) { try { if(rs!=null) rs.close(); if(pstmt!=null) pstmt.close(); if(conn!=null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } |
UserAction.java |
package user.action; public interface UserAction { public void execute(); } |
UserSelectAction.java |
package user.action; import java.util.List; import user.bean.UserDTO; import user.dao.UserDAO; public class UserSelectAction implements UserAction { @Override public void execute() {
//DB UserDAO userDao = UserDAO.getInstance(); List<UserDTO> list = userDao.getUserList();
// 출력 for(UserDTO data : list){ System.out.println(data.getName() + "\t" + data.getId() + "\t" + data.getPwd()); } System.out.println(); } } |
UserInsertAction.java |
import java.util.List; import java.util.Scanner; import user.bean.UserDTO; import user.dao.UserDAO; public class UserInsertAction implements UserAction { @Override public void execute() { Scanner scan = new Scanner(System.in);
//DB UserDAO userDAO = UserDAO.getInstance(); UserDTO userDTO = new UserDTO(); String sId=null; boolean check = false;
while(!check){
if(sId == null){ System.out.print("ID를 입력하세요: "); sId = scan.next(); }
if(userDAO.getUser(sId) == null){ check=true; }else{ System.out.print("사용중입니다 \n다시 ID를 입력주세요 : "); sId = scan.next(); } }
System.out.print("이름을 입력하세요: "); String sName = scan.next();
System.out.print("비밀번호를 입력하세요: "); String sPwd = scan.next();
userDTO.setId(sId); userDTO.setName(sName); userDTO.setPwd(sPwd); userDAO.userWrite(userDTO);
} } |
UserUpdateAction.java |
package user.action; import java.util.List; import java.util.Scanner; import user.bean.UserDTO; import user.dao.UserDAO; public class UserUpdateAction implements UserAction { @Override public void execute() { Scanner scan = new Scanner(System.in);
//DB UserDAO userDAO = UserDAO.getInstance(); UserDTO userDTO = new UserDTO(); String sId=null; String sPwd =null; boolean idCheck = false;
while(!idCheck){ if(sId == null){ System.out.print("ID를 입력하세요: "); sId = scan.next(); }
if(userDAO.getUser(sId) != null){ idCheck=true; }else{ System.out.print("잘못입력하셨습니다. \n다시 ID를 입력주세요 : "); sId = scan.next(); } }
boolean pwdCheck = false; while(!pwdCheck){ System.out.print("비밀번호를 입력하세요: "); sPwd = scan.next();
if(userDAO.getUser(sId).getPwd().equals(sPwd)){ pwdCheck = true; }
if(pwdCheck == false){ System.out.println("비밀번호가 틀렸습니다 "); } }
System.out.print("변경할 이름을 입력하세요: "); String sName = scan.next();
System.out.print("변경할 비밀번호를 입력하세요: "); sPwd = scan.next();
userDTO.setId(sId); userDTO.setName(sName); userDTO.setPwd(sPwd); userDAO.updateUser(userDTO);
} } |
UserDeleteAction.java |
package user.action; import java.util.List; import java.util.Scanner; import user.bean.UserDTO; import user.dao.UserDAO; public class UserDeleteAction implements UserAction { @Override public void execute() { Scanner scan = new Scanner(System.in);
//DB UserDAO userDAO = UserDAO.getInstance(); UserDTO userDTO = new UserDTO(); String sId=null; String sPwd =null; boolean idCheck = false;
while(!idCheck){ if(sId == null){ System.out.print("ID를 입력하세요: "); sId = scan.next(); }
if(userDAO.getUser(sId) != null){ idCheck=true; }else{ System.out.print("잘못입력하셨습니다. \n다시 ID를 입력주세요 : "); sId = scan.next(); } }
boolean pwdCheck = false; while(!pwdCheck){ System.out.print("비밀번호를 입력하세요: "); sPwd = scan.next();
if(userDAO.getUser(sId).getPwd().equals(sPwd)){ pwdCheck = true; }
if(pwdCheck == false){ System.out.println("비밀번호가 틀렸습니다 "); } }
userDTO.setId(sId); userDTO.setPwd(sPwd); userDAO.userDelete(userDTO); } } |
mybatis-config.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"> <configuration> <typeAliases> <typeAlias type="user.bean.UserDTO" alias="user"/> <!-- user.bean.UserDTO를 user라고 칭하겠다.(name 부여) --> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <!-- POOLED, UNPOOLED, JNDI(Java Naming and Directory Interface --> <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="java"/> <property name="password" value="oracle"/> </dataSource> </environment> </environments> <mappers> <mapper resource="user/dao/userMapper.xml"/> </mappers> </configuration> |
댓글