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 |