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