[spring] - OracleDB 연동 게시판 만들기
[spring] - OracleDB 연동 게시판 만들기
Java Spring OracleDB 연동하기
- 개발환경 세팅 -
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/51
QueryBox 설치 & OracleDB 연동 : https://integer-ji.tistory.com/55
- 출처 및 도움 및 참고 -
https://offbyone.tistory.com/18
데이터 베이스 편집기를 이용한 테이블 생성
CREATE TABLE TB_PROJECT ( PRO_ID NUMBER(10) PRIMARY KEY, PRO_TITLE VARCHAR2(50) NOT NULL, PRO_BODY VARCHAR2(200) NOT NULL, PRO_DATE DATE NOT NULL ); INSERT INTO TB_PROJECT VALUES (1, '첫 글 제목','첫 글 본문', SYSDATE); INSERT INTO TB_PROJECT VALUES (2, '두번째 제목','두번째 본문', SYSDATE); INSERT INTO TB_PROJECT VALUES (3, '삼삼삼','삼삼본삼문', SYSDATE); SELECT * FROM TB_PROJECT;
TB_PROJECT라는 테이블을 하나 만듭니다.
PRO_ID라는 기본키를 가지고 있으며
PRO_TITLE 제목
PRO_BODY 본문
PRO_DATE 시간 값을 가지고 있으며
글을 쓸때 마다 PRO_DATE에 시간이 자동으로 입력되고 ID값이 증가되는
게시물을 만들것입니다.
먼저 리스트를 뽑기 위해 값을 여러 개 넣어줬습니다.
pom.xml 파일에 필요한 의존성을 추가
oracle http://maven.jahia.org/maven2 org.springframework spring-jdbc ${org.springframework-version} commons-dbcp commons-dbcp 1.4 com.oracle ojdbc7 12.1.0.2 org.mybatis mybatis 3.4.1 org.mybatis mybatis-spring 1.3.0
뭐든지 설정이 제일 어렵네요 주석에 따라 properties 시작 전에 repositories를 넣어주시고
dependencies안에 dependency를 넣어주세요. ( 자세히 보면 dependencies랑 dependency랑 다릅니다. )
( 라이브러리 검색 http://search.maven.org )
그리고 프로젝트 우클릭 -> Maven -> Update Project... 클릭해줍니다.
Force Update of Snapshots/Releases 체크해주시고 Update 진행
출처 및 참고 :
https://stove99.tistory.com/25
https://offbyone.tistory.com/18
Java Package / Class 추가
src/main/java 아래에 패키지 4개를 추가해 줍니다.
com.project.service
ㄴ ProjectService
com.project.service.dao
ㄴ ProjectDAO
com.project.service.inpl
ㄴ ProjectServiceImpl ( Impl 은 impL 입니다. 대소문자 주의)
com.project.vo
ㄴ ProjectVO
root-context.xml 데이터베이스, MyBatis, Transaction 설정 추가
beans에 네임스페이스 추가
데이터베이스 연결
username - 아이디 설정한 기억이 없으면 system으로 설정됩니다.
password - 설정한 비밀번호
SqlSession
MyBatis와 SQL 파일 위치 지정 ( 아직 안만듬 )
그 외 DAO 패키지 경로 등록과 bean등 작성하여 줍니다.
mybatis -config.xml 파일 생성
src/main/resources
ㄴ mybatis-config.xml
mybatis-config.xml 내용 추가
settings에서 Camel 변환 해줍니다.
Camel이란 필드명을 쉽게 바꿔줍니다. ex) ROOT_ABC -> rootAbc ( _ )뒤에 오는 문자를 대문자로
mapper 폴더와 Tb_Project_SQL.xml 생성
src/main/resources
ㄴmapper
ㄴTb_Project_SQL.xml
Tb_Project_SQL.xml 내용 추가
SELECT PRO_ID, PRO_TITLE, PRO_BODY, PRO_DATE FROM TB_PROJECT ORDER BY PRO_ID DESC
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 selectProjectList() throws Exception; }
class가 아니라 interface 주의
service 인터페이스 생성
package com.project.service; import java.util.List; import com.project.vo.ProjectVO; public interface ProjectService { List 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 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 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" %> Home Project List 번호 제목 본문 작성일 ${item.proId} ${item.proTitle} ${item.proBody} ${item.proDate}
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로 마무리
https://github.com/integerJI/springproject
분량이 너무 많이 수정중에 있습니다.
깔끔하게 정리해서 재업로드 예정
from http://integer-ji.tistory.com/74 by ccl(A)
댓글
댓글 쓰기