상세 컨텐츠

본문 제목

[스프링] mybatis

카테고리 없음

by esoesmio 2023. 6. 7. 09:49

본문

<?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>

<!-- 쿼리의 결과 컬럼이름을 카멜케이스로 변
 -->
 
<settings>

<setting name="mapUnderscoreToCamelCase" value="true"></setting>

</settings>
 
<!-- 객체들의 별칭 지정 -->
<!-- 객체들의 별칭을 지정하지 않으면 PARAMETERType이나 resultType에 패키지가 포함된 클래스를 지정해줘야하는데 별칭 생성 시 별칭으로만 지정가
 -->
 
 <typeAliases>
 	<typeAlias type="com.bit.springboard.dto.BoardDTO" alias="board"></typeAlias>
 </typeAliases>
 
 
<!--  사용할 Sql매퍼의 위치 지정
 --> 
 
 <mappers>
 <mapper resource = "mappings/board-mapper.xml"></mapper>
 </mappers>
 
 
 
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">


	<context:component-scan
		base-package="com.bit.springboard"></context:component-scan>

	<!-- <aop:aspectj-autoproxy> </aop:aspectj-autoproxy> -->

	<!-- 외부파일참조 -->
	<context:property-placeholder
		location="classpath:config/db.properties" />




	<!-- db 접속 객체인 Datasource bean 등록 -->
	<bean id="dataSource"
		class="org.apache.commons.dbcp2.BasicDataSource">
		<property name="driverClassName" value="${jdbc.driver}"></property>
		<property name="url" value="${jdbc.url}"></property>
		<property name="username" value="${jdbc.username}"></property>
		<property name="password" value="${jdbc.password}"></property>
		<!-- 이게 어디있는 jdb에서 가져와서 이렇게 쓰는거임? -->
		<!-- -->
	</bean>



	<!-- DB연결 객체들을 관리해주는 SessionFactory bean 등 -->
	<bean id="sessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<!-- Mybatis설정파일 위치 지정 -->
		<property name="configLocation"
			value="classpath:sql-map-config.xml"></property>
	</bean>


	<!-- SessionFactory에서 DB연결 Session을 하나씩 꺼내서 사용할 SessionTemplate bean 등 -->

	<bean class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg ref="sessionFactory">
		</constructor-arg>
	</bean>




	<!--트랜잭션 설정(DDL 종료 후 자동으로 COmmit이나 rollback호출) -->

	<!-- 트랜젝션을 관리해주는 트랜잭션 매니저라는것 빈 객체로 만들어서 사용해야한다. TransactionManager -->





	<bean id="txManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>

	</bean>


	<!-- TransactionManager만 등락한다고 트렌잭션이 관리되진 않고 AOP로 어드바이스, 어드바이저 등을 설정해줘야 
		Transaction이 동작한다. -->


	<tx:advice id="txAdvice" transaction-manager="txManager">
		<!-- 어떤 메소드에서 트랜잭션이 동작할지 설정 -->


		<tx:attributes>
			<!-- get으로 시작하는 메소드에서는 트랜잭션 실행하지 않음 -->
			<tx:method name="get*" read-only="true"></tx:method>
			<tx:method name="*"></tx:method>
			<!-- get으로 시작하는 메소드를 제외한 모든 메소드에서 트랜잭션 실 -->
		</tx:attributes>
	</tx:advice>

	<!-- AOP 설정으로 포인트컷과 어드바이저 설 -->

	<aop:config>

		<aop:pointcut
			expression="execution(* com.bit.springboard.service..*(..))"
			id="txPointcut"></aop:pointcut>

		<aop:advisor advice-ref="txAdvice"
			pointcut-ref="txPointcut"></aop:advisor>

	</aop:config>


	<!-- get으로시작하는 메소드 제외하고 조인하는 메소드들에서 TXADvice에 의해서트랜젝션이 자동으로 실행되도록 설정을 해준거. -->




















</beans>
<?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="BoardDAO">

	<!-- 게시글 추가 -->
	<insert id="insertBoard" parameterType="board">
		INSERT INTO T_BOARD(BOARD_TITLE, BOARD_CONTENT, BOARD_WRITER)
		VALUES (#{boardTitle}, #{boardContent}, #{boardWriter})
	</insert>

	<!-- 게시글 업데이트 -->
	<update id="updateBoard" parameterType="board">
		UPDATE T_BOARD
		SET BOARD_TITLE = #{boardTitle},
			BOARD_CONTENT = #{boardContent}
		WHERE BOARD_NO = #{boardNO}
	</update>

	<!-- 게시글 삭제 -->
	<delete id="deleteBoard">
		DELETE FROM T_BOARD WHERE BOARD_NO = #{boardNO}
	</delete>

	<!-- 게시글 상세 조회 -->
	<select id="getBoard" parameterType="int" resultType="board">
		SELECT * FROM T_BOARD WHERE BOARD_NO = #{boardNo}
	</select>

	<!-- 게시글 목록 조회 -->
	<select id="getBoardList" resultType="board">
		SELECT * FROM T_BOARD
	</select>
</mapper>
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/studydb?serverTimezone=UTC
jdbc.username=study
jdbc.password=Dutajrdjfk1!
package com.bit.springboard.service.impl;

import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
//import org.jcp.xml.dsig.internal.dom.DOMRSAPSSSignatureMethod;
import org.springframework.stereotype.Repository;

import com.bit.springboard.common.JDBCUtil;
import com.bit.springboard.dto.BoardDTO;

//DAO(Data Access Object): DB에 직접 접근하는 객체 
//					=> Boot에서는 Mapper 인터페이스나 Repository  인터페이스 사용 

//JDBC TEmplate 사용방식2
//필드로 선언후 의존성 주입 받아서 사용
@Repository("boardDAO")
public class BoardDAO {
@Autowired
private SqlSessionTemplate mybatis;	
	
	
//	//쿼리등록
//	private final String INSERT_BOARD = "INSERT INTO T_BOARD ("
//			+ "				BOARD_NO, "
//
//			+ "				BOARD_TITLE, "
//			+ "				BOARD_CONTENT, "
//			+ "				BOARD_WRITER"
//			+ "			) VALUES ("
//			+ "				?,"
//
//			+ "				?,"
//			+ "				?,"
//			+ "				?"
//			+ "			)";
//	
//	private final String GET_BOARD = "SELECT "
//			+ "		BOARD_NO"
//			+ "	  , BOARD_TITLE"
//			+ "	  , BOARD_CONTENT"
//			+ "   , BOARD_WRITER"
//			+ "   , BOARD_REGDATE"
//			+ "   , BOARD_CNT"
//			+ "  FROM T_BOARD"
//			+ "  WHERE BOARD_NO = ?";
//	
//	
//	
//	private final String UPDATE_BOARD = "UPDATE T_BOARD SET "
//	        + " BOARD_TITLE = ?, "
//	        + " BOARD_CONTENT = ? "
////	        + "BOARD_WRITER=? "
//	        + " WHERE BOARD_NO = ?";
//
//	private final String DELETE_BOARD = "DELETE FROM T_BOARD WHERE BOARD_NO = ?";
//
//	private final String GET_BOARD_LIST = "SELECT * FROM T_BOARD";
	

	
	//글 등록
	public void insertBoard(BoardDTO boardDTO) {
		System.out.println("insertBoard 실행");
	
		mybatis.insert("BoardDAO.insertBoard",boardDTO);
		
	
	}
	
	//글 수정
	public void updateBoard(BoardDTO boardDTO) {
		
		 System.out.println("updateBoard 실행");

		mybatis.update("BoardDAO.updateBoard", boardDTO);


		
	}
	
	//글 삭제
	public void deleteBoard(int boardNo) {
		 System.out.println("deleteBoard 실행");

		mybatis.delete("BoardDAO.deleteBoard", boardNo);


	}
	
	//글 상세 조회
	public BoardDTO getBoard(int boardNo) {
		System.out.println("getBoard 실행");
		
	//queryForObject의 두번째 매개변수는 OBJECT[]형태여야 한다.
		return mybatis.selectOne("BoardDAO.getBoard", boardNo);


	}
	
//	resultset은결과 쿼리의 행을 가져온다.
	
	//글 목록 조회
	public List<BoardDTO> getBoardList() {
		 System.out.println("getBoardList 실행");

		return mybatis.selectList("BoardDAO.getBoardList");
	}
	
}

댓글 영역