상세 컨텐츠

본문 제목

Oracle과 SpringBoot

JAVA/Spring

by 영공쁘이 2021. 8. 28. 16:15

본문

1. oracle 권한 주는 법


  1) sqlplus system/12345  관리자 모드로 접속

  2) @C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\scott.sql (2번 하기)

  3) ctrl + C  

  4) sqlplus system/12345  < 관리자 모드로 재접속 >

  5) alter user scott account unlock;  <사용자 계정 unlock하고 >

  6) alter user scott identified by tiger; < 암호 지정 >

  7) ctrl + C

 

c:\>sqlplus scott
Enter password:tiger


 

2. oracle create table하는 법


oracle에는 auto_increment 기능이 없다. 그래서 코드 상에서 해주어야 하고, 날짜 타입은 timestamp 만 있다.

아래와 같은 형식의 테이블을 완성하였다.

create table board(
	 num number(4) not null,
	 writer varchar2(10),
	 title varchar2(10),
	 contents varchar2(100),
	 regdate date,
	 hit number(3),
	 grp number(3),
	 step number(3),
	 indent number(3)
);

3. Spring Boot에서의 순서 및 의미


1. 스프링 부트에서 mybatis를 사용할 수 있게 만든 설정 부분

package com.example.memboard;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;

@SpringBootApplication
public class MemboardApplication {

	public static void main(String[] args) {
		SpringApplication.run(MemboardApplication.class, args);
	}//main-end

	//SqlSessionFactory 설정
	@Bean
	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{
		
		SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
		
		sqlSessionFactoryBean.setDataSource(dataSource);
		
		return  sqlSessionFactoryBean.getObject();
	}
	
	//@Bean : 스프링에 필요한 객체를 생성
	//sqlSessionFactory() : MyBatis의 sqlSessionFactory를 반환한다
	//스프링 부트가 실행될 때 dataSource객체를 이 메서드 실행시 주입해서 결과를 만들고
	// 그 결과를 스프링내 빈으로 사용하게 된다 
	
}//class-end

2. application.properties : 필요한 기본 설정을 세팅하는 곳

#웹서버
server.port:8989
spring.mvc.view.prefix=/WEB-INF/views
spring.mvc.view.suffix=.jsp
#백앤드
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=scott
spring.datasource.password=tiger
#그림파일
spring.mvc.static-path-pattern=/static/**
#spring.resources.static-locations=classpath:/static/ 경고 나옴
spring.web.resources.static-locations=classpath:/static/
#spring.resources.static-locations=classpath:/static-test/
spring.web.resources.add-mappings=true
#spring.resources.static-locations=classpath:/mystatic/,file:/shared/mystatic/

3. 인터페이스 설정 : 향후 상속을 하고자 할 때 여기서 선언함으로써 다형성을 만족시킬 수 있도록 하는 곳

package com.example.yspj.mapper;

import java.util.List;
import java.util.Map;

import com.example.yspj.dto.BoardDTO;

public interface IBoardMapper {

		//최대 글번호
		public Integer numMax();
		//답글위치 확보
		public void reStep(BoardDTO boardDTO);
		//글쓰기 , 답글쓰기
		public void insertDao(BoardDTO boardDTO);
		//글 갯수
		public int countDao();

		//리스트
		public List listDao(Map map);

		//조회수 증가
		public void readcountDao(int num);
		//글내용 보기 , 글 수정 폼
		public BoardDTO viewForm(int num);
		//DB글수정
		public void updateDao(BoardDTO boardDTO);
		//글 삭제
	     public void deleteDao(int num);
	
}

이는, Sts에서 비춰봤을 때, board.xml을 위한 함수 명만 선언하는 곳

(앞으로 이것은 spring boot내에서 boardMapper.xml에서 쓸 예정이다.) 

 

그리고 예전에 mvc 패턴에서도 먼저 이렇게 선언을 하고 businesspart로 서비스하는 경우가 있었다.


 

4. 서비스 설정하기 : 여기서는, 인터페이스에서 사용하는 함수에 대해, 리턴값을 mapper 데이터로 할 수 있게 만드는 곳

package com.example.memboard.service;

import java.util.List;
import java.util.Map;
import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.example.memboard.dto.BoardDTO;
import com.example.memboard.mapper.BoardMapper;

@Service("com.example.memboard.service.BoardService")
public class BoardService {
	@Resource(name="com.example.memboard.mapper.BoardMapper")
	BoardMapper boardMapper;
	
	 //최대 글번호
    public Integer numMax() throws Exception{
          return boardMapper.numMax();
    }

    //답글위치 확보
    public void reStep(BoardDTO boardDTO) throws Exception{
         boardMapper.reStep(boardDTO);
    }

    //글쓰기 , 답글쓰기
    public void insertDao(BoardDTO boardDTO) throws Exception{
          boardMapper.insertDao(boardDTO);
    }

    //글 갯수
    public int countDao() throws Exception{
          return boardMapper.countDao();
    }

    //리스트
    public List listDao(Map map) throws Exception{
          return boardMapper.listDao(map);
    }

    //조회수 증가
    public void readcountDao(int num) throws Exception{
          boardMapper.readcountDao(num);
    }

    //글내용 보기 , 글 수정
    public BoardDTO getBoard(int num) throws Exception{
          return boardMapper.getBoard(num);
    }

    //DB글수정
    public void updateDao(BoardDTO boardDTO) throws Exception{
          boardMapper.updateDao(boardDTO);
    }

    //글 삭제
    public void deleteDao(int num) throws Exception{
         boardMapper.deleteDao(num);      
    }
	
	
}

boardMapper를 리소스로 놓고, 각각의 서비스에 대해 다음과 같은 일을 수행하도록 서비스하는 곳이다.

DAO를 쓸 수 있고 Mapper를 끌어온다.


5. BoardMapper.xml : 실질적인 Dao 역할을 하는 곳으로,

미리 IBoardMapper에서 선언했던 것을 oracle(지금은)에 적용될 수 있도록 하는 곳이다.

<?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.example.memboard.mapper.BoardMapper">
 
 <!-- 최대 글 번호 얻기 -->
  <select id="numMax" resultType="int">
  	select max(num) from board
  </select>
  <!-- 답글위치 확보 -->
  <update id="reStep" parameterType="com.example.memboard.dto.BoardDTO">
  	 update board set re_step=re_step+1 where ref=#{ref} and re_step>#{re_step}
  </update>
  
  <!-- 글쓰기 , 답글쓰기 -->
  <insert id="insertDao" parameterType="com.example.memboard.dto.BoardDTO">
  	insert into board(writer,subject,pw,regdate,ref,re_step,re_level,content,ip) values(#{writer},#{subject},#{pw},NOW(),#{ref},#{re_step},#{re_level},#{content},#{ip})
  </insert>
  
  <!-- 글 갯수 -->
  <select id="countDao" resultType="int">
  	select count(*) from board 
  </select>
  
  <!-- 리스트 -->
  <select id="listDao" parameterType="java.util.Map" resultType="com.example.memboard.dto.BoardDTO">
  	select * from board order by ref desc, re_step asc limit #{start},#{cnt}
  </select>
  
  <!-- 조회수 증가 -->
  <update id="readcountDao" parameterType="int">
  	update board set readcount=readcount+1 where num=#{num}
  </update>
  
  <!-- 글 내용 보기, 수정 폼 -->
  <select id="getBoard" parameterType="int" resultType="com.example.memboard.dto.BoardDTO">
  	select * from board where num=#{num}
  </select>
  
  <!-- DB글 수정 -->
  <update id="updateDao" parameterType="com.example.memboard.dto.BoardDTO">
  	update board set writer=#{writer},subject=#{subject},content=#{content} where num=#{num} and pw=#{pw}
  </update>
  
  <!-- 글 삭제 -->
  <delete id="deleteDao" parameterType="int">
  	delete from board where num=#{num}
  </delete>
</mapper>

'JAVA > Spring' 카테고리의 다른 글

Rest api, json  (0) 2021.12.08
VO DTO DAO  (0) 2021.12.08
형상관리 및 was  (0) 2021.08.24
Annotaion 총 정리(프로젝트에서 사용한 것 기준)  (0) 2021.08.17
sts를 이용한 board 뷰들  (0) 2021.08.09

관련글 더보기