[spring 기초] OracleDB 셋팅, DB 생성 및 테이블 생성
- 프로젝트 시작 전 개발환경 세팅
sts 3.9.11 : https://integer-ji.tistory.com/52
oracle 11g : https://integer-ji.tistory.com/55
java 1.8 : https://integer-ji.tistory.com/49
Tomcat 8.5.50 : https://integer-ji.tistory.com/182
Java Package / Class 추가
src/main/java 아래에 패키지 4개를 추가해 줍니다.
com.project.service
ㄴ ProjectService
com.project.service.dao
ㄴ ProjectDAO
com.project.service.impl
ㄴ ProjectServiceImpl ( Impl 은 impL 입니다. 대소문자 주의)
com.project.vo
ㄴ ProjectVO
src/main/webapp/WEB-INF/soring/root-context.xml에 데이터베이스, MyBatis, Transaction 설정 추가
<?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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- 데이터베이스 연결 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:(개인SID)" />
<property name="username" value="system"/>
<property name="password" value="(개인비밀번호)"/>
</bean>
<!-- SqlSession -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- MyBatis 설정 파일의 위치를 지정합니다. -->
<property name="configLocation" value="classpath:/mybatis-config.xml" />
<!-- SQL 파일의 위치를 지정합니다. -->
<property name="mapperLocations" value="classpath:/mapper/*.xml" />
</bean>
<!-- SqlSession -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<!-- 지정된 베이스 패키지에서 DAO(Mapper) 를 검색하여 등록합니다. -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.project.service.dao" />
</bean>
<!-- 트랜잭션 매니저 bean 을 등록합니다. -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 아노테이션 기반의 트랜잭션을 사용합니다. -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
beans에 네임스페이스 추가
데이터베이스 연결
username - 아이디 설정한 기억이 없으면 system으로 설정됩니다.
password - 설정한 비밀번호
SqlSession
MyBatis와 SQL 파일 위치 지정 ( 아직 안만듬 )
그 외 DAO 패키지 경로 등록과 bean등 작성하여 줍니다.
mybatis-config.xml 파일 생성
src/main/resources
ㄴ mybatis-config.xml
mybatis-config.xml 내용 추가
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<typeAlias alias="projectVO" type="com.project.vo.ProjectVO"/>
</typeAliases>
</configuration>
settings에서 Camel 변환 해줍니다.
Camel이란 필드명을 쉽게 바꿔줍니다. ex) ROOT_ABC -> rootAbc ( _ )뒤에 오는 문자를 대문자로
mapper 폴더와 Tb_Project_SQL.xml 생성
src/main/resources
ㄴmapper
ㄴTb_Project_SQL.xml
Tb_Project_SQL.xml 내용 추가
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.project.service.dao.ProjectDAO">
<select id="selectProjectList" resultType="projectVO">
SELECT PRO_ID,
PRO_TITLE,
PRO_BODY,
PRO_DATE
FROM TB_PROJECT
ORDER BY PRO_ID DESC
</select>
</mapper>
resultType가 projectVO인 이유는 mybatis-config.xml에서 설정해줬기 때문
VO 클래스 생성
package com.project.vo;
import java.util.Date;
public class ProjectVO {
private Integer proId;
private String proTitle;
private String proBody;
private Date proDate;
}
시간을 가져오기 위한 util.date 추가.
여기서 카멜의 효과 디비 컬럼명 PRO_ID -> proId 변환
alt + shift + s -> Generate Getters and Setters
혹은 우클릭 -> Source -> Generate Getters and Setters 클릭
---
에러 발생
"The operation is not applicable to the current selection. Select a field which is not declared as type variavle or a type that declares such fields."
해결 방법
마우스 커서를 class 안에 넣으세요...!
해결
---
전부 체크 후 Generate
package com.project.vo;
import java.util.Date;
public class ProjectVO {
private Integer proId;
private String proTitle;
private String proBody;
private Date proDate;
public Integer getProId() {
return proId;
}
public void setProId(Integer proId) {
this.proId = proId;
}
public String getProTitle() {
return proTitle;
}
public void setProTitle(String proTitle) {
this.proTitle = proTitle;
}
public String getProBody() {
return proBody;
}
public void setProBody(String proBody) {
this.proBody = proBody;
}
public Date getProDate() {
return proDate;
}
public void setProDate(Date proDate) {
this.proDate = proDate;
}
}
DAO 인터페이스 생성
package com.project.service.dao;
import java.util.List;
import com.project.vo.ProjectVO;
public interface ProjectDAO {
List<ProjectVO> selectProjectList() throws Exception;
}
class가 아니라 interface 주의
service 인터페이스 생성
package com.project.service;
import java.util.List;
import com.project.vo.ProjectVO;
public interface ProjectService {
List<ProjectVO> selectProjectList() throws Exception;
}
class가 아니라 interface 주의
service 구현 클래스 생성
package com.project.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.project.service.ProjectService;
import com.project.service.dao.ProjectDAO;
import com.project.vo.ProjectVO;
@Service("projectService")
public class ProjectServiceImpl implements ProjectService {
@Autowired
private ProjectDAO projectMapper;
@Override
@Transactional
public List<ProjectVO> selectProjectList() throws Exception {
return projectMapper.selectProjectList();
}
}
이제 끝이 보입니당
Controller Request 추가
package com.project.controller;
import java.text.DateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.project.service.ProjectService;
import com.project.vo.ProjectVO;
/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {
@Resource(name = "projectService")
private ProjectService projectService;
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home";
}
@RequestMapping(value = "/projectList.do")
public String projectList(Model model) throws Exception {
List<ProjectVO> list = projectService.selectProjectList();
logger.info(list.toString());
model.addAttribute("list", list);
return "projectList";
}
}
view에 projectList.jsp 생성
projectList.jsp 내용 작성
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr"/>
<title>Home</title>
</head>
<body>
<h1>Project List</h1>
<table border="1">
<thead>
<tr>
<th>번호</th>
<th>제목</th>
<th>본문</th>
<th>작성일</th>
</tr>
</thead>
<tbody>
<c:forEach var="item" items="${list}">
<tr>
<td>${item.proId}</td>
<td>${item.proTitle}</td>
<td>${item.proBody}</td>
<td>${item.proDate}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
RunServer GoGo
..ㅠ
"org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'projectService' is defined"
발생..
-- 해결
base-package="com.project.controller" >>>> base-package="com.project"
controller뿐만 아니라 service도 포함되게 변경
참고 : https://okky.kr/article/291232
-- 끝
--
github commit로 마무리
github.com/integerJI/spring-crud.git
'코딩공부 > Java Spring' 카테고리의 다른 글
[spring 실습] 게시판 만들기 - 글 쓰기 기능 만들기 (0) | 2020.12.28 |
---|---|
[spring 기초] mvc project 없음 Spring Legacy Project에 아무것도 없을때 (2) | 2020.07.13 |
[spring 기초] Oracle 11g 연동, pom.xml 의존성 추가 (0) | 2020.05.17 |
[spring 기초] MVC 패턴, package구조 (0) | 2020.05.16 |
[sts 설정] git 연동, master가 없을때, git push, git commit, git pull (0) | 2020.05.16 |