src/main/resources
에서 application.properteis
에 다음의 내용을 추가# tomcat port setting
server.port=8081
# JSP
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
# Datasource setting
spring.datasource.hikari.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.hikari.jdbc-url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.hikari.username=scott
spring.datasource.hikari.password=tiger
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
# 클라이언트가 pool에 connection을 요청하는 데 기다리는 최대 시간을 30초로 설정
spring.datasource.hikari.connection-timeout=30000
# 유휴 및 사용 중인 connection을 포함하여 pool에 보관하는 최대 커넥션 개수를 설정
spring.datasource.hikari.maximum-pool-size=20
# 메시지 파일 지정
spring.messages.basename=messages.validation
# JSP reload
spring.devtools.livereload.enabled=true
# MyBatis setting
mybatis.mapper-locations=classpath:mybatis/mapper/**/*.xml
mybatis.type-aliases-package=kr.spring.**.vo
src/main/java
에 새 패키지 kr.spring.config
생성하고 새 클래스 AppConfig
생성package kr.spring.config;
import javax.sql.DataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Configuration
public class AppConfig {
@Bean
/*
* *.properties, *.yml 파일에 있는 property를 자바 클래스에 값을 가져와서 사용할 수 있도록 처리
*/
@ConfigurationProperties(prefix="spring.datasource.hikari")
public HikariConfig hikariConfig() {
return new HikariConfig();
}
@Bean
public DataSource dataSource() {
DataSource dataSource = new HikariDataSource(hikariConfig());
return dataSource;
}
}
src/main
폴더 오른쪽 클릭하고 하위 폴더로 webapp
생성 후 하위 폴더로 WEB-INF
생성C:\javaWork\workspace_spring\ch07MybatisAnnot\src\main\webapp\WEB-INF
에서 views
폴더를 복사하여 현재 프로젝트에 붙여넣기src/main/resources
폴더 오른쪽 클릭하고 새 폴더 messages
생성 후 새 파일 validation.properties
생성NotEmpty.name=이름은 필수 항목
NotEmpty.title=제목은 필수 항목
NotEmpty.passwd=비밀번호는 필수 항목
NotEmpty.content=내용은 필수 항목
invalidPassword=비밀번호 불일치
src/main/resources/static
폴더 오른쪽 클릭하고 새 폴더 css
생성C:\javaWork\workspace_spring\ch07MybatisAnnot\src\main\webapp\resources\css
에서 style.css
파일을 복사하여 현재 프로젝트에 붙여넣기views
폴더 내 모든 JSP 파일에서 <link>
태그의 경로를 다음처럼 수정<link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css">
kr.spring.util
생성C:\javaWork\workspace_spring\ch07MybatisAnnot\src\main\java\kr\spring\util
에서 PagingUtil.java
파일을 복사하여 붙여넣기application.properties
파일의 확장자에 _
를 붙여 설정 파일로 인식되지 않도록 처리
.properties
와 .yml
이 모두 있는 경우 둘 다 인식하지만, 같은 항목에 값이 다른 경우 문제가 발생할 수 있음src/main/resources
폴더 오른쪽 클릭하고 application.yml
생성spring:
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
datasource:
type: com.zaxxer.hikari.HikariDataSource
hikari:
driver-class-name: oracle.jdbc.OracleDriver
jdbc-url: jdbc:oracle:thin:@localhost:1521:xe
username: scott
password: tiger
connection-timeout: 30000
maximum-pool-size: 20
messages:
basename: messages.validation
encoding: UTF-8
devtools:
livereload:
enabled: true
mybatis:
type-aliases-package: kr.spring.**.vo
mapper-locations: mybatis/mapper/**/*.xml
server:
port: 8081
kr.spring.vo
생성하고 BoardVO
생성package kr.spring.board.vo;
import java.sql.Date;
import javax.validation.constraints.NotEmpty;
public class BoardVO {
private int num;
@NotEmpty
private String name;
@NotEmpty
private String title;
@NotEmpty
private String passwd;
@NotEmpty
private String content;
private Date reg_date;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getReg_date() {
return reg_date;
}
public void setReg_date(Date reg_date) {
this.reg_date = reg_date;
}
}
kr.spring.board.dao
생성하고 새 인터페이스 BoardMapper
생성package kr.spring.board.dao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import kr.spring.board.vo.BoardVO;
@Mapper // @Mapper 어노테이션이 있어야 구현되는 객체를 서비스에서 인식 가능
public interface BoardMapper {
public void insertBoard(BoardVO board);
@Select("SELECT COUNT(*) FROM tboard")
public int getBoardCount();
public List<BoardVO> getBoardList(Map<String, Object> map);
@Select("SELECT * FROM tboard WHERE num=#{num}")
public BoardVO getBoard(int num);
@Update("UPDATE tboard SET name=#{name}, title=#{title}, content=#{content} WHERE num=#{num}")
public void updateBoard(BoardVO board);
@Delete("DELETE FROM tboard WHERE num=#{num}")
public void deleteBoard(int num);
}
src/main/resources
폴더 오른쪽 클릭하고 새 폴더 mybatis
생성 후 하위 폴더로 mapper
생성C:\javaWork\workspace_spring\ch07MybatisAnnot\src\main\java\kr\spring\board\dao
에서 BoardMapper.xml
파일을 복사하여 붙여넣기kr.spring.board.service
생성하고 새 인터페이스 BoardService
생성package kr.spring.board.service;
import java.util.List;
import java.util.Map;
import kr.spring.board.vo.BoardVO;
public interface BoardService {
public void insertBoard(BoardVO board);
public int getBoardCount();
public List<BoardVO> getBoardList(Map<String, Object> map);
public BoardVO getBoard(int num);
public void updateBoard(BoardVO board);
public void deleteBoard(int num);
}
BoardServiceImpl
생성package kr.spring.board.service;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import kr.spring.board.dao.BoardMapper;
import kr.spring.board.vo.BoardVO;
@Service
@Transactional
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardMapper boardMapper;
@Override
public void insertBoard(BoardVO board) {
boardMapper.insertBoard(board);
}
@Override
public int getBoardCount() {
return boardMapper.getBoardCount();
}
@Override
public List<BoardVO> getBoardList(Map<String, Object> map) {
return boardMapper.getBoardList(map);
}
@Override
public BoardVO getBoard(int num) {
return boardMapper.getBoard(num);
}
@Override
public void updateBoard(BoardVO board) {
boardMapper.updateBoard(board);
}
@Override
public void deleteBoard(int num) {
boardMapper.deleteBoard(num);
}
}
kr.spring.board.controller
생성C:\javaWork\workspace_spring\ch07MybatisAnnot\src\main\java\kr\spring\board\controller
에서 BoardController.java
파일을 복사하여 붙여넣기BoardController
클래스에 다음의 메서드를 추가 @RequestMapping("/")
public String main() {
return "redirect:/list.do";
}
https://www.python.org/downloads
C:/javaWork
에 새 폴더 workspace_python
생성C:\javaWork\workspace_python
선택python
검색 후 PyDev
를 설치ch01-basic
입력 후 Finishs01_print.py
생성# 출력하기
# 주석 : #은 한 줄 주석, """와 '''는 주석
"""
여러 줄
주석
"""
'''
여러 줄
주석
'''
# 문자열 출력
print("Hello World"); # 출력 후 줄바꿈
print('오늘은 목요일') # 파이썬에서는 일반적으로 세미콜론을 생략하며, 문자와 문자열을 구별하지 않고 '와 "를 모두 사용 가능
# 정수 출력
print(35)
# 실수 출력
print(5.75)
# 논리 데이터 출력
print(True)
print(False)
s02_variable.py
생성# 변수의 사용
a = 1
b = 2
print(a,b) # 줄바꿈하지 않고 공백을 구분자로 하여 변수 2개를 한 줄에 출력
print('---')
# 연산
print(a+b)
print('---')
# 문자열 + 문자열 = 문자열
print('대한' + '민국')
print('---')
# 숫자 + 문자열은 오류 발생
# print(5 + '10')
# 숫자를 문자열로 변환
print(str(5) + '10')
print('---')
s03_variable2.py
생성# 변수명은 대소문자를 구분하고 숫자로 시작 불가
# 특수문자와 공백은 변수명에 사용할 수 없음
friend = 5
Friend = 6
print(friend,Friend)
print('---')
# 출력시 공백이 아닌 다른 문자를 구분자로 사용하고 싶은 경우 sep 인수에 원하는 문자를 지정
print(friend,Friend,sep=",")
s = '서울'
i = '인천'
j = '전주'
b = '부산'
# 출력시 끝 문자로 개행 문자 외에 다른 문자를 사용하고 싶은 경우 end 인수에 원하는 문자를 지정
# print(출력 내용 [,sep=구분자] [,end=끝 문자])
print(s,i,j,b,sep='-->',end='^^')
print('---')