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>
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 |