2020년 9월 4일 금요일

스프링 @Configuration, @Bean, @Component, @Service, @Repository 소개 및 오라클12C, Spring JDBC를 이용한 데이터 INSERT 실습

 스프링 @Configuration, @Bean, @Component, @Service, @Repository 소개 및 오라클12C, Spring JDBC를 이용한 데이터 INSERT 실습


http://ojc.asia/bbs/board.php?bo_table=LecSpring&wr_id=858

불러오는 중입니다...


https://youtu.be/UJETDiXKwYk



n  클래스 레벨에서 사용되는 @Configuration은 스프링 IoC 컨테이너에게 클래스가 자바 빈을 만드는(구성하는) 클래스임을 알린다.

n  메소드 레벨에서 사용되는 @Bean은 개발자가 만들지 않는 외부 라이브러리의 객체들을 빈으로 등록할 때 사용된다. 물론 개발자가 만든 클래스도 빈으로 만들 수 있지만 개발자가 만드는 클래스들은 주로 @Component, @Service, @Repository 등의 어노테이션을 이용하여 등록한다.

@Configuration


public class Config {


    @Bean


    public Emp getService() {


        return new Emp();


    }


 


    @Bean


    public MyClass1 getArrayList() {


       return new ArrayList();    


}


}

@Component 

n  @Component, @Service, @Repository 등의 어노테이션을 이용하여 등록한 빈을 @Autowired를 이용하여 주입한다.

n  @Component는 스프링 IoC 컨테이너에서 관리되는 자바 빈(객체)임을 표시하기 위해 사용하는 기본적인 어노테이션으로 주로 DTO, VO 용도의 클래스에 대해 주로 사용한다.

n  @Service는 비즈니스 로직이나 영속성 계층(Respository Layer)의 클래스를 호출하는 클래스에 사용된다. 기능적으로는 @Component와 동일하다.

n  @Repository는 DB쪽 데이터 처리를 위한 Data Repository, DAO 클래스임을 나타내는 어노테이션이다. @Component와 기능적으로 동일하지만 @Repository는 발생되는 Unchecked Exception을 Spring의 Runtime 예외인 DataAccessException으로 처리할 수 있게 해준다. DataAccessException은  DAO에서 상용구 catch-and-throw 블록 및 예외 선언을 작성하지 않고도 예외를 처리 할 수 ​​있다.

n  실습(Spring JDBC를 이용한 오라클 사원(Emp) 테이블 Data Insert)

n  오라클쪽에 실습용 테이블 생성

create table  emp3 (

    empno number primary key,

    ename varchar2(50)

);



n  프로젝트 구조


 

n  1. 이클립스에서 file >> new >> project, maven project




 







n  pom.xml

<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/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>demo</groupId>

  <artifactId>demo1</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <name>demo1</name>

  <description>demo1</description>

 

  <properties>

            <failOnMissingWebXml>false</failOnMissingWebXml>

            <spring.version>5.2.3.RELEASE</spring.version>

            <oracle.version>12.2.0.1</oracle.version>

      </properties>

     

  <dependencies>

            <dependency>

                  <groupId>org.springframework</groupId>

                  <artifactId>spring-context</artifactId>

                  <version>${spring.version}</version>

            </dependency>

           

            <dependency>

                  <groupId>org.springframework</groupId>

                  <artifactId>spring-jdbc</artifactId>

                  <version>${spring.version}</version>

            </dependency>

           

            <dependency>

                  <groupId>com.oracle.jdbc</groupId>

                  <artifactId>ojdbc8</artifactId>

                  <version>${oracle.version}</version>

            </dependency>

                 

      </dependencies>

     

      <repositories>

            <repository>

                  <id>oracle</id>

                  <name>ORACLE JDBC Repository</name>

                  <url>https://maven.xwiki.org/externals/</url>

            </repository>

      </repositories>

     

      <build>

            <sourceDirectory>src</sourceDirectory>

            <plugins>

                  <plugin>

                        <artifactId>maven-compiler-plugin</artifactId>

                        <version>3.8.1</version>

                        <configuration>

                              <source>1.8</source>

                              <target>1.8</target>

                        </configuration>

                  </plugin>

                  <plugin>

                        <artifactId>maven-war-plugin</artifactId>

                        <version>3.2.3</version>

                        <configuration>

                              <warSourceDirectory>WebContent</warSourceDirectory>

                        </configuration>

                  </plugin>

            </plugins>

      </build>

</project>



n  Emp.java

package entity;



public class Emp {

     private String empno;

     private String ename;

    

     public Emp(String empno, String ename) {

          this.empno = empno;

          this.ename = ename;

     }

    

     public String getEmpno() {

          return empno;

     }

     public void setEmpno(String empno) {

          this.empno = empno;

     }

     public String getEname() {

          return ename;

     }

     public void setEname(String ename) {

          this.ename = ename;

     }   

    

}



n  EmpRepository.java

package repository;



import entity.Emp;



public interface EmpRepository {

      void save(Emp e);

}





n  EmpRepositoryImpl.java

package repository;



import javax.annotation.PostConstruct;

import javax.sql.DataSource;



import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.stereotype.Repository;



import entity.Emp;



@Repository

public class EmpRepositoryImpl implements EmpRepository {

         

          @Autowired

          private DataSource ds;

          private JdbcTemplate jdbcTemplate;

         

          @PostConstruct

          private void postConstruct() {

                   jdbcTemplate = new JdbcTemplate(ds);

          }



          public void save(Emp e) {

                   String sql = "insert into emp3 (empno, ename) values (?, ?)";

                   jdbcTemplate.update(sql, e.getEmpno(), e.getEname());

          }

}



n  EmpConfig.java

package 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.DriverManagerDataSource;



@Configuration

@ComponentScan(basePackages="service, repository")

public class EmpConfig {

     

      @Bean

      public DataSource dataSource() {

            final DriverManagerDataSource dataSource = new DriverManagerDataSource();

        dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");

        dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:ORCL");

        dataSource.setUsername("scott");

        dataSource.setPassword("tiger");

        return dataSource;

      }

     

}





n  EmpApplication.java

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;



import config.EmpConfig;

import entity.Emp;

import service.EmpService;



public class EmpApplication {

      

      public static void main(String[] args) {

            AnnotationConfigApplicationContext ctx =

                            new AnnotationConfigApplicationContext(EmpConfig.class);

            EmpService empService = ctx.getBean(EmpService.class);

            empService.saveEmp(new Emp("1111""홍길동"));

            empService.saveEmp(new Emp("2222""김길동"));

            System.out.println("Emp Inserted!!");

      }

}



#스프링Ioc, #스프링강좌, #스프링강의, #스프링교육, #Autowired, #스프링자바설정, #스프링Config, #스프링프레임워크, #Spring강의, #Spring주입, #스프링주입, #SpringIoC, #스프링IoC, #스프링컨테이너

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...