AppConfig.java
package com.java.config;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
@Configuration
public class AppConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
//dataSource정보를 가져옴
sessionFactory.setDataSource(dataSource);
//Mapper.xml정보를 가져옴 여러개 배열로 받음.
Resource[] res=new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/**/*.xml");
sessionFactory.setMapperLocations(res);
return sessionFactory.getObject();
}//SqlSessionFactory
@Bean
public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory); //connection
}
}
fboardList.jsp : jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<body>
<h2>자유게시판</h2>
</div>
<table>
<colgroup>
<col width="8%">
<col width="49%">
<col width="13%">
<col width="20%">
<col width="10%">
</colgroup>
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>날짜</th>
<th>조회수</th>
</tr>
<c:forEach items="${map.list}" var="bvo">
<tr>
<td>${bvo.bno}</td>
<td>
<c:forEach begin="1" end="${bvo.bindent}" step="1">
<img class="img" src="/images/icon_reply.png">
</c:forEach>
<a href="fboardView?bno=${bvo.bno}&page=${map.page}&searchTitle=${searchTitle}&searchWord=${searchWord}">
${bvo.btitle}<c:if test="${bvo.bfile!=null }"> <span class="material-symbols-outlined">download
</span></c:if>
</a>
</td>
<td>${bvo.id}</td>
<td>
<fmt:formatDate value="${bvo.bdate}" pattern="yyyy-MM-dd"/>
</td>
<td>${bvo.bhit}</td>
</tr>
</c:forEach>
<c:if test="${result == 'fail' or list.size()==0}"><!--코드에 문제가 없거나 또는
db에서 불러올 데이터가 없을 때 -->
<tr>
<td colspan="5">데이터가 없습니다.</td>
</tr>
</c:if>
</table>
<div class="numbering">
<!--첫페이지 이동 -->
<c:if test="${map.page==1 }"><span>«</span></c:if>
<c:if test="${map.page!=1 }">
<a href="fboardList.do?map.page=1&searchTitle=${searchTitle}&searchWord=${searchWord}">
</div>
</body>
</html>
controller
package com.java.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.java.vo.memberVo;
@Controller
@RequestMapping
public class BoardController {
@Autowired
BoardService boardService;
@GetMapping("/board/fboardList")
public String fboardList(Model model) {
//모든 게시글 정보 model에 추가
Map<String, Object> map =boardService.selectBoardList();
model.addAttribute("map",map);
return "board/fboardList";
}
BoardServiceImple.java - service
package com.java.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.java.mapper.BoardMapper;
import com.java.vo.boardVo;
@Service
public class BoardServiceImpl implements BoardService {
@Autowired
BoardMapper boardMapper;
//전체 게시글 가져오기 -@Override: 기능없음/표시만하는 것
public Map<String,Object> selectBoardList() {
Map<String,Object> map=new HashMap<>();
List<boardVo> list= boardMapper.selectBoardList();
//page:현재페이지,listCount:총개수,maxpage:최대페이지,startpage,endpage,startrow,endrow
int listCount=boardMapper.selectCount();
System.out.println("BoardServiceImpl-listCount:"+listCount);
map.put("list", list);
map.put("page", 1);
map.put("listCount", listCount);
return map;
}//selectBoardList
//1개 게시글
public boardVo selectOne(int bno){
boardVo bvo=boardMapper.selectOne(bno);
return bvo;
}
}
BoardMapper.java - DAO
package com.java.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.java.vo.boardVo;
@Mapper //sqlSessionTemplate
public interface BoardMapper {
public List<boardVo> selectBoardList(); //xml - select id 에 가서 쿼리문 resulttype으로 돌려줘
public int selectCount();
public boardVo selectOne(int bno);
}
boardMapper.xml - MyBatis
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.java.mapper.BoardMapper">
<select id="selectBoardList" resultType="com.java.vo.boardVo">
select * from board
</select>
<select id="selectCount" resultType="int">
select count(*) count from board
</select>
<select id="selectOne" resultType="com.java.vo.boardVo">
select * from board where bno=#{bno}
</select>
</mapper>