Search

Spring JDBC

Spring JDBC

โ€ข
JDBC & Spring JDBC ์˜์กด์„ฑ
โ€ข
๋ฐ์ดํ„ฐ ์†Œ์Šค ์„ค์ • & Spring JDBC ๋นˆ ๋“ฑ๋ก
โ€ข
์ธ์ฝ”๋”ฉ ํ•„ํ„ฐ
โ€ข
ํ…Œ์ด๋ธ” ์ƒ์„ฑ
โ€ข
๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
โ€ข
ํŠธ๋žœ์žญ์…˜

JDBC & Spring JDBC ์˜์กด์„ฑ ์„ค์ •

โ€ข
pom.xml
<!-- mysql ๋“œ๋ผ์ด๋ฒ„ --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.1.0</version> </dependency> <!-- Spring JDBC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${org.springframework-version}</version> </dependency>
XML
๋ณต์‚ฌ
โ€ข
pom.xml - lombok
<!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency>
XML
๋ณต์‚ฌ
โ€ข
pom.xml (์ „์ฒด)
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.joeun</groupId> <artifactId>test</artifactId> <name>Spring-JDBC</name> <packaging>war</packaging> <version>1.0.0-BUILD-SNAPSHOT</version> <properties> <java-version>1.8</java-version> <org.springframework-version>5.3.10</org.springframework-version> <org.aspectj-version>1.9.7</org.aspectj-version> <!-- ์•„๋ž˜ ๋ฒ„์ „์œผ๋กœ ํ–ˆ์„ ๋•Œ, @AfterReturning ์—์„œ returning ์ด ๊ณ„์† null ์ธ ์ด์Šˆ --> <!-- <org.springframework-version>5.0.7.RELEASE</org.springframework-version> --> <!-- <org.aspectj-version>1.5.4</org.aspectj-version> --> <org.slf4j-version>1.6.6</org.slf4j-version> </properties> <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework-version}</version> <exclusions> <!-- Exclude Commons Logging in favor of SLF4j --> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework-version}</version> </dependency> <!-- AspectJ --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${org.aspectj-version}</version> </dependency> <!-- Logging --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${org.slf4j-version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${org.slf4j-version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${org.slf4j-version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> <exclusions> <exclusion> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> </exclusion> <exclusion> <groupId>javax.jms</groupId> <artifactId>jms</artifactId> </exclusion> <exclusion> <groupId>com.sun.jdmk</groupId> <artifactId>jmxtools</artifactId> </exclusion> <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> </exclusion> </exclusions> <scope>runtime</scope> </dependency> <!-- @Inject --> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency> <!-- Servlet --> <!-- <dependency> --> <!-- <groupId>javax.servlet</groupId> --> <!-- <artifactId>servlet-api</artifactId> --> <!-- <version>2.5</version> --> <!-- <scope>provided</scope> --> <!-- </dependency> --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- Test --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> <!-- mysql ๋“œ๋ผ์ด๋ฒ„ --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.1.0</version> </dependency> <!-- Spring JDBC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${org.springframework-version}</version> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-eclipse-plugin</artifactId> <version>2.9</version> <configuration> <additionalProjectnatures> <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> </additionalProjectnatures> <additionalBuildcommands> <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> </additionalBuildcommands> <downloadSources>true</downloadSources> <downloadJavadocs>true</downloadJavadocs> </configuration> </plugin> <!-- ์ž๋ฐ” ๋ฒ„์ „ : 1.6 โ†’ 1.8 --> <!-- ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „ : 2.5.1 โ†’ 3.8.1 --> <!-- parameter ์ธ์ž ์ถ”๊ฐ€ --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <compilerArgs> <arg>-parameters</arg> </compilerArgs> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <mainClass>org.test.int1.Main</mainClass> </configuration> </plugin> </plugins> </build> </project>
XML
๋ณต์‚ฌ

๋ฐ์ดํ„ฐ ์†Œ์Šค ์„ค์ •, Spring JDBC ๋นˆ ๋“ฑ๋ก

โ€ข
root-context.xml
<!-- ๋ฐ์ดํ„ฐ ์†Œ์Šค ๋“ฑ๋ก --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://127.0.0.1:3306/joeun"></property> <property name="username" value="joeun"></property> <property name="password" value="123456"></property> </bean> <!-- JDBC Template ๋นˆ ๋“ฑ๋ก --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean>
XML
๋ณต์‚ฌ

์ธ์ฝ”๋”ฉ ํ•„ํ„ฐ

โ€ข
web.xml
<!-- ์ธ์ฝ”๋”ฉ ํ•„ํ„ฐ(ํ•œ๊ธ€๊นจ์ง ๋ฐฉ์ง€) --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
SQL
๋ณต์‚ฌ

ํ…Œ์ด๋ธ” ์ƒ์„ฑ

โ€ข
board.sql
CREATE TABLE `board` ( `no` int NOT NULL AUTO_INCREMENT, `title` varchar(100) NOT NULL, `writer` varchar(100) NOT NULL, `content` text, `reg_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `upd_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `views` int NOT NULL DEFAULT '0', PRIMARY KEY (`no`) ) COMMENT='๊ฒŒ์‹œํŒ';
SQL
๋ณต์‚ฌ

ํŠธ๋žœ์žญ์…˜

ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ•œ ๋ฒˆ์— ์ˆ˜ํ–‰๋˜์–ด์•ผํ•˜๋Š” ์ผ๋ จ์˜ ์ž‘์—…์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ๋ชจ๋‘ ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ์•„๋ฌด๊ฒƒ๋„ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์€ํ–‰์—์„œ ์†ก๊ธˆ์ด ๋ฐœ์ƒํ•  ๋•Œ ์†ก๊ธˆ๊ณผ ๋™์‹œ์— ์ž…๊ธˆ์ด ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๋ฉฐ, ํ•˜๋‚˜์˜ ์ž‘์—…์ด ์‹คํŒจํ•˜๋ฉด ๋ชจ๋“  ์ž‘์—…์€ ๋กค๋ฐฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ํŠน์ง• - A.C.I.D

ํŠธ๋žœ์žญ์…˜์€ ๋‹ค์Œ์˜ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:
โ€ข
์›์ž์„ฑ (Atomicity): ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ๋ชจ๋“  ์ž‘์—…์€ ์ผ๋ถ€๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ์ „์ฒด ํŠธ๋žœ์žญ์…˜์ด ๋กค๋ฐฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์ผ๊ด€์„ฑ (Consistency): ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰๋˜๊ธฐ ์ „๊ณผ ํ›„์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๊ด€๋œ ์ƒํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๊ฒฉ๋ฆฌ์„ฑ (Isolation): ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์€ ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์ง€์†์„ฑ (Durability): ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋Š” ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์‹œ์Šคํ…œ ์žฅ์•  ๋ฐœ์ƒ ์‹œ์—๋„ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
ํŠธ๋žœ์žญ์…˜ ์˜์กด์„ฑ ์„ค์ •
โ—ฆ
๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ๋ฐ ์Šคํ‚ค๋งˆ ์„ค์ •
โ—ฆ
ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ์ž ๋นˆ ๋“ฑ๋ก
โ—ฆ
ํŠธ๋žœ์žญ์…˜ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”
โ€ข
์„œ๋น„์Šค ๊ตฌํ˜„ ํด๋ž˜์Šค์— ์–ด๋…ธํ…Œ์ด์…˜ ์ ์šฉ
โ—ฆ
@Transactional

ํŠธ๋žœ์žญ์…˜ ์˜์กด์„ฑ ์„ค์ •

๋„ค์ž„ ์ŠคํŽ˜์ด์Šค

โ€ข
root-context.xml
xmlns:tx="http://www.springframework.org/schema/tx"
XML
๋ณต์‚ฌ

์Šคํ‚ค๋งˆ ์„ค์ •

โ€ข
root-context.xml
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">
XML
๋ณต์‚ฌ

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ์ž ๋นˆ ๋“ฑ๋ก

โ€ข
root-context.xml
<!-- ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ์ž ๋นˆ ๋“ฑ๋ก --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean>
XML
๋ณต์‚ฌ

ํŠธ๋žœ์žญ์…˜ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”

โ€ข
root-context.xml
<!-- ํŠธ๋žœ์žญ์…˜ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” --> <tx:annotation-driven />
XML
๋ณต์‚ฌ

์„œ๋น„์Šค ๊ตฌํ˜„ ํด๋ž˜์Šค์— ์–ด๋…ธํ…Œ์ด์…˜ ์ ์šฉ

โ€ข
BoardServiceImpl.java
@Transactional @Override public void join(User user) throws Exception { userDAO.join(user); UserAuth userAuth = new UserAuth(); userAuth .setUserNo(user.getUserNo()); userAuth .setAuth("ROLE_USER"); userDAO.insertAuth(userAuth ); }
Java
๋ณต์‚ฌ

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง

โ€ข
controller
โ—ฆ
BoardController.java
โ€ข
dto
โ—ฆ
Board.java
โ€ข
dao
โ—ฆ
BoardDAO.java
โ€ข
service
โ—ฆ
BoardService.java
โ—ฆ
BoardServiceImpl.java

controller

โ€ข
BoardController.java

BoardController.java

package com.joeun.test.controller; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import com.joeun.test.dto.Board; import com.joeun.test.service.BoardService; @Controller @RequestMapping("/board") public class BoardController { private static final Logger logger = LoggerFactory.getLogger(BoardController.class); @Autowired private BoardService boardService; // ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก // @RequestMapping(value = "/list", method = RequestMethod.GET) @GetMapping("/list") // Spring 4.3 ๋ฒ„์ „ ๋ถ€ํ„ฐ ์‚ฌ์šฉ public String list(Model model) throws Exception { List<Board> boardList = boardService.list(); model.addAttribute(boardList); return "board/list"; } // ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ @GetMapping("/read") public String read(Model model, int no) throws Exception { Board board= boardService.select(no); model.addAttribute(board); return "board/read"; } // ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก @GetMapping("/insert") public String insert() throws Exception { return "board/insert"; } // ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก ์ฒ˜๋ฆฌ @PostMapping("/insert") public String insert(Board board) throws Exception { int result = boardService.insert(board); return "redirect:/board/list"; } // ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • @GetMapping("/update") public String update(Model model, int no) throws Exception { Board board= boardService.select(no); model.addAttribute(board); return "board/update"; } // ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ์ฒ˜๋ฆฌ @PostMapping("/update") public String update(Board board) throws Exception { int result = boardService.update(board); return "redirect:/board/list"; } // ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ ์ฒ˜๋ฆฌ @PostMapping("/delete") public String delete(int no) throws Exception { int result = boardService.delete(no); return "redirect:/board/list"; } }
Java
๋ณต์‚ฌ

dto

โ€ข
Board.java

Board.java

package com.joeun.test.dto; import java.util.Date; import lombok.Data; @Data public class Board { private int no; private String title; private String writer; private String content; private Date regDate; private Date updDate; private int views; public Board() { } public Board(String title, String writer, String content) { this.title = title; this.writer = writer; this.content = content; } }
Java
๋ณต์‚ฌ

dao

โ€ข
BoardDAO.java

BoardDAO.java

package com.joeun.test.dao; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; import com.joeun.test.dto.Board; @Repository // ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ฐ์ฒด๋กœ ๋นˆ ๋“ฑ๋ก public class BoardDAO { @Autowired private JdbcTemplate jdbcTemplate; /** * ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ * @return */ public List<Board> list() { String sql = " SELECT * FROM board "; List<Board> boardList = jdbcTemplate.query(sql, new RowMapper<Board>() { @Override public Board mapRow(ResultSet rs, int rowNum) throws SQLException { Board board = new Board(); board.setno( rs.getInt("no") ); board.setTitle( rs.getString("title") ); board.setWriter( rs.getString("writer") ); board.setContent( rs.getString("content") ); board.setRegDate( rs.getTimestamp("reg_date") ); board.setUpdDate( rs.getTimestamp("upd_date") ); board.setViews( rs.getInt("views") ); return board; } }); return boardList; } public Board select(int no) { String sql = " SELECT * FROM board WHERE no = ? "; // List<Board> boardList = jdbcTemplate.query(sql, new RowMapper<Board>() { // @Override // public Board mapRow(ResultSet rs, int rowNum) throws SQLException { // Board board = new Board(); // board.setno( rs.getInt("no") ); // board.setTitle( rs.getString("title") ); // board.setWriter( rs.getString("writer") ); // board.setContent( rs.getString("content") ); // board.setRegDate( rs.getTimestamp("reg_date") ); // board.setUpdDate( rs.getTimestamp("upd_date") ); // board.setViews( rs.getInt("views") ); // return board; // } // }, no); // // Board board = null; // if( boardList.isEmpty() ) // board = null; // else // board = boardList.get(0); // 2๋ฒˆ์งธ ๋ฐฉ๋ฒ• Board board = jdbcTemplate.queryForObject(sql, new RowMapper<Board>() { @Override public Board mapRow(ResultSet rs, int rowNum) throws SQLException { Board board = new Board(); board.setno( rs.getInt("no") ); board.setTitle( rs.getString("title") ); board.setWriter( rs.getString("writer") ); board.setContent( rs.getString("content") ); board.setRegDate( rs.getTimestamp("reg_date") ); board.setUpdDate( rs.getTimestamp("upd_date") ); board.setViews( rs.getInt("views") ); return board; } }, no); // 3๋ฒˆ์งธ ๋ฐฉ๋ฒ• // Object[] argList = new Object[]{no}; // Board board = jdbcTemplate.queryForObject(sql, argList, new RowMapper<Board>() { // @Override // public Board mapRow(ResultSet rs, int rowNum) throws SQLException { // Board board = new Board(); // board.setno( rs.getInt("no") ); // board.setTitle( rs.getString("title") ); // board.setWriter( rs.getString("writer") ); // board.setContent( rs.getString("content") ); // board.setRegDate( rs.getTimestamp("reg_date") ); // board.setUpdDate( rs.getTimestamp("upd_date") ); // board.setViews( rs.getInt("views") ); // return board; // } // }); return board; } public int insert(Board board) { String sql = " INSERT INTO board(title, writer, content) " + " VALUES ( ?, ?, ? ) "; Object[] args = new Object[] {board.getTitle(), board.getWriter(), board.getContent()}; int result = jdbcTemplate.update(sql, args); // int result = jdbcTemplate.update(sql, board.getTitle(), board.getWriter(), board.getContent()); return result; } public int update(Board board) { String sql = " UPDATE board " + " SET title = ? " + " ,writer = ? " + " ,content = ? " + " ,upd_date = now() " + " WHERE no = ? "; Object[] args = new Object[] {board.getTitle(), board.getWriter(), board.getContent(), board.getNo()}; int result = jdbcTemplate.update(sql, args); return result; } public int delete(int no) { String sql = " DELETE FROM board " + " WHERE no = ? "; Object[] args = new Object[] {no}; int result = jdbcTemplate.update(sql, args); return result; } }
Java
๋ณต์‚ฌ

service

โ€ข
BoardService.java
โ€ข
BoardServiceImpl.java

BoardService.java

package com.aloha.spring.service; import java.util.List; import com.aloha.spring.dto.Board; public interface BoardService { // ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก public List<Board> list() throws Exception; // ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ public Board select(int no); // ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก public Integer insert(Board board) throws Exception; // ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • public Integer update(Board board) throws Exception; // ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ public Integer delete(int no) throws Exception; }
Java
๋ณต์‚ฌ

BoardServiceImpl.java

package com.aloha.spring.service; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.aloha.spring.dao.BoardDAO; import com.aloha.spring.dto.Board; @Service // ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค ํด๋ž˜์Šค๋กœ ๋นˆ ๋“ฑ๋ก public class BoardServiceImpl implements BoardService { private static final Logger logger = LoggerFactory.getLogger(BoardServiceImpl.class); @Autowired private BoardDAO boardDAO; @Override public List<Board> list() throws Exception { List<Board> boardList = boardDAO.list(); return boardList; } @Override public Board select(int no) { Board board = boardDAO.select(no); return board; } @Override public Integer insert(Board board) throws Exception { int result = boardDAO.insert(board); return result; } @Override public Integer update(Board board) throws Exception { int result = boardDAO.update(board); return result; } @Override public Integer delete(int no) throws Exception { int result = boardDAO.delete(no); return result; } }
Java
๋ณต์‚ฌ