씨네
공부하는 개발자 강씨네
씨네
  • 분류 전체보기 (460)
    • Web (21)
      • HTML (11)
      • CSS (10)
    • JS 관련 (49)
      • JavaScript (27)
      • JQuery (22)
    • TS 관련 (15)
      • TypeScript (15)
    • NodeJS (7)
      • NodeJS (7)
    • 따라하며 배우는 시리즈 (23)
      • NodeJS & ReactJS Basic (23)
      • NodeJS & ReactJS Movie (0)
      • NodeJS & ReactJS Youtube (0)
      • NodeJS & ReactJS ChatBot (0)
    • SPA (14)
      • React (14)
      • Vue (0)
      • Anguler (0)
    • Java 관련 (118)
      • Java (52)
      • JDBC (6)
      • JSP & Servlet (18)
      • Spring Legecy (38)
      • SpringBoot (4)
    • Python (26)
      • Python (20)
      • PyMongo (1)
      • Django (5)
    • Git (24)
      • Github (24)
    • RDB (22)
      • Oracle (21)
      • MySQL (1)
    • NoSQL (5)
      • MongoDB (5)
    • OS (4)
      • Linux (4)
    • 빅데이터 (2)
      • hadoop (2)
    • IDE (20)
      • eclipse (11)
      • VSCODE (4)
      • VisualStudio (1)
      • IntelliJ (1)
      • PyCharm (1)
      • DBeaver (2)
    • Install (3)
      • Tomcat (1)
      • Docker (1)
      • Anaconda (1)
    • 오류&에러 (28)
      • TS (2)
      • NodeJS (7)
      • SQL (8)
      • Java (1)
      • Spring (4)
      • Git (6)
      • 기타 (0)
    • 알고리즘 (67)
      • 수열 (1)
      • 백준(backjoon) (39)
      • Programmers (27)
    • 자격증 (5)
      • SQLD (5)
    • 기타 (2)
    • IT유튜브로 지식쌓기 (2)

공지사항

인기 글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
씨네

공부하는 개발자 강씨네

[Spring] Spring JDBC
Java 관련/Spring Legecy

[Spring] Spring JDBC

2022. 4. 11. 08:55
728x90

Spring_32처럼 버전 업데이트를 한 상태의 프로젝트입니다!

​

05. pom.xml : spring-jdbc, ojdbc6

pom.xml로 가는거 보시면 감이 오시죠? 디펜던시 추가입니다.

		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-jdbc</artifactId>
		    <version>${org.springframework-version}</version>
		</dependency>

버전번은 org.springframework.version으로 잡아주세요!

​

<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6 -->
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.4</version>
</dependency>

​

​

06. web.xml : applicationContext.xml, *.do, encodingFilter

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
	id="WebApp_ID" version="4.0">

	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/appServlet/applicationContext.xml</param-value>
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	
	<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>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

</web-app>

​

07. src/main/resources/sqls ( db.properties & jdbc.sql )

​

​

db.properties

oracle.driver=oracle.jdbc.driver.OracleDriver
oracle.url=jdbc:oracle:thin:@localhost:1521:xe
oracle.username=kh
oracle.password=kh

앞에 oracle은 왜 붙어있을까요??

spring-jdbc에서는 두단계이상으로 잡아줘야 잘 인식이 된다고 합니다!

사실 크게 의미가 있는건 아닌데 운영체제에 따라서 읽어오시 못할수도 있다고 하네요.

​

jdbc.sql

DROP SEQUENCE JDBCSEQ;
DROP TAVLE JDBABOARD;

CREATE SEQUENCE JDBCSEQ;

CREATE TABLE JDBCBOARD(
	SEQ NUMBER PRIMARY KEY,
	WRITER VARCHAR2(500) NOT NULL,
	TITLE VARCHAR2(1000) NOT NULL,
	CONTENT VARCHAR2(4000) NOT NULL,
	REGDATE DATE NOT NULL
);

INSERT INTO JDBCBOARD
VALUES(JDBCSEQ.NEXTVAL, '관리자', 'test 글 입니다.', 'test 내용입니다.', SYSDATE);

SELECT SEQ, WRITER, TITLE, CONTENT, REGDATE
FROM JDBCBOARD
ORDER BY SEQ DESC;

시퀀스랑 테이블 잘 만들어주시고 테스트로 인서트 하나 해주세요!

​

08. WEB-INF/spring/appServlet/applicationContext.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 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">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
	
	<context:property-placeholder location="classpath:sqls/db.properties"/>
	
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${oracle.driver}" />
		<property name="url" value="${oracle.url}" />
		<property name="username" value="${oracle.username}"/>
		<property name="password" value="${oracle.password}"/>
	</bean>
	
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource" />
	</bean>
		
</beans>

namespaces에 context를 체크하고

<context:property-placeholder location="classpath:sqls/db.properties"/>

이전에는 db.properties를 사용하기 위해서

	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:mybatis/db.properties</value>
			</list>
		</property>
	</bean>

해당 코드를 썻는데 한줄로 줄었습니다!

​

09. dto. dao, biz, controller

​

https://github.com/KangCine/KH_QClass/tree/master/Workspaces07_Spring/SpringMVC05_update_jdbc/src/main/webapp/WEB-INF/views

 

GitHub - KangCine/KH_QClass: KH정보교육원 QClass - Java / HTML / CSS / JavaScript / jQuery / Jsp&Servlet / Spring

KH정보교육원 QClass - Java / HTML / CSS / JavaScript / jQuery / Jsp&Servlet / Spring - GitHub - KangCine/KH_QClass: KH정보교육원 QClass - Java / HTML / CSS / JavaScript / jQuery / Jsp&Servlet / Spring

github.com

 

views의 전체 코드는 위 링크에 있습니다.

​

Spring JDBC에서는 Dao의 작성방식이 3가지가 있습니다.

​

 

1. JdbcTemplate의 interface 구현방식

	@Override
	public List<JDBCDto> selectList() {
		
		List<JDBCDto> list = new ArrayList<JDBCDto>();
		
		// interface 구현방식 (RowMapper)
		list = jdbcTemplate.query(SELECT_LIST_SQL, null, null, new RowMapper<JDBCDto>() {
			@Override
			public JDBCDto mapRow(ResultSet rs, int rowNum) throws SQLException {
				return new JDBCDto(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getDate(5));
			}
		});
		
		return list;
	}

JdbcTemplate interface의 RowMapper를 구현 하는 방법입니다.

jdbcTemplate.query안에 4개의 파라미터가 필요합니다.

(쿼리문, PreparedStatement에 들어갈 ?,타입, RowMapper())

해당 문법은 PreparedStatement를 사용합니다.

위의 코드에서는 selectAll이기때문에 필요없지만 selectOne의 경우는 필요하겠죠?

​

2. 람다식

	@Override
	public List<JDBCDto> selectList() {
		
		List<JDBCDto> list = new ArrayList<JDBCDto>();
		
		// 람다식
		list = jdbcTemplate.query(SELECT_LIST_SQL, (rs, rowNum)->{
			return new JDBCDto(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getDate(5));
		});

		return list;
	}

3. Innerclass

	@Override
	public List<JDBCDto> selectList() {
		
		List<JDBCDto> list = new ArrayList<JDBCDto>();
		
		// inner class 방식
		list = jdbcTemplate.query(SELECT_LIST_SQL, null, null, new MyMapper());
		
		return list;
	}

	// inner class
	private static final class MyMapper implements RowMapper<JDBCDto>{
		
		@Override
		public JDBCDto mapRow(ResultSet rs, int rowNum) throws SQLException{
			
			return new JDBCDto(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getDate(5));
		}
	}

1번의 방법과 비슷한 방법입니다.

​

https://docs.spring.io/spring-framework/docs/current/javadoc-api/

 

Spring Framework 5.3.13 API

 

docs.spring.io

 

728x90

'Java 관련 > Spring Legecy' 카테고리의 다른 글

[Spring] Maven을 이용한 스프링 프로젝트 생성  (0) 2022.09.03
[Spring] JavaConfig(xml을 java로 변경)  (0) 2022.04.12
Spring] update(버전설정 잡기)  (0) 2022.04.10
[Spring] 파일 업로드 / 다운로드(file upload / download)  (0) 2022.04.09
[Spring] security(비밀번호 암호화)  (0) 2022.04.08
    'Java 관련/Spring Legecy' 카테고리의 다른 글
    • [Spring] Maven을 이용한 스프링 프로젝트 생성
    • [Spring] JavaConfig(xml을 java로 변경)
    • Spring] update(버전설정 잡기)
    • [Spring] 파일 업로드 / 다운로드(file upload / download)
    씨네
    씨네
    개발자 씨네가 공부하는 내용을 기록 겸 공유하는 블로그입니다!

    티스토리툴바