스프링

 

@Autowired ( 스프링 자동 주입 기능 ) 

설정하는 빈의 개수가 증가하면 한 개의 클래스 파일에 설정하는 것보다 영역별로 설정 파일을 나누면 관리가 편해짐

스프링은 한 개 이상의 설정 파일을 이용해서 컨테이너를 생성할 수있다. 

 

장점은 AppConf2에 주석 처리한 세터 메서드를 사용해서 의존 주입을 하지 않아도 스프링 컨테이너가 @Autowired를

붙인 필드에 자동으로 해당 타입의 빈 객체를 주입 한다. ( 세터 자동 주입 ) 

 

 

AppConf1

package config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import spring.MemberDao;
import spring.MemberPrinter;

@Configuration
public class AppConf1 {

	@Bean
	public MemberDao memberDao() {
		return new MemberDao();
	}
	
	@Bean
	public MemberPrinter memberPrinter() {
		return new MemberPrinter();
	}

	
}

 

AppConf2

package config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import spring.ChangePasswordService;
import spring.MemberDao;
import spring.MemberInfoPrinter;
import spring.MemberListPrinter;
import spring.MemberPrinter;
import spring.MemberRegisterService;
import spring.VersionPrinter;


@Configuration
public class AppConf2 {
	
	@Autowired
	private MemberDao memberDao;
	@Autowired
	private MemberPrinter memberPrinter;
	
	@Bean
	public MemberRegisterService memberRegSvc() {
		return new MemberRegisterService(memberDao);
	}
	
	@Bean
	public ChangePasswordService changePasswordService() {
		ChangePasswordService pwdSvc = new ChangePasswordService();
		pwdSvc.setMemberDao(memberDao);
		return pwdSvc;
	}
	
	@Bean
	MemberListPrinter listPrinter() {
		return new MemberListPrinter(memberDao, memberPrinter);
		
	}
	
	@Bean
	public MemberInfoPrinter infoPrinter() {
		MemberInfoPrinter infoPrinter = new MemberInfoPrinter();
//		infoPrinter.setMemberDao(memberDao);
//		infoPrinter.setPrinter(memberPrinter);
		return infoPrinter;
	}
	
	@Bean
	public VersionPrinter versionPrinter() {
		VersionPrinter versionPrinter = new VersionPrinter();
		versionPrinter.setMajorVersion(5);
		versionPrinter.setMinorVersion(0);
		return versionPrinter;
	}

}

 

 

설정 클래스가 두 개 이상일 때 스프링 컨테이너를 생성하는 코드

ctx = new AnnotationConfigApplicationContext(AppConf1.class, AppConf2.class);

 

 

 

 

@import 애노테이션 사용

두 개이상의 설정 파일을 사용하는 또 다른 방법은 해당 애노테이션을 사용하는 것 이다. 

 

package config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

import spring.MemberDao;
import spring.MemberPrinter;

@Configuration
@Import(AppConf2.class)
public class AppConfImport {
	
	@Bean
	public MemberDao memberDao() {
		return new MemberDao();
	}
	
	@Bean
	public MemberPrinter memberPrinter() {
		return new MemberPrinter();
	
		
	}
}

 

 

ctx = new AnnotationConfigApplicationContext(AppConfImport.class);

 

 

 

 

 

오라클

 

뷰(view) : 가상 테이블

목적

편리성 : SELECT문의 복잡도를 완화하기 위해 사용

보안성 : 테이블의 특정 열을 노출하고 싶지 않을 경우

 

 

 

뷰 생성

create view vw_view20
 as (select empno, ename, job, deptno
            from emp
        where deptno = 20 );

조인(join) 후 뷰 생성 

 

create view test_view
as
select empno, ename, job, sal, d.deptno, loc
 from emp_temp e, dept_temp d
 where e.deptno = d.deptno;

 

 

 

ROWNUM ( 테이블에 저장된 행 번호 붙혀서 출력 )

select rownum, ename, empno
 from emp

 

ROWNUM ( 인라인 뷰 ) 서브쿼리 사용 

select rownum, e.*
 from (select *
         from emp
          order by sal desc) e

 

 

ROWNUM ( 인라인 뷰 ) WITH절 사용

with e as (select * from emp order by sal desc)
select rownum, e.*
 from e

 

 

인라인 뷰로 TOP-N 추출하기 ( 서브쿼리 사용 ) 급여가 높은 상위 3명 출력 

select rownum, e.*
 from ( select *
        from emp
         ORDER by sal desc ) e
         where ROWNUM <= 3

 

 

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-07-31 52일차  (0) 2023.07.31
2023-07-28 51일차  (0) 2023.07.28
2023-07-26 49일차  (0) 2023.07.26
2023-07-25 48일차  (0) 2023.07.25
2023-07-24 47일차  (0) 2023.07.24

 

스프링

 

Service(인터페이스), Servicelmpl(인터페이스 구현) 활용해서 Main, Swing 실습

 

스프링 설정 클래스 @Bean

package config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import dao.BoardDao;
import service.BoardServiceImpl;

@Configuration
public class AppCtx {
	
	@Bean
	public BoardDao boardDao() {
		return new BoardDao();
	}
	
	
	//@Bean // 세터방식
//	public BoardServiceImpl boardservice() {
//		BoardServiceImpl boardservice = new BoardServiceImpl();
//		boardservice.setBoardDao(boardDao());
//		return boardservice;
//	}
	
	@Bean // 생성자 방식
	public BoardServiceImpl boardservice() {
		BoardServiceImpl boardservice = new BoardServiceImpl(boardDao());
		return boardservice;
	}
	
}

 

Service ( 인터페이스 )

package service;

import java.util.ArrayList;

import dao.BoardDto;

public interface BoardService {
	ArrayList<BoardDto> findAll();
	BoardDto findOne(Long num, boolean incHits);
	void saveOne(BoardDto dto);
	void modifyOne(BoardDto dto);
	void cancelOne(Long num);
	boolean hasArticle(Long num);
}

 

ServiceImpl ( 구현 )

package service;

import java.util.ArrayList;

import dao.BoardDao;
import dao.BoardDto;

public class BoardServiceImpl implements BoardService {
	
	// 스프링 설정 클래스에서 생성자 생성했으니 생성자 생성 필요 없음
	BoardDao boardDao;
	
	
	// 세터
	public void setBoardDao(BoardDao boardDao) {
		this.boardDao = boardDao;
	}
	
	
	
	// 생성자방식 ( 의존 객체 주입 )
	public BoardServiceImpl(BoardDao boardDao) {
		super();
		// 주입 받은 객체를 필드에 할당
		this.boardDao = boardDao;
	}




	@Override
	public ArrayList<BoardDto> findAll() {
		return boardDao.selectList();
	}

	@Override
	public BoardDto findOne(Long num, boolean incHits) {
		if (incHits) {
			boardDao.updateHits(num);
		}
		return boardDao.selectOne(num, incHits);
	}

	@Override
	public void saveOne(BoardDto dto) {
		boardDao.insertOne(dto);
		
	}

	@Override
	public void modifyOne(BoardDto dto) {
		boardDao.updateOne(dto);
		
	}

	@Override
	public void cancelOne(Long num) {
		boardDao.deleteOne(num);
		
	}



	@Override
	// 게시물 번호를 매개변수로 받아서 해당 번호에 해당하는 게시물이 데이터베이스에 존재하는지 확인
	public boolean hasArticle(Long num) {
		// 주어진 게시물 번호를 가진 게시물을 데이터베이스에서 검색하고 그 결과를 Dto로 반환
		// false로 조회 시 조회수를 증가시키지않게 설정
		BoardDto dto = boardDao.selectOne(num, false);
		if(dto == null) {
			return false;
		}
		//조회 결과(Dto)가 null이 아니라면 해당 게시물이 데이터베이스에 존재하는 것을 의미
		return true;
	}



}

 

Main.java ( 실행 )

package main;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import config.AppCtx;
import dao.BoardDto;
import service.BoardService;
import service.BoardServiceImpl;


public class MainForSpring {

	private static ApplicationContext ctx = null;
	
	public static void main(String[] args) throws IOException {
		ctx = new AnnotationConfigApplicationContext(AppCtx.class);
		
		BufferedReader reader = 
				new BufferedReader(new InputStreamReader(System.in));
		while (true) {
			System.out.println("명령어를 입력하세요:");
			String command = reader.readLine();
			if (command.equalsIgnoreCase("exit")) {
				System.out.println("종료합니다.");
				break;
			}
			if (command.startsWith("new ")) {
//				String[] aaa = command.split(" ");
//				for(String ss : aaa) {
//					System.out.println(ss);
//				}
				processNewCommand(command.split(" "));
				continue;
			} else if (command.startsWith("change ")) {
				processChangeCommand(command.split(" "));
				continue;
			} else if (command.equals("list")) {
				processListCommand();
				continue;
			} else if (command.startsWith("delete ")) {
				processDeleteCommand(command.split(" "));
				continue;
			}
			
			printHelp();
		}
	}

	private static void processNewCommand(String[] arg) {
		if (arg.length != 4) {
			printHelp();
			return;
		}
		
		BoardService boardService =
				ctx.getBean("boardservice", BoardServiceImpl.class);
		boardService.saveOne(new BoardDto(0L, arg[1], arg[2], arg[3], null, 0));
		System.out.println("글 등록 완료");
		

	}

	private static void processChangeCommand(String[] arg) {
		if (arg.length != 5) {
			printHelp();
			return;
			
		}
		
		BoardService boardService =
				ctx.getBean("boardservice", BoardService.class);
		
        long num = (arg[1].length() > 0) ? Long.parseLong(arg[1])
                : 0;
        if(num != 0 && boardService.hasArticle(num)) {
            BoardDto dto = new BoardDto(num, arg[2], arg[3], arg[4], null, 0);
            
            
    		boardService.modifyOne(dto);
    		System.out.println("글 수정 완료");
        }else {
			System.out.println("글 번호가 오류입니다.");
		}

//		ChangePasswordService changePwdSvc = 
//				ctx.getBean("changePwdSvc", ChangePasswordService.class);
//		try {
//			changePwdSvc.changePassword(arg[1], arg[2], arg[3]);
//			System.out.println("암호를 변경했습니다.\n");
//		} catch (MemberNotFoundException e) {
//			System.out.println("존재하지 않는 이메일입니다.\n");
//		} catch (WrongIdPasswordException e) {
//			System.out.println("이메일과 암호가 일치하지 않습니다.\n");
//		}
	}

	private static void printHelp() {
		System.out.println();
		System.out.println("잘못된 명령입니다. 아래 명령어 사용법을 확인하세요.");
		System.out.println("명령어 사용법:");
		System.out.println("new 이메일 이름 암호 암호확인");
		System.out.println("change 이메일 현재비번 변경비번");
		System.out.println();
	}

	private static void processListCommand() {
		BoardService listprint =
				ctx.getBean("boardservice", BoardService.class);
							// "boardservice" @Bean 사용 할 메서드변수
		List<BoardDto> list = listprint.findAll();
		for(BoardDto dto : list) {
			System.out.println(dto);
		}
		

	}
	
	private static void processDeleteCommand(String[] arg) {
		if (arg.length != 2) {
			printHelp();
			return;
			
		}
		
		BoardService boardService =
				ctx.getBean("boardservice", BoardService.class);
		
		// arg 배열의 두 번째 요소(arg[1])가 비어있지 않은 경우(길이가 0보다 큰 경우), 
		// 해당 값을 long 타입으로 변환하여 변수 num에 저장
		// 예외적인 상황에서 비어있는 경우 0으로 초기화하여 기본값으로 사용하기 위함
        long num = (arg[1].length() > 0) ? Long.parseLong(arg[1]) : 0;
        
        // 변수 num의 값이 0이 아니고, boardService의 hasArticle 메서드를 호출하여 해당 
        // 게시물 번호(num)의 게시물이 데이터베이스에 존재하는지 여부를 확인
        if(num != 0 && boardService.hasArticle(num)) {
            
            
            
    		boardService.cancelOne(num);
    		
    		System.out.println("글 삭제 완료");
        }else {
			System.out.println("글 번호가 오류입니다.");
		}
		

	}

	

}

 

Swing ( 실행 ) 

package swing;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import config.AppCtx;
import dao.BoardDto;
import service.BoardService;
import service.BoardServiceImpl;

public class Win1 extends JFrame {
	
	private static ApplicationContext ctx = new AnnotationConfigApplicationContext(AppCtx.class);
	
	// 알럿
	private JFrame frame = this;
	
	Win1() {
		JButton bt1 = new JButton("검색");
		JButton bt2 = new JButton("입력");
		JButton bt3 = new JButton("수정");
		JButton bt4 = new JButton("삭제");
		
		JTextArea ta = new JTextArea();

		JTextField tf1 = new JTextField();
		JTextField tf2 = new JTextField();
		JTextField tf3 = new JTextField();
		JTextField tf4 = new JTextField();
		
		JLabel lb1 = new JLabel("num");
		JLabel lb2 = new JLabel("writer");
		JLabel lb3 = new JLabel("title");
		JLabel lb4 = new JLabel("content");
		
		Container c = this.getContentPane();
		this.setLayout(null);
		this.setTitle("person");
		this.setSize(430, 300);
		this.setLocation(500, 500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		bt1.setSize(70,  30);              // 폭과 높이 조절
		bt1.setLocation(20, 230);          // 위치 조정
		c.add(bt1);
		bt2.setSize(70,  30);              // 폭과 높이 조절
		bt2.setLocation(120, 230);          // 위치 조정
		c.add(bt2);
		bt3.setSize(70,  30);              // 폭과 높이 조절
		bt3.setLocation(220, 230);          // 위치 조정
		c.add(bt3);
		bt4.setSize(70,  30);              // 폭과 높이 조절
		bt4.setLocation(320, 230);          // 위치 조정
		c.add(bt4);
		
		tf1.setSize(70,  30);              // 폭과 높이 조절
		tf1.setLocation(20, 30);          // 위치 조정
		c.add(tf1);
		tf2.setSize(70,  30);              // 폭과 높이 조절
		tf2.setLocation(120, 30);          // 위치 조정
		c.add(tf2);
		tf3.setSize(70,  30);              // 폭과 높이 조절
		tf3.setLocation(220, 30);          // 위치 조정
		c.add(tf3);
		tf4.setSize(70,  30);              // 폭과 높이 조절
		tf4.setLocation(320, 30);          // 위치 조정
		c.add(tf4);
		
		lb1.setSize(70,  30);              // 폭과 높이 조절
		lb1.setLocation(20, 5);          // 위치 조정
		c.add(lb1);
		lb2.setSize(70,  30);              // 폭과 높이 조절
		lb2.setLocation(120, 5);          // 위치 조정
		c.add(lb2);
		lb3.setSize(70,  30);              // 폭과 높이 조절
		lb3.setLocation(220, 5);          // 위치 조정
		c.add(lb3);
		lb4.setSize(70,  30);              // 폭과 높이 조절
		lb4.setLocation(320, 5);          // 위치 조정
		c.add(lb4);
		
		JScrollPane scrollPane = new JScrollPane(ta);
		ta.setCaretPosition(ta.getDocument().getLength());
		scrollPane.setSize(350,  80);
		scrollPane.setLocation(30,  100);
		c.add(scrollPane);
		
		this.setVisible(true);
		
		bt1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				ta.setText("");
				BoardService listprint =
						ctx.getBean("boardservice", BoardService.class);
									// "boardservice" @Bean 사용 할 메서드변수
				List<BoardDto> list = listprint.findAll();
				for(BoardDto dto : list) {
					ta.append(dto.toString()+"\n");
				}
				
				
				
//				List<BoardDto> list = listprint.findAll();
//				for(BoardDto dto : list) {
//					
//				}
				
				//System.out.println("클릭!");
				
			}
		});
		
		bt2.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				if(
						"".equals(tf2.getText())||
						"".equals(tf3.getText())||
						"".equals(tf4.getText())) {
					JOptionPane.showMessageDialog
					(frame, "num입력칸 빼고 모두 입력하세요.");
					return;
				}
				
				BoardService boardService =
						ctx.getBean("boardservice", BoardServiceImpl.class);
				BoardDto dto = new BoardDto();
				
				
				
				boardService.saveOne(new BoardDto(0L, tf2.getText(), tf3.getText(), tf4.getText(), null, 0));
				JOptionPane.showMessageDialog(frame, "입력을 완료 했습니다.");
				
			}
		});
		
		bt3.addActionListener(new ActionListener() {
			
			
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				if("".equals(tf1.getText())||
						"".equals(tf2.getText())||
						"".equals(tf3.getText())||
						"".equals(tf4.getText())) {
					JOptionPane.showMessageDialog
					(frame, "num값은 수정 할 num값, 나머지는 변경 할 내용을 입력하세요.\n");
					return;
				}
				
				
				BoardService boardService =
						ctx.getBean("boardservice", BoardService.class);
				
				long num = (Long.parseLong(tf1.getText())  > 0) ? Long.parseLong(tf1.getText()) : 0;
		        if(num != 0 && boardService.hasArticle(num)) {
		            BoardDto dto = new BoardDto(num, tf2.getText(), tf3.getText(), tf4.getText(), null, 0);
		            
		            
		    		boardService.modifyOne(dto);
		    		JOptionPane.showMessageDialog(frame, "글 수정 완료");
		        }else {
//		        	JOptionPane.showMessageDialog(frame, "글을 수정 완료");
				}
				
			}
		});
		
		bt4.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				if("".equals(tf1.getText())){
					JOptionPane.showMessageDialog
					(frame, "삭제 할 num값을 입력 해주세요.");
					return;
				}
				
				BoardService boardService =
						ctx.getBean("boardservice", BoardServiceImpl.class);
				
				
				boardService.cancelOne(Long.parseLong(tf1.getText()));
				JOptionPane.showMessageDialog(frame, "삭제를 완료 했습니다.");
				
			}
		});
		

		
		
	}

	public static void main(String[] args) {
		Win1 win = new Win1();

	}

}

 

 

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-07-28 51일차  (0) 2023.07.28
2023-07-27 50일차  (0) 2023.07.27
2023-07-25 48일차  (0) 2023.07.25
2023-07-24 47일차  (0) 2023.07.24
2023-07-21 46일차  (0) 2023.07.21
insert into emp_hw(empno, ename, job, mgr, hiredate, sal, comm, deptno, remark)
 select empno, ename, job, mgr, hiredate, sal, comm, deptno, NUll
 from emp

해당 쿼리문 사용시 데이터가 없는 emp_hw 테이블에 데이터가 있는 emp 데이터가 모두 복사 되서 저장됨

 

 

 

 

 

 

 

--add-opens=java.base/java.lang=ALL-UNNAMED 

추가

JSP, 마이바티스, Maven 활용 Board 실습

 

Maven 환경 설정

 

JSP Maven 설정

 

Maven, gradle 환경설정에 필요한 jar <dependency> 확인 가능 

 

pom.xml에 추가하면 프로젝트에서 jar 적용 가능

 

다이나믹웹프로젝트에서는 안해도 되지만 java프로젝트에서는 해야되는 설정 ( 밑에 이미지 참고 )

 

 

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>sp5-0725Web</groupId>
  <artifactId>sp5-0725Web</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
 <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>5.0.2.RELEASE</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok-maven-plugin -->
	<dependency>
	    <groupId>org.projectlombok</groupId>
	    <artifactId>lombok-maven-plugin</artifactId>
	    <version>1.18.20.0</version>
	    <scope>provided</scope>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis</artifactId>
	    <version>3.4.1</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
	<dependency>
	    <groupId>com.oracle.database.jdbc</groupId>
	    <artifactId>ojdbc8</artifactId>
	    <version>23.2.0.0</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
	<dependency>
	    <groupId>org.apache.logging.log4j</groupId>
	    <artifactId>log4j-core</artifactId>
	    <version>2.20.0</version>
	</dependency>

  </dependencies>


  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <release>11</release>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.3</version>
      </plugin>
    </plugins>
  </build>
</project>

 

 

 

Mapper.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="org.mybatis.persistence.EmpMapper">


    
    <select id="boardList" resultType="dao.BoardDto">
    	select num, writer, title, content, regtime, hits
    	from board
    </select>
    
    <insert id="boardinsert" parameterType="dao.BoardDto">
    
    insert into board (num, writer, title, content, regtime, hits)
    values (SEQ_TEST.nextval, #{writer}, #{title}, #{content}, to_char(sysdate, 'YYYY-MM-DD HH:MI:SS'), 0)
    
    </insert>
    
    <delete id="boarddelete" parameterType="long" >
    	delete from board where num = #{num}
    </delete>
    
    <select id="boardselone" resultType="dao.BoardDto">
        SELECT * FROM board WHERE num = #{num}
   	</select>
   	
   	<update id="updateHits">
   		update board set hits = hits + 1 where num = #{num}
   	</update>
    
    	<update id="boardupdate" parameterType="dao.BoardDto" >
		UPDATE board SET writer = #{writer}, title = #{title}, content = #{content}
   		 WHERE num = #{num}
	</update>

    
</mapper>

 

 

인터페이스

package dao;

import java.util.ArrayList;

public interface Board {
	ArrayList<BoardDto> selectList();
	BoardDto selectOne(Long num, boolean incHits);
	void insertOne(BoardDto dto);
	void updateOne(BoardDto dto);
	void deleteOne(Long num);
	void updateHits(Long num);
}

 

DTO

package dao;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;


@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString

public class BoardDto {
	private Long num;
	private String writer;
	private String title;
	private String content;
	private String regtime;
	private Integer hits;
	
}

 

DAO (인터페이스 구현 ) 

package dao;

import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class BoardDao implements Board {
	
	private static SqlSessionFactory sqlSessionFactory;
	
	static {
		try {
			// 마이바티스 환경 설정 XML 파일 경로
			String resource = "resources/mybatis/config-mybatis.xml";
			Reader reader = Resources.getResourceAsReader(resource);
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	@Override // 전체 정보 조회 
	public ArrayList<BoardDto> selectList() {
		// 세션 및 트랜잭션 시작
		SqlSession sqlSession = sqlSessionFactory.openSession();

		try {
			// 조회 매핑 구문 실행
			List list = sqlSession.selectList("org.mybatis.persistence.EmpMapper.boardList");
			//System.out.println(list);
			ArrayList<BoardDto> list2 = (ArrayList<BoardDto>) list;
//			for (BoardDto dto : list2) {
//				System.out.println(dto);
//			}
			return list2;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 세션 및 트랜잭션 종료
			sqlSession.close();
		}
		return null;
	}

	@Override // num값으로 정보 조회 
	public BoardDto selectOne(Long num, boolean incHits) {
		// 세션 및 트랜잭션 시작
		SqlSession sqlSession = sqlSessionFactory.openSession();

		try {
			// 조회 매핑 구문 실행
			BoardDto dto = sqlSession.selectOne("org.mybatis.persistence.EmpMapper.boardselone", num);
			if (incHits) {
				sqlSession.update("org.mybatis.persistence.EmpMapper.updateHits", num);
				sqlSession.commit();
			}
			return dto;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 세션 및 트랜잭션 종료
			sqlSession.close();
		}
		return null;
	}

	@Override // 추가
	public void insertOne(BoardDto dto) {
		// 세션 및 트랜잭션 시작
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		try {
			// 조회 매핑 구문 실행
			//sqlSession.selectList("org.mybatis.persistence.EmpMapper.list2");
			int res = sqlSession.insert("org.mybatis.persistence.EmpMapper.boardinsert", dto);
			System.out.println(res);
			sqlSession.commit();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 세션 및 트랜잭션 종료
			sqlSession.close();
		}
	
		
	}

	@Override // 업데이트
	public void updateOne(BoardDto dto) {
		// 세션 및 트랜잭션 시작
		SqlSession sqlSession = sqlSessionFactory.openSession();

		try {
			// 조회 매핑 구문 실행
			//sqlSession.selectList("org.mybatis.persistence.EmpMapper.list2");
			int res = sqlSession.update("org.mybatis.persistence.EmpMapper.boardupdate", dto);
			System.out.println(res);
			sqlSession.commit();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 세션 및 트랜잭션 종료
			sqlSession.close();
		}
		
	}

	@Override // 삭제 
	public void deleteOne(Long num) {
		// 세션 및 트랜잭션 시작
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		try {
			// 조회 매핑 구문 실행
			//sqlSession.selectList("org.mybatis.persistence.EmpMapper.list2");
			int res = sqlSession.delete("org.mybatis.persistence.EmpMapper.boarddelete", num);
			System.out.println(res);
			sqlSession.commit();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 세션 및 트랜잭션 종료
			sqlSession.close();
		}
		
	}

	@Override // 조회수 
	public void updateHits(Long num) {
		// 세션 및 트랜잭션 시작
		SqlSession sqlSession = sqlSessionFactory.openSession();

		try {
			// 조회 매핑 구문 실행
			//sqlSession.selectList("org.mybatis.persistence.EmpMapper.list2");
			sqlSession.update("org.mybatis.persistence.EmpMapper.updateHits", num);

			sqlSession.commit();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 세션 및 트랜잭션 종료
			sqlSession.close();
		}
		
	}
	
}

 

테스트

Select List

package dao;

import java.util.ArrayList;

public class ListTestEx01 {

	public static void main(String[] args) {
		BoardDao dao = new BoardDao();
		ArrayList<BoardDto> list =  dao.selectList();
		for(BoardDto dto : list) {
			System.out.println(dto);
		}
	}

}

 

Select one ( 실행 시  true면 조회수 + 1 ) 

package dao;

public class SelectOneEx {

	public static void main(String[] args) {
		BoardDao dao = new BoardDao();
		BoardDto dto = dao.selectOne(1L, true);
		System.out.println(dto);
		
		

	}

}

 

 

Insert

package dao;

public class InsertTestEx02 {

	public static void main(String[] args) {
		BoardDao dao = new BoardDao();
		BoardDto dto = new BoardDto((long) 0, "테스트119", "테제목", "테내용", null, 0 );
		

		dao.insertOne(dto);
	}

}

 

 

Delete

package dao;

public class deleteTestEx3 {

	public static void main(String[] args) {
		BoardDao dao = new BoardDao();
		
		dao.deleteOne(101L);
		

	}

}


Update

package dao;

public class UpdateTestEx {

	public static void main(String[] args) {
		BoardDao dao = new BoardDao();
		BoardDto dto = new BoardDto(100L,"김기철", "제목 114", "내용 114", null, 0);
		
		dao.updateOne(dto);
		
	}

}

 

테스트 완료 

 

Service 

인터페이스 ( 위에 인터페이스와 동일 변수명만 틀리게 만듬 ) 

package service;

import java.util.ArrayList;

import dao.BoardDto;

public interface BoardService {
	ArrayList<BoardDto> findAll();
	BoardDto findOne(Long num, boolean incHits);
	void saveOne(BoardDto dto);
	void modifyOne(BoardDto dto);
	void cancelOne(Long num);
}

 

인터페이스 구현

package service;

import java.util.ArrayList;

import dao.BoardDao;
import dao.BoardDto;

public class BoardServiceImpl implements BoardService {
	
	BoardDao boardDao = new BoardDao();

	@Override
	public ArrayList<BoardDto> findAll() {
		return boardDao.selectList();
	}

	@Override
	public BoardDto findOne(Long num, boolean incHits) {
		if (incHits) {
			boardDao.updateHits(num);
		}
		return boardDao.selectOne(num, incHits);
	}

	@Override
	public void saveOne(BoardDto dto) {
		boardDao.insertOne(dto);
		
	}

	@Override
	public void modifyOne(BoardDto dto) {
		boardDao.updateOne(dto);
		
	}

	@Override
	public void cancelOne(Long num) {
		boardDao.deleteOne(num);
		
	}



}

 

 

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-07-27 50일차  (0) 2023.07.27
2023-07-26 49일차  (0) 2023.07.26
2023-07-24 47일차  (0) 2023.07.24
2023-07-21 46일차  (0) 2023.07.21
2023-07-20 45일차  (0) 2023.07.20

+ Recent posts