Spring Boot/JDBC JdbcTemplate/CRUD 예제

Similar documents
@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

Spring Data JPA Many To Many 양방향 관계 예제

내장서버로사용. spring-boot-starter-data-jpa : Spring Data JPA 사용을위한설정 spring-boot-devtools : 개발자도구를제공, 이도구는응용프로그램개발모드에서유 용한데코드가변경된경우서버를자동으로다시시작하는일들을한다. spri

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

Spring Boot

쉽게 풀어쓴 C 프로그래밊

FileMaker ODBC and JDBC Guide

PowerPoint Presentation

10.ppt

rmi_박준용_final.PDF

FileMaker ODBC and JDBC Guide

<session-factory> <property name="hibernate.connection.driver_class">oracle.jdbc.driver.oracledriver</property> <property name="hibernate.connection.u

FileMaker ODBC 및 JDBC 가이드

13주-14주proc.PDF

[ 목차 ] 5.1 데이터베이스프로그래밍개념 5.2 T-SQL T-SQL 문법 5.3 JAVA 프로그래밍 2

PowerPoint 프레젠테이션

[ 스프링부트, 그래들, HelloWorld]STS,Gradle 설치및 WEB MVC 심플예제 간단히 STS 및 Gradle Support Plugin 을설치하여간단히 Spring Boot, Gradle Web 응용프로그램을작성해보자. 0. STS 및 Gradle Su

PowerPoint Presentation

신림프로그래머_클린코드.key

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - 04-UDP Programming.ppt

FileMaker 15 ODBC 및 JDBC 설명서

PowerPoint Presentation

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

RDB개요.ppt

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Chap12

5장.key

PowerPoint Presentation

歯JavaExceptionHandling.PDF

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

untitled

Microsoft PowerPoint - Java7.pptx

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

07 자바의 다양한 클래스.key

gnu-lee-oop-kor-lec06-3-chap7

PowerPoint Presentation

자바 프로그래밍

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

윈도우시스템프로그래밍

비긴쿡-자바 00앞부속

Microsoft PowerPoint - 2강

fundamentalOfCommandPattern_calmglow_pattern_jstorm_1.0_f…

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

09-interface.key

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Interstage5 SOAP서비스 설정 가이드

05-class.key

JMF3_심빈구.PDF

교육2 ? 그림

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

PowerPoint 프레젠테이션

Network Programming

JAVA PROGRAMMING 실습 09. 예외처리

ALTIBASE HDB Patch Notes

12-file.key

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

Design Issues

PowerPoint 프레젠테이션

ch09

3 S Q L A n t i p a t t e r n s Trees/intro/parent.sql CREATE TABLE Comments ( comment_id SERIAL PRIMARY KEY, parent_id BIGINT UNSIGNED, comment TEXT

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

02 C h a p t e r Java

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

PowerPoint 프레젠테이션

자바-11장N'1-502

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

PowerPoint Presentation

Java

윈도우시스템프로그래밍

Microsoft PowerPoint - 10Àå.ppt

강의 개요

MySQL-.. 1

PowerPoint 프레젠테이션

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

JMF2_심빈구.PDF

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

Microsoft PowerPoint - lec12 [호환 모드]

NoSQL

Microsoft PowerPoint - 03-TCP Programming.ppt

쉽게 풀어쓴 C 프로그래밍

MySQL-Ch10

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

어댑터뷰

개요오라클과티베로에서 JDBC 를통해접속한세션을구분할수있도록 JDBC 접속시 ConnectionProperties 를통해구분자를넣어줄수있다. 하나의 Node 에다수의 WAS 가있을경우 DB 에서 Session Kill 등의동작수행시원하는 Session 을선택할수있다.

Microsoft Word - EEL2 Lab4.docx

Microsoft Word - SQL튜닝_실습교재_.doc

Microsoft PowerPoint - 18-DataSource.ppt

MySQL-Ch05

슬라이드 1

PowerPoint Presentation

PowerPoint 프레젠테이션

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

Transcription:

Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com)

Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자. http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=524 STS 에서 File -> New -> Project -> Spring Starter Project 다음화면에서 Data -> JDBC 체크 build.gradle 에 MySQL 설정추가 runtime ('mysql:mysql-connector-java') 2

src/main/resources/schema.sql drop database if exists emp; create database emp; use emp; create table emp ( empno int(4) not null auto_increment, ename varchar(50), primary key (empno) ) ENGINE=InnoDB; src/main/resources/data.sql insert into emp(ename) values ('1 길동 '); insert into emp(ename) values ('2 길동 '); insert into emp(ename) values ('3 길동 '); MariaDB 에서직접 SQL 을작성하여테이블및데이터를생성할수있지만스프링부트에서는클래스패스경로에 schema.sql, data.sql 이존재하면자동실행하므로스키마생성부분과데이터생성부분을파일로만들어두면된다. 3

src/main/resources/application.properties spring.datasource.platform=mysql spring.datasource.url=jdbc:mysql://localhost/emp?createdatabaseifnotexist=true spring.datasource.username=root spring.datasource.password=1111 spring.datasource.driver-class-name=com.mysql.jdbc.driver spring.datasource.sql-script-encoding=utf-8 spring.datasource.validation-query=select 1 # 커넥션풀에서커넥션을가져올경우커넥션이유효한지검사 spring.datasource.test-on-borrow=true #spring.datasource.auto-commit=true

도메인클래스 (Emp.java) 테이블구조와동일하다. package jdbc.domain; public class Emp { private Long empno; private String ename; public Emp() { public Emp(Long empno, String ename) { this.empno = empno; this.ename = ename; public Long getempno() { return empno; public void setempno(long empno) { this.empno = empno; public String getename() { return ename; public void setename(string ename) { this.ename = ename; public String tostring() { return "[empno=" + empno +",ename=" + ename + "]"; 5

Repository 인터페이스 (EmpRepository.java) 영속성서비스용인터페이스 package jdbc.repository; import java.util.list; import jdbc.domain.emp; public interface EmpRepository { List<Emp> findall(); Emp findone(long empnno); Emp save(emp emp); void delete(long empno); 6

Repository 구현체 (EmpRepositoryImpl.java) 영속성서비스용구상클래스 (1) package jdbc.repository; import java.sql.resultset; import java.sql.sqlexception; import java.util.list; import javax.annotation.postconstruct; import javax.sql.datasource; import org.springframework.beans.factory.annotation.autowired; import org.springframework.jdbc.core.jdbctemplate; import org.springframework.jdbc.core.rowmapper; import org.springframework.jdbc.core.namedparam.beanpropertysqlparametersource; import org.springframework.jdbc.core.namedparam.sqlparametersource; import org.springframework.jdbc.core.simple.simplejdbcinsert; import org.springframework.stereotype.repository; import org.springframework.transaction.annotation.transactional; import jdbc.domain.emp; @Repository @Transactional(readOnly=true) public class EmpRepositoryImpl implements EmpRepository { private SimpleJdbcInsert jdbcinsert; private JdbcTemplate jdbctemplate; 7

Repository 구현체 (EmpRepositoryImpl.java) 영속성서비스용구상클래스 (2) @Autowired RowMapper<Emp> emprowmapper; @Autowired public void setdatasource(datasource datasource) { this.jdbctemplate = new JdbcTemplate(dataSource); @Override public List<Emp> findall() { List<Emp> emps = jdbctemplate.query("select empno, ename from emp",emprowmapper); return emps; @Override public Emp findone(long empno) { return (Emp)jdbcTemplate.queryForObject("select empno, ename from emp where empno =?", emprowmapper, empno); 8

Repository 구현체 (EmpRepositoryImpl.java) 영속성서비스용구상클래스 (3) @Override @Transactional(readOnly=false) public Emp save(emp emp) { SqlParameterSource param = new BeanPropertySqlParameterSource(emp); (?,?)", if (emp.getempno() == null) { Number key = jdbcinsert.executeandreturnkey(param); emp.setempno(key.longvalue()); else { this.jdbctemplate.update( "insert into emp (empno, ename) values ); return emp; emp.getempno(), emp.getename() 9

Repository 구현체 (EmpRepositoryImpl.java) 영속성서비스용구상클래스 (4) @Override @Transactional(readOnly=false) public void delete(long empno) { this.jdbctemplate.update( "delete from emp where empno =?", empno ); // 생성자가실행된후에실행된다. @PostConstruct public void init() { //INSERT SQL Auto Create jdbcinsert = new SimpleJdbcInsert(jdbcTemplate).withTableName("emp").usingGeneratedKeyColumns("empno"); 10

스프링부트메인 (SpringbootjdbcApplication.java) (1) package jdbc; import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.commandlinerunner; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import jdbc.domain.emp; import jdbc.repository.emprepository; @SpringBootApplication public class SpringbootjdbcApplication implements CommandLineRunner { public static void main(string[] args) { SpringApplication.run(SpringbootjdbcApplication.class, args); @Autowired EmpRepository emprepository; 11

스프링부트메인 (SpringbootjdbcApplication.java) (2) public void run(string...args) { // 전체사원 SELECT List<Emp> emps = emprepository.findall(); for(emp e : emps) { System.out.println(e); System.out.println("---------------------"); //2 번사원 SELECT Emp e = emprepository.findone(2l); System.out.println(e); System.out.println("---------------------"); //3 번사원 DELETE emprepository.delete(3l); emps = emprepository.findall(); for(emp e1 : emps) { System.out.println(e1); System.out.println("---------------------"); //4 번사원 INSERT e = emprepository.save(new Emp(4L, "4 길동 ")); emps = emprepository.findall(); for(emp e1 : emps) { System.out.println(e1); System.out.println("---------------------"); //'5 길동 ' 사원 INSERT Emp e5 = new Emp(); e5.setename("5 길동 "); e = emprepository.save(e5); emps = emprepository.findall(); for(emp e1 : emps) { System.out.println(e1); [empno=1,ename=1 길동 ] [empno=2,ename=2 길동 ] [empno=3,ename=3 길동 ] --------------------- [empno=2,ename=2 길동 ] --------------------- [empno=1,ename=1 길동 ] [empno=2,ename=2 길동 ] --------------------- [empno=1,ename=1 길동 ] [empno=2,ename=2 길동 ] [empno=4,ename=4 길동 ] --------------------- [empno=1,ename=1 길동 ] [empno=2,ename=2 길동 ] [empno=4,ename=4 길동 ] [empno=5,ename=5 길동 ] 12