반응형

환경 : Win7, java7, Eclipse Kepler, Mysql 5.6, Mybatis 3.0.6

LIB : MyBatis + MysqlConnector

mybatis mysql.zip

1. 이클립스 Dynamic Web Project 생성

(프레임워크에 따라 다르기 때문에 Console까지만 구현)


2. 각 파일 생성


File Path<그림 1>


MyBatisConnectionFactory.java : SqlSessionFactory 를 생성, SqlMapConfig.xml 과 매핑

UserDAO.java : sqlSessionFactory를 통해 DB와 데이터 교환

User.java : User Bean

UserMapper.java : java 매핑용

UserMapper.xml : xml 매핑용

Test.java : Test용 main메소드(웹환경은 Servlet, Struts, Sping 알아서)

SqlMapConfig.xml : DB 정보, Mapper 정보 등록



3. 소스보기

test/Test.java

import com.exam.dao.UserDAO;
import com.exam.domain.user.User;

public class Test{

	public static void main(String[] args) {
		
			UserDAO dao = new UserDAO();
			User user = new User();
//			
//			user = dao.getUser(new String("kkk@digi.com"));
//			
//			System.out.println(user.toString());
			
			user.setEmail("kj@digi.com");
			user.setPassword("321321");
			user.setName("kj");
			user.setAge(27);
			
			dao.insert(user);
	}

}

com/exam/dao/MyBatisConnectionFactory.java

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Reader;

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

import com.exam.mapper.user.UserMapper;

public class MyBatisConnectionFactory {
	private static SqlSessionFactory sqlSessionFactory;
	
	static{
		try{
			String resource = "SqlMapConfig.xml";
			Reader reader = Resources.getResourceAsReader(resource);
			if(sqlSessionFactory == null){
				sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader, "development");
//				sqlSessionFactory.getConfiguration().addMapper(UserMapper.class);
			}
		}catch(FileNotFoundException e){
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static SqlSessionFactory getSqlSessionFactory() {
		return sqlSessionFactory;
	}
	
}


com/exam/dao/UserDAO.java

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.exam.domain.user.User;
import com.exam.mapper.user.UserMapper;

public class UserDAO {
	// UserMapper.xml 의 NameSpace
	private static final String NAMESPACE = "User.";
	
	// UserDAO가 호출될때 생성자를 통해 sqlSessionFactory 생성
	private SqlSessionFactory sqlSessionFactory;
	
	public UserDAO(){
		sqlSessionFactory = MyBatisConnectionFactory.getSqlSessionFactory();
	}
	
	// xml을 통한 매핑
	public void insert(User user){
		System.out.println("## UserDAO insert() 진입");
		// session Open
		SqlSession session = sqlSessionFactory.openSession();
		try{
			// UserMapper.xml => (NameSpace)User.(id)insert 에 user 객체 매칭 
			session.insert(NAMESPACE+"insert", user);
			// 커밋
			session.commit();
			System.out.println("## insert 성공");
		}catch(Exception e){
			session.rollback();
			e.printStackTrace();
			System.out.println("## insert 실패");
		}finally{
			// 사용후엔 닫아주자
			session.close();
		}
	}
	
	// java를 통한 매핑
	public User getUser(String email){
		SqlSession session = sqlSessionFactory.openSession();
		try{
			// 새로운 mapper를 생성
			UserMapper mapper = session.getMapper(UserMapper.class);
			User user = mapper.getUser(email);
			return user;
		}finally{
			session.close();
		}
	}
}

com/exam/domain/user/User.java

public class User {
	private Integer no;
	private String email;
	private String password;
	private String name;
	private Integer age;
	public Integer getNo() {
		return no;
	}
	public void setNo(Integer no) {
		this.no = no;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [no=" + no + ", email=" + email + ", password=" + password
				+ ", name=" + name + ", age=" + age + "]";
	}
	
	
}

com/exam/mapper/user/UserMapper.java

import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import com.exam.domain.user.User;

public interface UserMapper {
	final String getUser = 
	"SELECT * FROM EXAM.USER " +
	"WHERE email = #{EMAIL}";
	
	// @Select(위의 String getUser 임)
	@Select(getUser)
	// property = User.java 의 속성, column = DB의 컬럼
	@Results(
			value={
					@Result(property="no", column="NO"),
					@Result(property="email", column="Email"),
					@Result(property="password", column="PASSWORD"),
					@Result(property="name", column="NAME"),
					@Result(property="age", column="AGE"),
			}
			)
	User getUser(String email); // email을 이용해 User 객체로 DB 결과값 리턴함
}


com/exam/mapper/user/UserMapper.xml

아래 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">


    
    
		INSERT INTO EXAM.USER
		(
			EMAIL
			,PASSWORD
			,NAME
			,AGE
		)values(
			#{email}
			,#{password}
			,#{name}
			,#{age}
		)
    



SqlMapConfig.xml

아래 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">


	
		
	
	
    
		
			
			
				
				
				
				
			
		
				
	
	
		
	




4. 대충의 순서



!!! XML 태그 대소문자 주의!!!(대문자가 소문자로 바뀌어있음...)

반응형

'IT > 언어' 카테고리의 다른 글

POI Excel 파일 쓰기  (0) 2014.06.26
XStream 사용(_ 중복 출력 해결) & XML to JSON  (0) 2014.06.20
JDBC 설정  (0) 2014.06.19
[MyBatis] SqlSessionFactory  (0) 2014.06.19
[LIB] ESAPI 로 XSS 방어  (0) 2014.05.30

+ Recent posts