일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 클론
- 파이썬
- 데이터베이스
- cmd
- php
- 단축키
- 에러
- error 해결
- github token
- Python
- import data
- console창
- jupyter
- clone
- Visual Studio Code
- database
- csv
- MySQL
- OrCAD 다운로드
- PHPStorm
- github clone
- localhost
- DataGrip
- 깃 토큰
- 따옴표 삭제
- visualstudio code
- vscode
- 오류
- run sql script
- error
- Today
- Total
개발 노트
11/8 oBootMybatis01 - 1 본문
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 폴더 > 첨부파일 추가
출력 결과
'프로젝트 기반 JAVA 응용 SW개발 : 22.07.19~23.01.20 > Spring' 카테고리의 다른 글
1/9 개념정리 3 (0) | 2023.01.09 |
---|---|
주요 어노테이션 (0) | 2022.11.23 |
10/28 JPA 연관관계, oBootJpa02 프로젝트 (0) | 2022.11.16 |
10/27 Lombok 설치, gradle과 maven 비교, JPA 개념, JPA CRUD, oBootJpa01(JPA코드로 DB에 저장하는 프로그램), iBatis와 Hibernate비교 (0) | 2022.11.15 |
10/26 spring boot 예시 2개(메모리 사용하여 데이터 저장) (0) | 2022.11.10 |