티스토리 뷰

정리 노트/Spring

Spring Chapter17 [17-5]

eyoadgkn 2024. 2. 2. 15:08

데이터 베이스 연동

데이터 베이스와 테이블 생성 및 데이터 등록하기

CREATE DATABASE SPRINGMVCDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;

USE SPRINGMVCDB;

CREATE TABLE IF NOT EXISTS book(
	b_bookId VARCHAR(10) NOT NULL,
	b_name VARCHAR(30),
	b_unitPrice  INTEGER,
	b_author VARCHAR(50),
	b_description TEXT,
	b_publisher VARCHAR(20),
	b_category VARCHAR(20),
	b_unitsInStock LONG,	
	b_releaseDate VARCHAR(20),
	b_condition VARCHAR(20),
	b_fileName  VARCHAR(20),
	PRIMARY KEY (b_bookId)
)DEFAULT CHARSET=utf8;

DELETE FROM book;
INSERT INTO book VALUES('ISBN1234', 'C# 교과서', 30000,'박용준', 'C# 교과서』는 생애 첫 프로그래밍 언어로 C#을 시작하는 독자를 대상으로 한다. 특히 응용 프로그래머를 위한 C# 입문서로, C#을 사용하여 게임(유니티), 웹, 모바일, IoT 등을 개발할 때 필요한 C# 기초 문법을 익히고 기본기를 탄탄하게 다지는 것이 목적이다.','길벗','IT전문서', 1000,'2020/05/29','','ISBN1234.png');
INSERT INTO book VALUES('ISBN1235', 'Node.js 교과서', 36000, '조현영', '이 책은 프런트부터 서버, 데이터베이스, 배포까지 아우르는 광범위한 내용을 다룬다. 군더더기 없는 직관적인 설명으로 기본 개념을 확실히 이해하고, 노드의 기능과 생태계를 사용해보면서 실제로 동작하는 서버를 만들어보자. 예제와 코드는 최신 문법을 사용했고 실무에 참고하거나 당장 적용할 수 있다.','길벗','IT전문서',1000, '2020/07/25','', 'ISBN1235.png'); 
INSERT INTO book VALUES('ISBN1236', '어도비 XD CC 2020', 25000, '김두한', '어도비 XD 프로그램을 통해 UI/UX 디자인을 배우고자 하는 예비 디자이너의 눈높이에 맞게 기본적인 도구를 활용한 아이콘 디자인과 웹&앱 페이지 디자인, UI 디자인, 앱 디자인에 애니메이션과 인터랙션을 적용한 프로토타이핑을 학습합니다.', '길벗', 'IT활용서', 1000, '2019/05/29', '','ISBN1236.png');

select * from book;

 


JDBC 연동을 위한 환경 설정
pom.xml 파일에 의존 라이브러리 등록
servlet context.xml에 데이터 베이스 환경 설정

1.dataSource 설정

2.JdbcTemplate 빈 등록하기

3.저장소 객체에서 JdbcTemplate 클래스 사용하기

 


JDBC 연동을 위한 환경 설정하기

 

pom.xml

  <!-- MySQL -->
     <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${org.springframework-version}</version>
     </dependency>
     <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-dbcp2</artifactId>
        <version>2.5.0</version>
     </dependency>
     <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.24</version>
     </dependency>

servlet-context.xml

<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
         <beans:property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
         <beans:property name="url" value="jdbc:mysql://localhost:3306/springmvcdb?serverTimezone=UTC"/>
         <beans:property name="username" value="root"/>
         <beans:property name="password" value="1234"/>
  </beans:bean>
  
  <beans:bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
   <beans:property name="dataSource" ref="dataSource"/>  
  </beans:bean>

BookRepositoryImpl.java

private JdbcTemplate template;
	
	@Autowired
	public void setJdbctemplate(DataSource dataSource)
	{
		this.template = new JdbcTemplate(dataSource);
	}

데이터 검색
queryForObject() 메서드
queryForList() 메서드
query() 메서드

CRUD 메서드를 사용해 도서 목록 조회하기

Book.java

private String fileName;
	
	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

Book.RowMapper.java

package com.springmvc.repository;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

import com.springmvc.domain.Book;

public class BookRowMapper implements RowMapper<Book>{

	public Book mapRow(ResultSet rs, int rowNum) throws SQLException
	{
		Book book = new Book();
		book.setBookId(rs.getString(1));
		book.setName(rs.getString(2));
		book.setUnitPrice(rs.getInt(3));
		book.setAuthor(rs.getString(4));
		book.setDescription(rs.getString(5));
		book.setPublisher(rs.getString(6));
		book.setCategory(rs.getString(7));
		book.setUnitsInStock(rs.getLong(8));
		book.setReleaseDate(rs.getString(9));
		book.setCondition(rs.getString(10));
		book.setFileName(rs.getString(11));
		return book;
	}
}

BookRepositoryImpl.java

package com.springmvc.repository;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import com.springmvc.domain.Book;
import com.springmvc.exception.BookIdException;

@Repository
public class BookRepositoryImpl implements BookRepository {

	private JdbcTemplate template;
	
	@Autowired
	public void setJdbctemplate(DataSource dataSource)
	{
		this.template = new JdbcTemplate(dataSource);
	}
	
	private List<Book> listOfBooks = new ArrayList<Book>();
	
	@Override
	public List<Book> getAllBookList() {
		String SQL = "SELECT * FROM book";
		List<Book> listOfBooks = template.query(SQL, new BookRowMapper());
		return listOfBooks;
	}
	
    public BookRepositoryImpl() {  
        Book book1 = new Book("ISBN1234", "C# 교과서", 30000);
        book1.setAuthor("박용준");
        book1.setDescription(
                "C# 교과서』는 생애 첫 프로그래밍 언어로 C#을 시작하는 독자를 대상으로 한다. 특히 응용 프로그래머를 위한 C# 입문서로, C#을 사용하여 게임(유니티), 웹, 모바일, IoT 등을 개발할 때 필요한 C# 기초 문법을 익히고 기본기를 탄탄하게 다지는 것이 목적이다.");
        book1.setPublisher("길벗");
        book1.setCategory("IT전문서");
        book1.setUnitsInStock(1000);
        book1.setReleaseDate("2020/05/29");
        Book book2 = new Book("ISBN1235", "Node.js 교과서", 36000);
        book2.setAuthor("조현영");
        book2.setDescription(
                "이 책은 프런트부터 서버, 데이터베이스, 배포까지 아우르는 광범위한 내용을 다룬다. 군더더기 없는 직관적인 설명으로 기본 개념을 확실히 이해하고, 노드의 기능과 생태계를 사용해보면서 실제로 동작하는 서버를 만들어보자. 예제와 코드는 최신 문법을 사용했고 실무에 참고하거나 당장 적용할 수 있다.");
        book2.setPublisher("길벗");
        book2.setCategory("IT전문서");
        book2.setUnitsInStock(1000);
        book2.setReleaseDate("2020/07/25");
        Book book3 = new Book("ISBN1236", "어도비 XD CC 2020", 25000);
        book3.setAuthor("김두한");
        book3.setDescription(
                "어도비 XD 프로그램을 통해 UI/UX 디자인을 배우고자 하는 예비 디자이너의 눈높이에 맞게 기본적인 도구를 활용한 아이콘 디자인과 웹&앱 페이지 디자인, UI 디자인, 앱 디자인에 애니메이션과 인터랙션을 적용한 프로토타이핑을 학습합니다.");
        book3.setPublisher("길벗");
        book3.setCategory("IT활용서");
        book3.setUnitsInStock(1000);
        book3.setReleaseDate("2019/05/29");

        listOfBooks.add(book1);
        listOfBooks.add(book2);
        listOfBooks.add(book3);
    
   }

	@Override
	public List<Book> getBookListByCategory(String category) {
		// TODO Auto-generated method stub
		
		List<Book> booksByCategory = new ArrayList<Book>();
		

		String SQL = "SELECT * from book where b_category like '%" + category + "%'";
		booksByCategory = template.query(SQL, new BookRowMapper());
		return booksByCategory;
	}

	@Override
		
		Set<String> criterias = filter.keySet();
		if(criterias.contains("publisher"))
		{
			for(int j = 0; j<filter.get("pulbisher").size();j++ )
			{
				String publisherName = filter.get("publisher").get(j);
				String SQL = "SELECT * FROM book where b_publisher LIKE '%"+ publisherName + "%' ";
				booksByPublisher.addAll(template.query(SQL, new BookRowMapper()));
			}
		}
		
		if(criterias.contains("category"))
		{
			for(int i = 0; i<filter.get("category").size();i++ )
			{
				String category = filter.get("category").get(i);
				String SQL = "SELECT * FROM book where b_publisher LIKE '%"+ category + "%' ";
				booksByCategory.addAll(template.query(SQL, new BookRowMapper()));
			}
		}
		
		booksByCategory.retainAll(booksByPublisher);
		
		return booksByCategory;
	}

	
	@Override
	public Book getBookById(String bookId) {
		// TODO Auto-generated method stub
		Book bookInfo = null;

		String SQL = "select count(*) from book where b_bookId=?";
		int rowCount = template.queryForObject(SQL,Integer.class, bookId);
		if(rowCount !=0)
		{
			SQL = "select * from book where b_bookId";
			bookInfo = template.queryForObject(SQL, new Object[] {bookId}, new BookRowMapper());
		}
	

		if(bookInfo == null)
			throw new BookIdException(bookId);
		return bookInfo;
	}
		


	@Override
	public void setNewBook(Book book) {
		// TODO Auto-generated method stub
		listOfBooks.add(book);
		
	}

    
}

book.jsp / books.jsp 

				//book.jsp
                <%--  <img src="<c:url value="/resources/images/${book.getBookId() }.png"/>"style="width:100%"/> --%>
                  <img src="<c:url value="/resources/images/${book.fileName }" />" style="width: 100%"/>
                  //books.jsp
                  	                     <%-- <img src="<c:url value="/resources/images/${book.bookId}.png"/>" style="width:60%"/> --%>
	               <img src="<c:url value="/resources/images/${book.fileName }" />" style="width: 60%"/>

 

'정리 노트 > Spring' 카테고리의 다른 글

SQL2  (0) 2024.02.07
Spring Chapter17 [18-1]  (0) 2024.02.05
Spring[17-4]  (0) 2024.02.01
Spring Chapter14-Chapter15 [17-3]  (0) 2024.01.31
Spring JSON [17-2]  (0) 2024.01.30
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함