0. DB 관련 library 불러오기
아래 사이트에서 코드를 복사해서 설정파일(application.xml 또는 pom.xml)에 붙여넣고 저장한다.
1) MySQL이 제공하는 connector
https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.28
2) jdbc
https://mvnrepository.com/artifact/org.springframework/spring-jdbc/5.3.19
1. DB 테이블과 DTO(데이터 객체) 만들기
Workbench를 열어, 이름과 나이 정보를 담을 테이블을 만든다.
DB에서 값을 읽어와서 출력하는 기능 구현이 목표라서 값을 미리 넣어준다.
create database testdb;
use testdb;
drop table if exists data;
create table data(
name varchar(40) NOT NULL PRIMARY KEY,
age int NOT NULL
);
--test용 = 데이터가 잘 들어갔는지 확인
insert into data values("스프링", 20);
select * from data;
값을 담을 DTO는 사용자라는 의미로 User라고 지었으며, 코드는 아래와 같다.
//User.java
package com.test.di1.dto;
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}
2. DB의 값 받아오기
DB에서 테이블의 내용을 읽어와서 User에 담은 후, 리스트에 넣어 반환하는 코드이다.
//TestDaoImpl.java
package com.test.di1.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.test.di1.dto.User;
@Repository
public class TestDaoImpl implements TestDao {
@Autowired
private DataSource dataSource; //DB객체 받아오기
@Override
public LinkedList<User> getUserInfo() throws SQLException {
LinkedList<User> users = new LinkedList<>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = dataSource.getConnection();
pstmt = conn.prepareStatement("select * from data");
rs = pstmt.executeQuery();
while(rs.next()) {
User user = new User();
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
users.add(user);
}
}
finally {
rs.close();
pstmt.close();
conn.close();
}
return users;
}
}
3. DB와 연결하기
방법1. XML
Application.xml을 만들어 사용했으며, 설정 파일과 관련된 자세한 내용은
2022.04.23 - [웹프로그래밍/Spring] - Spring (3) - Container에 객체(Bean) 설정하기3 : Annotation
이 글을 참고하면 된다.
*xml문법에 따라 주소에서 &는 &로 작성해야 한다.
<!-- application.xml -->
<?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:context="http://www.springframework.org/schema/context"
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.3.xsd">
<context:component-scan base-package="com.test.di1"></context:component-scan>
<bean id="ds" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/testdb?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8"/>
<property name="username" value="dbId"/>
<property name="password" value="dbPw"/>
</bean>
</beans>
방법2. Java
ApplicationConfig.java를 만들어 사용했으며, 설정 파일과 관련된 자세한 내용은
2022.04.23 - [웹프로그래밍/Spring] - Spring (3) - Container에 객체(Bean) 설정하기4 : Java
이 글을 참고하면 된다.
//ApplicationConfig.java
package com.test.di1.config;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
@Configuration
@ComponentScan("com.test.di1")
public class ApplicationConfig {
@Bean //객체 등록
public DataSource dataSource() {
SimpleDriverDataSource sdds = new SimpleDriverDataSource();
sdds.setDriverClass(com.mysql.cj.jdbc.Driver.class);
sdds.setUrl("jdbc:mysql://127.0.0.1:3306/testdb?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8");
sdds.setUsername("dbId");
sdds.setPassword("dbPw");
return sdds;
}
}
방법3. DB Connection Pool
2022.04.27 - [웹프로그래밍/Spring] - Spring (5) - Spring MVC 프로젝트 생성하기
위의 발행글에서 MVC 프로젝트를 생성한 후, src/main/webapp 에 META-INF/context.xml을 생성한다.
1) context.xml에 Connection Pool을 생성
connection pool 자원의 이름은" jdbc/test"이다.
마지막 줄에 <WatchedResource>태그는 이제 web.xml을 보러가라는 뜻이다.
원래 context.xml이 없었을 땐, 어떻게 web.xml을 볼 수 있었을까?
Server에 있는 server.xml에 의해 META-INF 폴더를 먼저 보는데, 폴더가 없으면 web.xml을 보도록 되어있다.
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="dbId" password="dbPw" driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/testdb?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8"/>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
2) root-context.xml에서 DB 등록하기
앞서 만들어 놓은 pool을 우리가 만든 웹어플리케이션에 등록해야 한다.
<beans>태그 사이에 아래 코드를 넣어준다.
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/test"></property>
</bean>
'Programming > Spring' 카테고리의 다른 글
Spring (6) - Spring MVC 프로젝트 생성하기 (0) | 2022.04.27 |
---|---|
Spring (5) - Spring MVC 패턴 (0) | 2022.04.27 |
Spring (3) - Container에 객체(Bean) 설정하기4 : Java (0) | 2022.04.23 |
Spring (3) - Container에 객체(Bean) 설정하기3 : Annotation (0) | 2022.04.23 |
Spring (3) - Container에 객체(Bean) 설정하기2 : XML (0) | 2022.04.22 |