필요한 db 설정 정보:
properties 파일에 db관련 정보 등록.
db.properties파일 ->
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/digital_spring
jdbc.username=digital
jdbc.password=12345
root-context.xml 파일에 해당 내용 추가 ->
<!-- 지정된 위치의 properties파일을 read하는 class : properties에 등록된 key값으로 value값불러올 수 있다. -->
<context:property-placeholder location="classpath:prop/*.properties"/>
Hikaricp 커넥션 풀 라이브러리
1. MAVEN 코드 pom.xml에 입력. 2. root-context.xml 파일에 해당 내용 추가 -> <!-- Hikari 설정 정보 class --> <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!-- 최대로 생성 유지할 수 있는 커넥션 개수 default=10 --> <property name="maximumPoolSize" value="200"/> <!-- 일을 하지 않아도 유지되는 최소 connection 수 --> <property name="minimumIdle" value="20"/> <!-- pool에서 connection 정보를 가져오기 위해 대기하는 시간 default=250ms --> <property name="connectionTimeout" value="300000"/> <!-- 일을 하지 않는 connection을 대기(유지)하는 시간 default="60000ms" --> <property name="idleTimeout" value="200000"/> </bean> <bean id="ds" class="com.zaxxer.hikari.HikariDataSource"> <constructor-arg ref="hikariConfig"/> </bean> |
로그기록을 자동으로 남겨주는 log4jdbc생성 (Log4Jdbc Log4j2)
MAVEN 라이브러리 추가 Log4Jdbc Log4j2 src/main/resources/log4jdbc.log4j2.properties 생성 -> log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator db/properties에 내용 추가-> jdbc.log4j.driver=net.sf.log4jdbc.sql.jdbcapi.DriverSpy jdbc.log4j.url=jdbc:log4jdbc:mysql://localhost:3306/digital_spring root-context.xml에 내용변경 -> <!-- log4j slf4j를 이용한 db log 출력 --> <property name="driverClassName" value="${jdbc.log4j.driver}" /> <property name="jdbcUrl" value="${jdbc.log4j.url}"/> |
DAO 구현객체 이용안하고 인터페이스로 Mapper 바로 연결 :
mybatis에서 하는 것.
인터페이스랑 [id가 메소드 이름, 파라미터 타입, 리턴타입 ]일치하게 mapper에 등록하면 bean으로 등록 된다.
1. MyBatis 설정 파일 삭제
2. root-context.xml 내용 입력 ->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="ds" /> <!-- 지정한 패키지 내의 클래스명 첫글자만 소문자로 변경해서 별칭등록 --> <property name="typeAliasesPackage" value="com.bitc.board.vo, com.bitc.board.util"/> <property name="mapperLocations" value="classpath:mybatis/sql/*.xml"/> </bean> |
src/test/java 에서 사용예시)
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations= { "classpath:/context/root/root-context.xml" }) public class MyBatisTest { @Autowired SqlSession sqlSession; @Test public void readBoard() { BoardVO vo = sqlSession.selectOne("boardMapper.read",1); System.out.println(vo); } |
3. MAPPER 파일 수정 ->
<!-- namespace를 인터페이스경로와 동일하게 수정 -->
<mapper namespace="com.bitc.board.dao.BoardDAO">
4. 패키지단위로 Mapper 등록
root-context.xml에 코드 추가
<mybatis-spring:scan base-package="com.bitc.*.dao"/>
만약, 다른 인터페이스와 섞여 있는 경우
<!-- 스캔할 패키지 지정. annotation이 지정된것만 스캔함. --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.bitc.*.dao"/> <property name="annotationClass" value="org.apache.ibatis.annotations.Mapper"/> </bean> |
사용할 인터페이스에 @Mapper 추가
ex.)
@Mapper
public interface BoardDAO{
실습 파일 수업
<form method="POST"> form 태그에 action 지정이 안되어 있으면 동일한 url요청 경로에 전송방식만 POST로 요청감
RedirectAttributes : redirect된 페이지에 값을 실어줌. 객체 전달 가능
@PostMapping("register") public String registerPost(BoardVO vo, //HttpSession session //RedirectAttributes : redirect된 페이지에 값을 실어줌 RedirectAttributes rttr)throws Exception{ System.out.println("board/register POST 요청"); String result = bs.regist(vo); //session.setAttribute("message", result); rttr.addFlashAttribute("result",result); return "redirect:/board/listPage"; } |
rttr.addAttribute("bno",vo.getBno()); // get방식으로 파라미터값 삽입. 객체 전달 불가
@PostMapping("modify") public String modify( RedirectAttributes rttr, BoardVO vo)throws Exception{ String result = bs.modify(vo); rttr.addFlashAttribute("result",result); rttr.addAttribute("bno",vo.getBno()); // get방식으로 파라미터값 삽입. return "redirect:/board/readPage";//?bno="+vo.getBno(); } |
UriComponents : spring에서 지원하는 쿼리스트링. 객체형식으로 완성해줌
public String mkQueryStr(int page) { UriComponents uriComponents = UriComponentsBuilder.newInstance() .queryParam("page",page) .queryParam("perPageNum", cri.getPerPageNum()) .build(); String query = uriComponents.toUriString(); System.out.println(query); return query; } |
@ModelAttribute("key값") : 파라미터로 넘겨받은걸 바로 Model에 넣어줌
이거 안해도 자동으로 실림 (대신 맨앞글자 소문자로 바꾼 이름으로 실림)
@GetMapping("readPage") public String readPage( //model.addAttribute("cri",cri); @ModelAttribute("cri") Criteria cri, int bno, Model model) throws Exception { // 조회수 증가 bs.updateCnt(bno); // 상세보기 요청 게시글 정보 BoardVO vo = bs.read(bno); model.addAttribute("boardVO",vo); return "/board/read"; } |
-이동한 페이지가 LIST로 이동했을 때 유지되도록 코드 수정함 (read.jsp)
<div>
<a href="" id="modify">MODIFY</a> |
<a href="" id="remove">DELETE</a> |
<a href="" id="list">LIST</a>
</div>
<form id="submitForm" method="POST">
<input type="hidden" name="bno" value="${boardVO.bno}" />
<input type="hidden" name="page" value="${cri.page}" />
<input type="hidden" name="perPageNum" value="${cri.perPageNum}" />
</form>
<script>
var result = '${result}';
if(result != null && result != ''){
alert(result);
}
</script>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
// 문서가 모두 로드 되었을 때 실행...
$(function(){
var formObj = $("#submitForm");
$("#list").click(function(e){
e.preventDefault();
$("input[name='bno']").remove();
formObj.attr("action","listPage");
formObj.attr("method","GET");
formObj.submit();
});
});
</script>
ㄹㅇㄹ
'Java > Spring' 카테고리의 다른 글
log4j.xml (0) | 2023.08.01 |
---|---|
스프링부트 이용해서 자바코드로 xml대체하기. (0) | 2023.08.01 |
7.28 filter (0) | 2023.07.28 |
MyBatis 설정(ORM) (0) | 2023.07.27 |
Spring에 DB 연동 셋업 (0) | 2023.07.27 |