본문 바로가기

ORM

ORM - 방명록 예제/TypeAliases설정/조회, 추가,삭제,수정/트랜잭션

 

-> 같은 의미로 활용된다

 

)dao

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

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

import db.vo.VisitVo;
import service.DBService;
import service.MyBatisConnector;

public class VisitDao {
	
	SqlSessionFactory factory;

	// single-ton pattern : 객체 1개만 생성해서 이용하자
	static VisitDao single = null;

	public static VisitDao getInstance() {

		//없으면 생성해라
		if (single == null)
			single = new VisitDao();

		return single;
	}

	// 외부에서 객체생성하지 말아라...
	private VisitDao() {
		factory = MyBatisConnector.getInstance().getSqlSessionFactory();
	}
	
	//목록조회
	public List<VisitVo> selectList() {

		List<VisitVo> list = null;

		// 1.SqlSession얻어오기
		SqlSession sqlSession = factory.openSession(); // Connection획득
		
		// 2.작업수행
		list = sqlSession.selectList("visit.visit_list");
		
		// 3.닫기 conn.close()과정포함
		sqlSession.close();
		
		return list;
	} // end - selectList()

	public int insert(VisitVo vo) {
		// TODO Auto-generated method stub

		int res = 0;
		
		// 1.SqlSession얻어오기
		SqlSession sqlSession = factory.openSession(); // Connection획득
		
		// 2.작업수행
		res = sqlSession.insert("visit.visit_insert",vo);
		if(res==1)
			sqlSession.commit();
				
		// 3.닫기 conn.close()과정포함
		sqlSession.close();
		

		return res;

	}//end:insert()

	public int delete(int idx) {
		// TODO Auto-generated method stub

		int res = 0;		
		// 1.SqlSession얻어오기						true <- auto commint 옵션
		SqlSession sqlSession = factory.openSession(true); // Connection획득
		
		// 2.작업수행
		res = sqlSession.delete("visit.visit_delete",idx);
				
		// 3.닫기 conn.close()과정포함
		sqlSession.close();
		
		return res;

	}//end:delete()

	// 일부만 조회
	public VisitVo selectOne(int idx) {

		VisitVo vo = null;
		
		// 1.SqlSession얻어오기						true <- auto commint 옵션
		SqlSession sqlSession = factory.openSession(true); // Connection획득
		
		// 2.작업수행
		vo = sqlSession.selectOne("visit.visit_one",idx);
				
		// 3.닫기 conn.close()과정포함
		sqlSession.close();

		return vo;
	}

	public int update(VisitVo vo) {
		// TODO Auto-generated method stub

		int res = 0;
		              
		// 1.SqlSession얻어오기						true <- auto commint 옵션
		SqlSession sqlSession = factory.openSession(true); // Connection획득
		
		// 2.작업수행
		res = sqlSession.update("visit.visit_update",vo);
				
		// 3.닫기 conn.close()과정포함
		sqlSession.close();

		return res;

	}//end:update()
}

 

)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="visit">
	
	<!-- 전체조회 -->
	<select id="visit_list" resultType="visit">
	select
		rownum as no, v.*
	from	  						 																		
		(select * from visit order by idx desc) v	
	</select>
	
	<!-- 추가 
		parameter가 객체(VisitVo)로 전달되면 mybatis parameter변수는 
		VO내의 속성명을 이용할 수 있다.
	-->
	<insert id="visit_insert" parameterType="db.vo.VisitVo">
		insert into visit values(
								 seq_visit_idx.nextVal,
								 #{ name },
								 #{ content },
								 #{ pwd },
								 #{ ip },
								 sysdate
								 )	
	</insert>
	
	<!-- 삭제 -->
	<delete id="visit_delete" parameterType="int">
		delete from visit where idx = #{ idx }
	</delete>
	
	<!-- 한건만 조회 -->
	<select id="visit_one" resultType="db.vo.VisitVo" parameterType="int">
		select * from visit_view where idx = #{ idx }
	</select>
	
	<!-- 수정 -->
	<update id="visit_update" parameterType="db.vo.VisitVo">
	update visit set name=#{ name },
	 				 content=#{ content }, 
	 				 pwd=#{ pwd }, 
	 				 ip=#{ ip }, 
					 regdate=sysdate 
					 where idx=#{ idx } 
	
	</update>


</mapper>

-> 그러나, 실제로 등록이 되지 않는다 (트랜잭션 때문)

 

-> 코드 추가해주기

 

아니면 -> openSessin()을 true로 설정하기