ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring MVC2 - 3. Spring을 통해서 DB에 접근하기
    JAVA/웹 프로그래밍 - Spring 2020. 12. 17. 20:56

    아래의 내용과는 이어지지 않는다.

    designatedroom87.tistory.com/341

     

    Spring MVC2 - 2.

    아래의 글을 이어서 시작해보자. designatedroom87.tistory.com/340 New -> Maven Project를 선택하고 Next를 선택한다. create simple project를 체크하고 Next를 선택한다. artifact id는 프로젝트 이름이다. wa..

    designatedroom87.tistory.com

     

    DB접근에 대해 알아보자. 이를 스프링으로 진행할 것이다.

     

    아래는 MVC2모델에서의 관계도이다.

    실제 MVC2모델에서 Service는 할 게 별로 없다. 없어도 된다.

    Controller     ->    Service       ->  DAO
    서비스 호출                             DB처리

     


    Service를 인터페이스로 구현 될 거다.

    우리가 MVC2에서 만들었던 서비스는 객체였다.

     

    서비스를 인터페이스로 만드는 이유는 데이터베이스의 종류는 많다.
    oracle, mysql 등등..
    각 DB에는 모두 sql문에 insert, update, delete, select 문이 있다.

    공통적인 내용을 인터페이스에 두고 나머지는 상속해서 쓰도록 한다.

    프로젝트를 하나 만들 것이다. 프로젝트는 Maven Project로 만들 것이다.

     

    아래와 같이 설정하고 Finish를 선택한다.

    이대로 두면 에러가 발생한다. 이는 앞에서 했기 때문에 대충적으면서 지나간다.

    혹 아래를 참고해도 된다.

    designatedroom87.tistory.com/336?category=909022

     

    프로젝트를 Maven 프로젝트로 변경하기

    아래의 내용을 참고해보자. designatedroom87.tistory.com/334?category=909022 Maven 설치 및 설정 우리가 앞에서 서블릿에서 게시판 만들기에서 이미지 업로드 시에 cos.jar파일을 WEB-INF/lib폴더에 추가해..

    designatedroom87.tistory.com

    그리고 pom파일을 수정해야 한다.

    webapp에 WEB-INF폴더를 만든다.

    web.xml을 만들어서 붙이자. pom.xml에 설정할 내용이 많다.

    pom파일에 추가할 내용은 아래의 파일의 내용 주석을 읽어보자.

    https://mvnrepository.com/ 접속해서 필요한 내용들을 가지고 와서 

    pom.xml의 dependencies 태그 내에 붙여넣으면 된다. 몇 몇 개는 버전을 서로 맞춰야 하는 것도 있다.

    버전의 선택은 가장 많은 사람들이 쓴 버전을 이용한 것도 있다.

    junit은 테스팅을 하기위해서 추가했다.

    springframework의 spring-webmvc의 버전을 먼저 5.2.9를 선택하고나서, 이 버전에 다른 것들의 버전을 맞췄다.

     

    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>com.iot</groupId>
      <artifactId>springjdbc</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>war</packaging>
      
      <properties>
      	<java-version>1.8</java-version>
      	<maven.compiler.source>1.8</maven.compiler.source>
      	<maven.compiler.target>1.8</maven.compiler.target>
      	<!-- org.springframework과 version을 맞추는 것이 핵심이다. -->
      	<org.springframework-version>5.2.9.RELEASE</org.springframework-version>
      </properties>
      
      <dependencies>
      	<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-api -->
    	<dependency>
    	    <groupId>org.apache.tomcat</groupId>
    	    <artifactId>tomcat-api</artifactId>
    	    <!-- tomcat api는 현재 설치한 tomcat과 일치하는 버전으로 선택한다. -->
    	    <version>9.0.39</version>
    	</dependency>
      
      	<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-webmvc</artifactId>
    	    <version>5.2.9.RELEASE</version>
    	</dependency>
      	
      	<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-jdbc</artifactId>
    	    <!-- org.springframework과 version을 맞추는 것이 핵심이다. -->
    	    <version>5.2.9.RELEASE</version>
    	</dependency>
      	
      	<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-test</artifactId>
    	    <!-- org.springframework과 version을 맞추는 것이 핵심이다. -->
    	    <version>5.2.9.RELEASE</version>
    	    <scope>test</scope>
    	</dependency>
      	
      	<!-- https://mvnrepository.com/artifact/junit/junit -->
    	<dependency>
    	    <groupId>junit</groupId>
    	    <artifactId>junit</artifactId>
    	    <!-- 가장 많이 쓰는 버전을 선택 -->
    	    <version>4.12</version>
    	    <scope>test</scope>
    	</dependency>
      </dependencies>
      
    </project>

     

     

    web.xml

    더보기
    <?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">
      <display-name>El</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
       <servlet>
      	<servlet-name>dispatcher</servlet-name>
      	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      </servlet>
      
      <servlet-mapping>
      	<servlet-name>dispatcher</servlet-name>
      	<url-pattern>/</url-pattern>
      </servlet-mapping>
      
    </web-app>

     

    그리고 Update Project를 하자.

    스프링으로 jdbc를 하는 이유는 편리해서 사용한다고 한다.

    src/main/java로 이동해서 jdbc패키지를 만든다.

    jdbc패키지에 Main이라는 이름의 java파일을 하나 만든다. 그리고 man함수를 체크한다.
    실행 파일로 쓸 것이다.

     

    Main.java

     

    Main.java 소스 파일

    더보기
    package jdbc;
    
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jdbc.datasource.DriverManagerDataSource;
    
    public class Main {
    	public static void main(String[] args) {
    		ApplicationContext context = new ClassPathXmlApplicationContext("jdbc/dbconfig.xml");
    		
    		DataSource ds = (DataSource)context.getBean("dataSource");	//	만들어진 객체를 가지고 온다.
    		/*	아래의 문장을 쓰기 보다는 위와 같이 표현해서 쓴다.	*/
    		//	DriverManagerDataSource ds = context.getBean("dataSource");
    		
    		try {	System.out.println(ds.getConnection());	} 
    		catch (SQLException e) {	e.printStackTrace();	}
    	}
    }

     

    jdbc 패키지에 dbconfig라는 이름의 spring bean configuration file을 만든다.

    만드는 방법은, Other를 선택한다.

     

    아래와 같이 입력하고 Next를 선택한다.

     

    아래와 같이 파일 이름을 입력하고 Finish를 선택한다.

     

    이 dbconfig파일에서 설정을 한다. 아래와 같이 설정한다.

    dbconfig.xml

     

    dbconfig.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"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <!-- 클래스를 생성하고 나서, set메소드를 통해 데이터들을 주입한다. 
    -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    	<!-- DB연결에 필요한 정보 -->
    	<!-- setDriverClassName 함수가 있다. 매개변수 이름이  driverClassName 이다.-->
    	<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
    	<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
    	<property name="username" value="hr"></property>
    	<property name="password" value="1234"></property>
    </bean>
    
    <!-- mvc2에서 connection conn의 역할을 한다. 
    	위에서 생성한 "dataSource"가 필요하다.
    -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    	<!-- <constructor-arg><ref bean="dataSource" /></constructor-arg> -->
    	<constructor-arg ref="dataSource" />
    </bean>
    
    </beans>

     

    한 가지 더 작업해야 할 내용은 우리가 사용할 오라클 드라이버를 추가해야 한다.

    Maven에서 해도 되는데, 에러가 뜨는 문제가 발생했다. 그래서 외부에서 오라클 드라이버를 포함시켜주자.

    이는 DB를 연결하는 작업에서 했던 내용이다.

    아래를 참고해보자. 드라이버가 없다면 아래에서 다운로드 하자.

    designatedroom87.tistory.com/204?category=897688

     

    DB와 자바를 연결하기

    자바에서 오라클과 연동해보자. oracle db 11버전을 쓰고 있으며, 아래에 다음과 같은 db가 존재한다. 먼저, jdbc driver 11g 를 다운받는다. 우리가 쓰는 오라클 버전과 일치하는 것으로 받아야 한다. 그

    designatedroom87.tistory.com

    DB에서 우리는 아래의 드라이버를 다운 받았다. 이 저장 위치를 기억하고 있자.

    현재 프로젝트를 우클릭해서 아래와 같이 build path -> configure build path를 선택한다.

     

    아래의 그림과 같이 Add External JARs를 선택한다.

     

    아래와 같이 드라이버를 추가한다. 그리고 저장하고 닫는다.

     

    아래와 같이 추가가 되었다.

     

    Main.java로 오자. 그리고 아래와 같이 우클릭해서 Java Application으로 실행하자.

    아래와 같이 콘솔 창에 다음과 같은 문구가 뜬다.

     

    위에서 했던 작업을 간단히 정리하면 다음과 같다.

    1. pom.xml에서 dependencies태그를 이용해서 라이브러리를 전부 가지고 온다.

    2. DB를 사용하기 위해서는 객체를 만들어야 한다. 스프링을 이용해서 DriverManagerDataSource를 bean에서 만든다.

       dbconfig.xml 설정 한다.

    3. dataSource는 Db접속을 위해서 사용. jdbcTemplate는 sql문에 사용한다.

     

    dbconfig.xml에서 아래의 내용에서 주소 아이디 비번은 불변이므로 나중에 파일로 돌릴 것이다.

     

    그리고 한 가지 더 만약 실행하다가 에러가 난 경우에 어딘가에서 다운이 제대로 안된 경우도 있다.

    그래서 이를 처리하는 한 가지 방법이 있다.

    maven repositories탭이 있는지 확인해보자. 만약 없다면 다음과 같이 추가한다.

     

    아래와 같이 Open을 선택한다.

     

    maven repositories탭에서 Global Repositories의 하위 Central을 선택하고

    우클릭해서 아래와 같이 Rebuild index를 선택한다.

    라이브러리를 다운 받는데 시간이 좀 걸린다.

     

    서비스를 만들어보자.
    jdbc패키지에 JDBCService이름으로 인터페이스를 만들자.

    JDBCService 인터페이스에는 각 DB가 접근할 수 있는 메소드들을 정의한다.

    메소드들에 대한 구현은 각 DB에서 한다.

    아래의 내용들을 붙여넣으면 에러가 발생할 것인데, 에러가 나는 이유는 Member라는 모델을 아직 안 만들어서 그렇다.

    이는 아래에서 구현하므로 그냥 지나치자.

    JDBCService.java 파일

    더보기
    package jdbc;
    
    import java.util.List;
    
    public interface JDBCService {
    	public int count();					//	게시물의 전체 수를 반환하는 함수
    	public List<Member> select();		//	리스트를 들고 오는 함수
    	public int insert(Member member);	//	저장하는 함수
    	public int update(Member member);	//	수정하는 함수
    	public int delete(String id);		//	삭제하는 함수
    }

     

     

    그리고 MysqlMemberDAO 자바 파일을 만들 것이다. 패키지를 한 번에 생성하도록 한다.

    jdbc.db패키지에 생성한다. MysqlMemberDAO는 다음과 같이 만든다. 

     

     

    위의 JDBCService 인터페이스를 상속하는 DB들은 모두 3개로 구현할 것이다.

    메소드들을 모두 구현하자. 그런데 일단 OracleMemberDAO 만 구현할 것이다.

    나머지는 함수를 만들기만 한다.

    OracleMemberDAO부터 만들어보자.

    @Repository가 있어야 @Autowired기능이 작동한다.

    객체가 만들어지면서, setJdbctemplate 함수( set 함수 )가 동작해서 jdbctemplate 라는 데이터가 주입이 된다.

    인터페이스에는 @Repository가 없는 이유는 인터페이스는 인스턴스화할 수 없기 때문이다.

    MysqlMemberDAO.java

    더보기
    package jdbc.db;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    import jdbc.JDBCService;
    import jdbc.Member;
    
    @Repository("mysqlMemberDAO")
    public class MysqlMemberDAO implements JDBCService{
    	
    	//	DB에 접곤하기 위해서는 Connection이 필요
    	//	spring jdbc에서는 JdbcTemplate 클래스가 Connection을 해결해준다.
    	@Autowired	//	dbconfig.xml에서 생성한 객체(JdbcTemplate)를 자동으로 가지고 온다.
    	private JdbcTemplate jdbctemplate;
    	
    	public void setJdbctemplate(JdbcTemplate jdbctemplate) {this.jdbctemplate = jdbctemplate;}
    	
    	@Override
    	public int count() {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    	@Override
    	public List<Member> select() {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	@Override
    	public int insert(Member member) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    	@Override
    	public int update(Member member) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    	@Override
    	public int delete(String id) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    }

     

    그리고 OracleMemberDAO 자바 파일을 만든다. MSsqlMemberDAO 자바 파일을 만든다.

    jdbc.db 패키지에 위의 두 파일을 각 각 만들자.

    OracleMemberDAO.java 

    더보기
    package jdbc.db;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    import jdbc.JDBCService;
    import jdbc.Member;
    
    @Repository("oracleMemberDAO")	//	객체를 만들어준다. Component와 비슷하다. DB를 사용하므로 @Repository를 사용
    								//	만약 일반 클래스라면 @Component를 서비스라면 
    								//	서비스라면 @Service를 
    								//	컨트롤러라면 @Controller로 쓴다.
    public class OracleMemberDAO implements JDBCService{
    
    	//	DB에 접곤하기 위해서는 Connection이 필요
    	//	spring jdbc에서는 JdbcTemplate 클래스가 Connection을 해결해준다.
    	@Autowired	//	dbconfig.xml에서 생성한 객체(JdbcTemplate)를 자동으로 가지고 온다.
    	private JdbcTemplate jdbctemplate;
    	
    	public void setJdbctemplate(JdbcTemplate jdbctemplate) {this.jdbctemplate = jdbctemplate;}
    
    	@Override
    	public int count() 
    	{
    		String sql = "select count(*) from member";
    		int count = this.jdbctemplate.queryForObject(sql, Integer.class);
    		return count;
    	}
    	
    	@Override
    	public List<Member> select() 
    	{
    		return this.jdbctemplate.query("select id, password from member", 
    				new BeanPropertyRowMapper<Member>(jdbc.Member.class)
    				);
    	}
    
    	@Override
    	public int insert(Member member) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    	@Override
    	public int update(Member member) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    	@Override
    	public int delete(String id) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    }

     

    MSsqlMemberDAO.java

    더보기
    package jdbc.db;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    import jdbc.JDBCService;
    import jdbc.Member;
    
    @Repository("mssqlMemberDAO")
    public class MSsqlMemberDAO implements JDBCService{
    	
    	//	DB에 접곤하기 위해서는 Connection이 필요
    	//	spring jdbc에서는 JdbcTemplate 클래스가 Connection을 해결해준다.
    	@Autowired	//	dbconfig.xml에서 생성한 객체(JdbcTemplate)를 자동으로 가지고 온다.
    	private JdbcTemplate jdbctemplate;
    	
    	public void setJdbctemplate(JdbcTemplate jdbctemplate) {this.jdbctemplate = jdbctemplate;}
    	
    	@Override
    	public int count() {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    	@Override
    	public List<Member> select() {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	@Override
    	public int insert(Member member) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    	@Override
    	public int update(Member member) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    	@Override
    	public int delete(String id) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    }

     

    그리고 jdbc패키지에 Member 자바 파일을 만든다. Member는 모델의 역할을 한다.

    Member.java

    더보기
    package jdbc;
    
    public class Member {
    	String id;
    	String password;
    	
    	/*
    	 	create table member(id varchar(20), password varchar(20));
    	 	insert into member values('hong', '1234');
    	 	select * from member;
    	 	update member set password='1111' where id ='hong';
    	 	delete from member where id='hong';
    	*/
    	public Member() {}
    	
    	public Member(String id, String password) 
    	{
    		this.id = id;
    		this.password = password;
    	}
    
    	public String getId() {return id;}
    	public void setId(String id) {this.id = id;}
    	public String getPassword() {return password;}
    	public void setPassword(String password) {this.password = password;}
    
    	@Override
    	public String toString() {
    		return "Member [id=" + id + ", password=" + password + "]";
    	}
    }

     

    dbconfig.xml 파일에서 좌측하단에 Namespaces를 선택한다.

    아래와 같이 Namespaces에서 context를 체크한다. 

     

    그리고 dbconfig.xml 파일에 아래의 한 문장을 추가하자.

    <context:component-scan base-package="jdbc.db" />

    추가하는 이유는 Service클래스의 어노테이션을 스캔할 수 있어야 한다.
    그래야 메인함수에서 service객체를 가지고  올 수 있다. 

    dbconfig.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">
    
    <!-- Namespaces에서 context를 체크 해야 한다. -->
    <context:component-scan base-package="jdbc.db" />
    
    <!-- 클래스를 생성하고 나서, set메소드를 통해 데이터들을 주입한다. 
    -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    	<!-- DB연결에 필요한 정보 -->
    	<!-- setDriverClassName 함수가 있다. 매개변수 이름이  driverClassName 이다.-->
    	<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
    	<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
    	<property name="username" value="hr"></property>
    	<property name="password" value="1234"></property>
    </bean>
    
    <!-- mvc2에서 connection conn의 역할을 한다. 
    	위에서 생성한 "dataSource"가 필요하다.
    -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    	<!-- <constructor-arg><ref bean="dataSource" /></constructor-arg> -->
    	<constructor-arg ref="dataSource" />
    </bean>
    
    </beans>

     

    Main.java에서 아래의 함수를 추가한다.

    스프링에서는 테스트 환경을 제공해준다.

    무언가 잘 안되는 관계로 아래의 함수는 추가만 하고 주석처리를 한다.

    @Test
    public void dataSourceTest()
    {
    ApplicationContext context = new ClassPathXmlApplicationContext("jdbc/dbconfig.xml");
    
    DataSource ds = (DataSource)context.getBean("dataSource"); 
    
    context.getBean("dataSource");
    
    try { System.out.println(ds.getConnection()); } 
    catch (SQLException e) {	e.printStackTrace(); } }
    }

     

    Main.java

    더보기
    package jdbc;
    
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jdbc.datasource.DriverManagerDataSource;
    import org.springframework.stereotype.Repository;
    import java.util.List;
    public class Main {
    	/*
    	//@Test
    	public void dataSourceTest()
    	{
    		ApplicationContext context = new ClassPathXmlApplicationContext("jdbc/dbconfig.xml");
    		
    		 DataSource ds = (DataSource)context.getBean("dataSource"); 
    		
    		context.getBean("dataSource");
    		
    		try { System.out.println(ds.getConnection()); } 
    		catch (SQLException e) {	e.printStackTrace(); } }
    	}
    	*/
    	
    	 public static void main(String[] args) 
    	 { 
    		 ApplicationContext context = new ClassPathXmlApplicationContext("jdbc/dbconfig.xml");
    	 
    		 DataSource ds = (DataSource)context.getBean("dataSource");
    	
    		 try { System.out.println(ds.getConnection()); } 
    		 catch (SQLException e) {e.printStackTrace(); } 
    		 
    		 //	어노테이션을 사용할 때, 클래스를 스캔해야 한다. 스캔은 dbconfig.xml 파일에서 아래의 문장을 추가한다.
    		 //	<context:component-scan base-package="jdbc.db" />
    		 //	@Repository로 선언되어있어서 아래와 같이 선언해서, 객체를 얻어올 수 있다.
    		 JDBCService service = context.getBean("oracleMemberDAO",jdbc.db.OracleMemberDAO.class);
    		 
    		 System.out.println(service.count());
    		 
    		 List<Member> list = service.select();
    		 
    		 for (Member member : list)
    			 System.out.println(member.toString());
    	 }
    }

     

    그리고 Main.java에서 Java Application으로 실행을 해보자.

    만약에 콘솔 창에 다음과 같은 에러가 발생하면 DB에 테이블이 없을 가능성이 크다.

    member테이블이 없다면 생성하자.

    create table member(id varchar(20), password varchar(20));

     

    그리고 다시 실행하면 다음과 같은 콘솔 창이 뜬다.

     

    데이터를 3개 입력하고 다시 실행해보자.

    insert into member values('hong', '1234');
    insert into member values('kim', '4321');
    insert into member values('park', '5678');

     

    아래와 같은 화면이 뜬다.

     

    위에서 하지 못한 테스트과정을 해보자. Main.java 주석처리 하자. 위에 기존의 Main.java 내용이 있으므로

    main함수를 지워도 된다.

    Test애 붉은 색이 뜨는데 해결방법은 라이브러리를 임포트해주면 된다.

     

    아래와 같이 dataSourceTest함수 위의 어노테이션 Test에 마우스를 갖다대면 창이 하나 뜨는데,

    "Add JUnit 4 library to the build path"를 선택한다. 그러면 임포트가 된다.

     

    그리고 실행만 하면 되는데, Main.java에서 우클릭 해서 run as -> junit test를 선택해서 실행하면 된다.

     

    그러면 콘솔 화면 창에 다음과 같이 출력된다.

    이제부터는 메인함수 없이도 테스트를 할 수 있다.

     

     

    OracleMemberDAO에서 나머지 함수들의 내용을 구현해보자.

    OracleMemberDAO.java

    더보기
    package jdbc.db;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    import jdbc.JDBCService;
    import jdbc.Member;
    
    @Repository("oracleMemberDAO")
    public class OracleMemberDAO implements JDBCService{
    
    	//	DB에 접곤하기 위해서는 Connection이 필요
    	//	spring jdbc에서는 JdbcTemplate 클래스가 Connection을 해결해준다.
    	@Autowired	//	dbconfig.xml에서 생성한 객체(JdbcTemplate)를 자동으로 가지고 온다.
    	private JdbcTemplate jdbctemplate;
    	
    	public void setJdbctemplate(JdbcTemplate jdbctemplate) {this.jdbctemplate = jdbctemplate;}
    
    	@Override
    	public int count() 
    	{
    		String sql = "select count(*) from member";
    		int count = this.jdbctemplate.queryForObject(sql, Integer.class);
    		return count;
    	}
    	
    	@Override
    	public List<Member> select() 
    	{
    		return this.jdbctemplate.query("select id, password from member", 
    				new BeanPropertyRowMapper<Member>(jdbc.Member.class)
    				);
    	}
    
    	@Override
    	public int insert(Member member) {
    		int result = this.jdbctemplate.update(
    				"insert into member values(?,?)",member.getId(),member.getPassword()
    				);
    		
    		return result;
    	}
    
    	@Override
    	public int update(Member member) {
    		return this.jdbctemplate.update(
    				"update member set password=? where id=?",
    				member.getPassword(),member.getId()
    				);
    	}
    
    	@Override
    	public int delete(String id) {
    		return this.jdbctemplate.update(
    				"delete from member where id=?",id);
    	}
    }

     

     

    아래와 같이 insert함수를 호출해서 목록을 보자.

     

    데이터가 정상적으로 저장됨을 볼 수 있다.

     

    그리고 다음과 같이 데이터를 수정해보자.

     

    데이터의 수정이 제대로 동작한다.

     

    아래와 같이 데이터를 삭제해보자.

     

    아래와 같이 데이터의 삭제가 제대로 동작한다.

     

     

     

    아래에서 MyBatis에 대해 알아보자.

    designatedroom87.tistory.com/343

     

    Spring MVC2 - 4. MyBatis

    아래의 내용을 이어서 진행해보자. designatedroom87.tistory.com/342 Spring MVC2 - 3. Spring을 통해서 DB에 접근하기 아래의 내용과는 이어지지 않는다. designatedroom87.tistory.com/341 Maven Project를 선..

    designatedroom87.tistory.com

     

    'JAVA > 웹 프로그래밍 - Spring' 카테고리의 다른 글

    Spring MVC2 - 5. SpringMVC2  (0) 2020.12.21
    Spring MVC2 - 4. MyBatis  (0) 2020.12.18
    Spring MVC2 - 2.  (0) 2020.12.16
    Spring MVC2 - 1. 기본 설정  (0) 2020.12.15
    Annotation으로 객체(bean)을 생성하기  (0) 2020.12.14

    댓글

Designed by Tistory.