<?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");
}
}
댓글 영역