관리 메뉴

개발 노트

11/8 oBootMybatis01 - 1 본문

프로젝트 기반 JAVA 응용 SW개발 : 22.07.19~23.01.20/Spring

11/8 oBootMybatis01 - 1

hayoung.dev 2022. 11. 23. 14:46

[oBootMybatis01]

resources > application.yml

server:
  port : 8391

# Oracle Connect
spring:
  datasource:
   url: jdbc:oracle:thin:@localhost:1521/xe
   username: scott
   password: tiger
   driver-class-name: oracle.jdbc.driver.OracleDriver
   
   # Jpa Setting  
  jpa: 
    hibernate:
      ddl-auto: create  # none   update
    properties:
      hibernate:
        default_batch_fetch_size : 500 
      show_sql:   true         # System.out 에 하이버네이트 실행 SQL
      format_sql: true
  
  # view Resolver
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp    
  
# Mybatis
mybatis:
  config-location: classpath:configuration.xml
  mapper-locations: classpath:mappers/*.xml

  
  
   
logging.level:
  org.hibernate.SQL: debug   # logger를 통해 하이버네이트 실행 SQL

15줄 : 코딩 끝나면 none이나 update로 바꾸기.

31줄 : mappers 밑의 모든 xml을 mapper로 취급하겠다.

 

src 폴더 > main > webapp > WEB-INF > views 폴더 생성

 

src/main/java > controller, dao, domain, model, service (package) 생성

(entity는 dao에 담음. dto는 modle에 작성)

 

model > Dept.java(class)

package com.oracle.oBootMybatis01.model;

import lombok.Data;

@Data
public class Dept {
	private int    deptno;
	private String dname;
	private String loc;

}

model > Emp.java(class)

package com.oracle.oBootMybatis01.model;

import lombok.Data;

@Data
public class Emp {
	private int empno; 	 		private String ename;
	private String job;		 	private int mgr;
	private String hiredate; 	private int sal;
	private int comm; 		 	private int deptno;

	// 조회용
	private String search;   	private String keyword;
	private String pageNum;  
	private int start; 		 	private int end;

}

dao > EmpDao.java(interface)

package com.oracle.oBootMybatis01.dao;

import java.util.List;

import com.oracle.oBootMybatis01.model.Emp;

public interface EmpDao {
	int          totalEmp();
	List<Emp>    listEmp(Emp emp); 

}

dao > EmpDaoImpl.java(class)

package com.oracle.oBootMybatis01.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.oracle.oBootMybatis01.model.Emp;

import lombok.RequiredArgsConstructor;

@Repository
@RequiredArgsConstructor
public class EmpDaoImpl implements EmpDao {
	// Mybatis DB 연동 
	private final SqlSession session;

	@Override
	public int totalEmp() {
		int totEmpCount = 0;
		System.out.println("EmpDaoImpl Start total..." );
		
		try {
			totEmpCount = session.selectOne("empTotal");
			System.out.println("EmpDaoImpl totalEmp totEmpCount->" +totEmpCount);
		
		} catch (Exception e) {
			System.out.println("EmpDaoImpl totalEmp Exception->"+e.getMessage());
		}
		return totEmpCount;
	}

	@Override
	public List<Emp> listEmp(Emp emp) {
		List<Emp> empList = null;
		System.out.println("EmpDaoImpl listEmp Start ..." );
		try {
			//                             Map ID        parameter
			empList = session.selectList("tkEmpListAll", emp);
			System.out.println("EmpDaoImpl listEmp empList.size()->"+empList.size());
		} catch (Exception e) {
			System.out.println("EmpDaoImpl listEmp e.getMessage()->"+e.getMessage());
		}
		return empList;
	}

}

sevice > EmpService.java (interface)

package com.oracle.oBootMybatis01.service;

import java.util.List;

import com.oracle.oBootMybatis01.model.Emp;

public interface EmpService {
	 int         totalEmp();

	List<Emp>    listEmp(Emp emp);

}

sevice > EmpServiceImpl.java (class)

package com.oracle.oBootMybatis01.service;

import java.util.List;

import org.springframework.stereotype.Service;

import com.oracle.oBootMybatis01.dao.EmpDao;
import com.oracle.oBootMybatis01.model.Emp;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor //생성자를 위한 자동 인젝션
public class EmpServiceImpl implements EmpService {

	//dao로 자동연결
	private final EmpDao   ed;
	
	@Override
	public int totalEmp() {
		System.out.println("EmpServiceImpl Start total..." );
		int totEmpCnt = ed.totalEmp();
		System.out.println("EmpServiceImpl totalEmp totEmpCnt->" + totEmpCnt);
		return totEmpCnt;
	}

	@Override
	public List<Emp> listEmp(Emp emp) {
		 List<Emp> empList = null;
		 System.out.println("EmpServiceImpl listManager Start..." );
		 empList = ed.listEmp(emp);
		 System.out.println("EmpServiceImpl listEmp empList.size()->" +empList.size());
		 return empList;
	}

}

controller > EmpController.java (class)

package com.oracle.oBootMybatis01.controller;

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.oracle.oBootMybatis01.model.Emp;
import com.oracle.oBootMybatis01.service.EmpService;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Controller
@RequiredArgsConstructor
@Slf4j
public class EmpController {
	
	private final EmpService es;
	
	@RequestMapping(value = "listEmp")
	//Emp 자동완성 할 때 model에 있는 Emp 가져와야 함.
	public String empList(Emp emp , String currentPage, Model model) {
		System.out.println("EmpController Start listEmp..." );
		int totalEmp =  es.totalEmp();
		System.out.println("EmpController totalEmp=>" + totalEmp);
		
		// Parameter emp --> Page만 추가 Setting
		emp.setStart(1);   // 시작시 1
		emp.setEnd(10);       // 시작시 10 

		List<Emp> listEmp = es.listEmp(emp);
		System.out.println("EmpController list listEmp.size()=>" + listEmp.size());
		
		model.addAttribute("totalEmp", totalEmp);
		model.addAttribute("listEmp", listEmp);
		
		return "list";

	}
	

}

 

MyBatis JSP 설정

설정 후 > buildGradle > refresh

java > 기본 package > configueration(package) > SecurityConfig.java

package com.oracle.oBootMybatis01.configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
// IoC 빈(bean)을 등록
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity  // 필터 체인 관리 시작 어노테이션
public class SecurityConfig {
	
	@Bean
	public BCryptPasswordEncoder encodePwd() {
		return new BCryptPasswordEncoder();
	}
	
	@Bean
	protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
		
		http.csrf().disable();
		http.authorizeRequests()
		    .anyRequest()
		    .permitAll();
		
		return http.build();
		
		
	}
}

views 폴더 > list.jsp(jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>list.jsp 입성 성공 </h1>
	<h3>사원수 : ${totalEmp }</h3>
	
	<table>
		<tr><th >번호</th><th>사번</th><th>이름</th><th>업무</th><th>급여</th></tr>
		<c:forEach var="emp" items="${listEmp }">
			<tr><td>${num }</td><td>${emp.empno }</td>
			<td><a href="detail?empno=${emp.empno}">${emp.ename}</a></td>
				<td>${emp.job }</td><td>${emp.sal }</td></tr>
			<c:set var="num" value="${num - 1 }"></c:set>
		</c:forEach>
	</table>	
	
	
	
</body>
</html>

resources > configuration.xml (xml)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>list.jsp 입성 성공 </h1>
	<h3>사원수 : ${totalEmp }</h3>
	
	<table>
		<tr><th >번호</th><th>사번</th><th>이름</th><th>업무</th><th>급여</th></tr>
		<c:forEach var="emp" items="${listEmp }">
			<tr><td>${num }</td><td>${emp.empno }</td>
			<td><a href="detail?empno=${emp.empno}">${emp.ename}</a></td>
				<td>${emp.job }</td><td>${emp.sal }</td></tr>
			<c:set var="num" value="${num - 1 }"></c:set>
		</c:forEach>
	</table>	
	
	
	
</body>
</html>

 

classpath는 resources에 있다.

 

resources > mappers > Emp.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="com.oracle.oBootMybatis01.EmpMapper">

	<!-- int 타입으로 돌려준다. -->
	<select id="empTotal" resultType="int">
		select Count(*) FROM emp
	</select>

	<!-- 
	configuration.xml 코드의  <typeAlias alias="Emp"  type="com.oracle.oBootMybatis01.model.Emp" /> 대신
	parameterType="com.oracle.oBootMybatis01.model.Emp"
	resultType="com.oracle.oBootMybatis01.model.Emp"
	으로 작성해도 된다.
 	-->    
 	<select id="tkEmpListAll" parameterType="Emp" resultType="Emp">
		SELECT *
		FROM (
			SELECT rownum rn , a.*
			FROM (select * from emp order by empno) a
			)
		WHERE rn BETWEEN #{start} and #{end} 
    </select>


</mapper>

 

실행 방법 : http://localhost:8391/listEmp 

 

views 폴더 > header.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<link href="css/board.css" rel="stylesheet" type="text/css">

static 안에는 정적인 요소들을 넣는다. (css는 디자인 요소, js는 자바스크립트)

resources > static > 디자인파일들

1) css 폴더 > board.css

@CHARSET "UTF-8";
body {	font-family: 굴림체; text-align: center;	}
table { border: 1px solid pink; width: 100%; 
         }
tr { height: 30px; background: yellow; }
/* th {	background: #C9BFED;	} */
th {	background: #b9b973;	}
td {	background: #f9f3b3;	}

2) js 폴더 > 첨부파일 추가

 

bootstrap.js
0.07MB
httpRequest.js
0.00MB
jquery.cycle2.js
0.05MB
jquery.js
0.28MB
searchList.js
0.00MB
test.js
0.00MB

출력 결과

반응형