반응형

1. VO, DTO, DAO, Repository
  VO = DTO
  DAO = Repository

2. 인접한 layer 끼리만 통신

컨트롤러 -------------------------> 서비스 -------------------------> DAO
컨트롤러 <------------------------- 서비스 <------------------------- DAO
@RestController                       @Service                             @Repository
@RequestMapping("/")

3. Java8 Ramda식
@GetMapping - getUserById
@PostMapping - regisUser
@PutMapping - modifyUser
@DeleteMapping - removeUser

4. Rest Client : Postman, Talend API Tester

5. JUnit 단위 / TDD = Test Driven Development
 단위 테스트(Unit Test) : (1)Service (2)DAO = Repository
 Controller Test : End to End Test
           Postman 사용 / MockMVC 사용테스트

반응형

스프링 프레임워크 1일차 교육

개발 및 관리/Java 2023. 5. 16. 09:16 posted by HighLighter
반응형

개발시에 버전이 중요하다.

https://www.oracle.com/kr/java/technologies/downloads/

*** 개발환경설치

1. JDK 8 : 
C:\Program Files\Java\jdk1.8.0_91

내PC - 속성 - 고급 시스템 설정-고급 - 시스템변수(S) - Path - 'C:\Program Files\Java\jdk1.8.0_91' - 위로 이동


path = %JAVA_HOME%\bin


새 시스템 변수
변수이름: JAVA_HOME
변수값: C:\Program Files\Java\jdk1.8.0_91

---------------------------------------------------------------------------------------------

2. WAS(Tomcat8.5)

WAS_HOME
C:\apache-tomcat-8.5.63

WEB APPLICATION
C:\apache-tomcat-8.5.63\webapps

C:\apache-tomcat-8.5.63\webapps\docs\WEB-INF\web.xml => 환경설정파일(시작할 때 read)


(툴) 이클립스, 인텔리제이

http://localhost:8080/edu/test01.html
http://127.0.0.1

---------------------------------------------------------------------------------------------

*** 서블릿: 웹에서 요청해서 실행할 수 있는 유일한 자바 프로그램

*** 서블릿 필요 조건

1. 반드시 javax.servlet.http.HttpServlet 상속해야 한다.

 https://docs.oracle.com/javaee/7/api/index.html?javax/servlet/package-summary.html 

javax.servlet
javax.servlet.http

2. 서블릿 경로
 2-1. web.xml
 2-2. @

http://localhost:8080/edu/servlet/com.edu.test.FirstServlet

http://localhost:8080/edu/exam01

---------------------------------------------------------------------------------------------

************************************************************************************************
*** (중요함) 저장소(scope이라는 단어가 나오면 3개 중에 1개) : 3개 중 1개에서 저장함
1. ServletContext
- 서버 시작시 생성
- 서버 종료시 삭제
- web aplication 개수 단위로 생성됨
1.2. ServletContext 기능
 가. application 단위로 데이터 공유
 나. application 변수 사용할 때
   => [중요함] 페이지 이동시 이전 페이지의 request, response 그대로 받아 사용하는 경우
        RequestDispatcher HttpServletRequest.getRequestDispatcher(path)
        RequestDispatcher.forward(req, resp) 이동했다가 다시 안돌아 온다.
                               .include(req, resp) 이동했다가 다시 돌아 온다.
   => [중요함, null point exception] 페이지 이동시 새로운 request, reponse 생성
        HttpServletResponse.sendRedirect(path)

2. HttpSession(로그인/아웃, 장바구니)
- client 접속시 생성됨
- client 종료시 종료됨
- client 당 1개로

3. HttpServletRequest
- 요청시 생성
- 응답완료시 삭제
- 요청이 들어올 때마다 생성됨


************************************************************************************************


저장: setAttribute(String name, Object value)
추출: Object getAttribute(String name)
삭제: removeAttribute(String name)

---------------------------------------------------------------------------------------------

http://localhost:8080/edu/test01
http://localhost:8080/edu/test02

test01
test02

반응형

스프링, mybatis, oracle 등 연결

개발 및 관리/Java 2022. 4. 3. 17:32 posted by HighLighter
반응형

(스프링부트 동영상)Spring Boot 한번 알아보세요~(자바교육/스프링교육/자바/JAVA교육/스프링동영상/자바동영상/자바강의/스프링강의/JAVA동영상)

https://youtu.be/cOH-DVAuBes?list=PLxU-iZCqT52Bihgf3v1bg5xEYeCwFQ_Zz

스프링, 마이바티스,오라클연동게시판실습(1)_스프링5, MyBatis3.5, Oracle12.2 로그인, 게시판 실습(자바교육/스프링교육/자바/JAVA교육/스프링동영상/스프링강의)

https://youtu.be/Pn4k4PSewxw

MyBatis 개념과 세팅및 사용법

https://youtu.be/eMuFWW6-8i0

자바 스프링 DataSource Mybatis 연결과정

https://youtu.be/dMriz1HFr-E

[ Java 취업 #101 ] JSP #19 - oracle+mybatis 상품관리(관리자 로그인, 상품 등록,수정,삭제,상세, 회원 로그인, 장바구니 기능)

https://youtu.be/bepiioZDUN8

Webjjang Spring 08-07 board - JDBC - Spring Mybatis 흐름 정리와 글쓰기(웹짱과 함께하는 스프링)

https://youtu.be/y_wNLIVHpNg

스프링 게시판 강의 CHAPTER 2. - 스프링 프로젝트에 Oracle 및 Mybatis 연결방법 [사케누]

https://youtu.be/WdgDWbLCOUg

Spring Framework 5.4, MyBatis 3.5.5, Oracle 19g 연동하기 - 5가지 방법

https://youtu.be/WYjVmIplNyI

Spring Framework 5.4, Mybatis 3.5.5, Oracle 19g, XML설정 및 Java맵핑

https://youtu.be/h4ERkEnfm-k

Spring 09장 1 MyBatis 설명 및 스프링 환경 설정

https://youtu.be/KqGoPSr7nn0

------------------------------------------------------------------------------------------------------

[ Java 취업 #72 ] 자바와 Oracle 연동 - 트랜잭션 처리 방법
 https://youtu.be/Ehf_dkd-uhg?list=PLY9pe3iUjRrTzLoSTml9hPxL5kp0qC3SP

[ Java 취업 #71 ] 자바와 Oracle 연동 - 부서정보, 사원정보 테이블 실습
 https://youtu.be/vZomN8aLnIw?list=PLY9pe3iUjRrTzLoSTml9hPxL5kp0qC3SP





반응형
반응형

자바 개발자라면 아래의 지식을 갖져야 편한게(?) 원활하게(?) 일 할 수 있을 것 같습니다.

꾸준히 공부하면 어느 순간에 아래의 역량들을 갖추기 않을 까 생각해봅니다.

1. JAVA FULL STACK 기본 역량

Core Java
Servlet
JSP
Spring
Spring boot
Hibernate
MySQL
React.JS
REST Services
GIT Version Control
JUnit

2. Java Proejct Ideas(수준별 프로젝트)

Easy: Tic Tac  Toe, Calculator, Chess, Type Speed Program

Mid: ATM Machine, Online Banking, Email System, Flappy Bird

Pro: Swing UI, Speech Recognition, Face Detection, VPN

반응형
반응형

여러가지 일(DBA, 인프라관리자, 업무담당자, 작은 전산실 총괄 등)을 하다가 다시 자바 개발자로 돌아 왔습니다.

고급 개발자로 나아가기 위해서는 아래의 책들을 반드시 읽어 봐야 할 것 같아서 구입을 하였습니다.

고급 개발자로 나아갈 시간을 줄여주는 가장 확실한 방법은 독서가 최고인 듯 합니다.

1. Clean Code

- 저자: 로버트 C. 마틴

- 가격: 33,000원

2. Effective Java

- 저자: 조슈아 블로크

- 가격: 36,000원

 - 아직 읽어보지는 않았지만 중급 이상 자바개발자가 되길 원한다면 읽어 봐야할 책인 것 같습니다.

3. 리팩터링

- 저자: 마틴 파울러

- 가격: 35,000원

- 기존 코드의 최적화, 깔끔한 코드 작성 등을 위해서는 반드시 읽어봐야 할 책인 것 같습니다.

관련된 인터넷 강의를 ZERO-BASE에서 강의하는 것이 있는 듯합니다.

선배들의 강의를 들으면 정말 많은 도움이 될 수도 있을 것 같습니다.

그리고 아래의 책도 적당히 얇으면서 중요 내용을 담고 있어서 좋은 것 같습니다.

4. 코어 자바스크립트

- 저자: 정재남

- 가격: 22,000원

반응형

spring Oracle과 mybatis 연동 실습

개발 및 관리/Java 2022. 1. 28. 16:55 posted by HighLighter
반응형


********************************
https://youtu.be/bmLFtrZVnRQ
https://youtu.be/aIAUFDaXAbE
https://youtu.be/y-AHuYVkt6E
https://youtu.be/bepiioZDUN8
https://youtu.be/aIAUFDaXAbE
https://youtu.be/IHdjBXlvNRY
https://youtu.be/Jc9UTY_lcrY
https://youtu.be/joL360SrrtI
https://youtu.be/WdgDWbLCOUg
https://youtu.be/eMuFWW6-8i0
https://youtu.be/c3tQnaNiOAQ
https://youtu.be/WYjVmIplNyI
https://youtu.be/k5g2kK1WQ34
https://youtu.be/lMWwaysjIkI
https://youtu.be/YYlXmkpjRrU
https://youtu.be/J8SEJ9lCDI8
https://youtu.be/3-pszozdXAM
https://youtu.be/K6T6tx9-qI4
https://youtu.be/CCqVKz6RRLs

Programming School

spring Oralce과 mybatis
spring Oracle과 mybatis 연동 실습(회원 목록,등록,수정,삭제)
oracle+mybatis
spring boot oracle mybatis

********************************



********************************
*회원관리의 전체적인 구조
********************************

Controller
 MemberController.java


Service
 MemberService.java 인터페이스
 MemberServiceImpl.java 구현클래스

Model
 MemberDAO.java 인터페이스
 MemberDAOImpl.java 구현클래스
 MemberDTO.java
 memberMapper.xml sql매퍼

View
 member_list.jsp
 write.jsp
 view.jsp

----------------------------------------------------------------------------------------

create table member(
userid varchar2(50) not null primary key,
passwd varchar2(50) not null,
name varchar2(50) not null,
email varchar2(50),
join_date date default sysdate);

insert into member(userid, passwd, name, email) values
('kim','1234','김철수','kim@gmail.com');

select * from member;
commit;

----------------------------------------------------------------------------------------

**********************************
*모델
*model.dt.MemberDTO.java
**********************************

import java.util.Date;

public class MemberDTO{
private String userid;
private String passwd;
private String name;
private String email;
private Date join_date;
}



**********************************
*DAO
*model.dao.MemberDAO.java
**********************************

package com.example.spring01.model.dao;

import java.util.List;

import com.example.spring01.model.dto.MemberDTO;

public interface MemberDAO{
public List<MemberDTO> memberList();
public void insertMember(MemberDTO vo);
public MemberDTO viewMember(String userid);
public void deleteMember(String userid);
public void updateMember(MemberDTO vo);

//비밀번호 체크
public boolean checkPw(String userid, String passwd);
}

----------------------------------------------------------------------------------------


**********************************
*MemberDAO
**********************************

package com.example.spring01.model.dao;

import java.util.List;

@Repository //서버가 startup될 때 이 클래스가 메모리에 자동으로 등록됨
public class MemberDAOImpl implements MemberDAO{
 //로깅 처리를 위한 객체 선언
 private static final Logger loggger = LoggerFactory.getLogger(MemberDAOImpl.class);

 //SqlSession 객체를 개발자가 직접 생겅하지 않고 스프링에서 연결시켜 줌 
 @Inject //의존관계 주입
 SqlSession sqlSession;

 @Override
 public List<MemberDTO> memberList() {
logger.info("memberList called");
// sql mapper에 작성된 sql 코드가 실행됨 (auto commit & close)
return sqlSession.selectList("member.memberList");
 }

 @Override
 public MemberDTO viewMember(String userid) {
  // MemberDTo dto = sqlSession.selectOne("member.viewMember", userid);
  // return dto;
  return sqlSession.selectOne("member.viewMember", userid);
 }

 @Override
 public void deleteMember(String userid) {
sqlSession.delete("member.deleteMember", userid);
 }

 @Override
 public void updateMember(MemberDTO vo) {
sqlSession.update("member.updateMember", vo);
 }


 @Override
 public boolean checkPw(String userid, String passwd) {
boolean result = false;
// mapper에 넘길 값이 2개 이상인 경우 map으로 묶오서 전달
Map<String, String> map = new HashMap<>();
map.put("userid", userid);
map.put("passwd", passwd);
int count = sqlSession.selectOne("member.checkPw", map);
// 리턴값이 1이면 true, 0이면 false
if(count==1) result = true;
return result;
 }



*****************************************************************************************************************************
*****************************************************************************************************************************


**********************************
*service.MemberService.java
*MemberService
**********************************

package com.example.spring01.services;

import java.util.List;

import com.example.spring01.model.dto.MemberDTO;

public interface MemberService{
public List<MemberDTO> memberList();
public void insertMember(MembmerDTO dto);
public MemberDTO viewMember(String userid);
public void deleteMember(String userid);
public void updateMember(MemberDTO dto);

// 비밀번호 체그
public boolean checkPw(String userid, String passwd);
}

----------------------------------------------------------------------------------------

package com.example.spring01.service;

import java.util.List;

@Service
public class MemberServiceImpl implements MemberService{

// MemberDAO memberDao = new MemberDAOImpl();
@Inject // 스프링 컨테이너가 만든 dao 객체가 연결됨 (의존관계 주입)
MemberDAO memberDao;

@Override
public MemberDTO viewMember(String userid) {
 return memberDao.viewMember(userid);
}

@Override
public boolean checkPw(String userid, String passwd) {
 return memberDao.checkPw(userid, passwd);
}

@Override
public void updateMember(MemberDTO dto) {
 memberDao.updateMember(dto);
}
}




----------------------------------------------------------------------------------------

*****************************************************************************************************************************
*****************************************************************************************************************************


컨트롤러 -> 서비스 -> DAO -> mybatis(mapper호출) -> jsp

**********************************
*MemberController
**********************************

package com.example.spring01.controller;

@Controller // 현재 클래스를 Controller Bean으로 등록함
public class MemberController{
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);

@Inject // MemberService 객체가 주입됨
MemberService memberService;
// MemberService memberService = new MemberServiceImpl();

@RequestMapping("member/list.do") // 사용자가 요청하는 주소
public String memberList(Model model) { 
 List<MemberDTO> list = memberService.memberList();
logger.info("회원 목록:" + list);
model.addAttribute("list", list); // 모델에 저장
return "member/member_list"; // 출력 페이지로 포워딩
}

@RequestMapping("member/write.do")
public String write() {  
 return "member/write";
}

// 폼에 입력한 데이터가 MemberDTO dto 변수에 저장됨
// request.getParameter 생략
@RequestMapping("member/insert.do")
public String insert(@ModelAttribute MemberDTO dto) {
            // public String insert(MemberDTO dto, HttpServletRequest request) {
 // String name = request.getParameter("name");
 memberService.insertMember(dto);  
 return "redirect:/member/list.do"; // 목록 갱신
}

// view.do?userid=kim 이라면
// @RequestParam String userid 변수에 kim이 저장됨
@RequestMapping("member/view.do")
public String view(@RequestParam String userid, Model model) {
 // System.out.println("클릭한 아이디:" + userid);
 // info, debug, warn, error
 // logger.info("클릭한 아이디:" + userid);

// 회원정보를 모델에 저장
model.addAttribute("dto", memberService.viewMember(userid));
// view.jsp로 포워딩
 return "member/view"; // view.jsp로 포워딩
}

@RequestMapping("member/update.do")
pblic String update(@ModelAttribute MemberDTO dto, Model model) {
 boolean result = memberService.checkPw(
dto.getUserid(), dto.getPasswd());
 logger.info("비밀번호 확인:"  + result);

if(result) { // 비밀번호가 맞으면
 memberService.updateMember(dto): // 레코드 수정
 return "redirect:/member/list.do"; // 목록으로 이동
} else { // 비밀번호가 틀리면
 MemberDTO dto2 = memberService.viewMember(dto.getUserid));
 dto2.setJoin_date(dto2.getJoin_date()); // 날짜가 지워지지 않도록
 model.addAttribute("dto", dto);
 model.addAttribute("message", "비밀번호가 일치하지 않습니다.");
 return "member/view"; // 수정 페이지로 되돌아감
}

@RequestMapping("member/delete.do")
public String delete(@RequestParam String userid, 
            @RequestParam String passwd, Model mode) {
 boolean result = memberService.checkPw(userid, passwd);
 if(resutl) {
memberService.deleteMember(userid);
return "redirect:/member/list.do";
} else {
 model.addAttribute("message", "비밀번호가 일치하지 않습니다.");
 model.addAttribute("dto", memberService.viewMember(userid));
 return "member/view"; }
      }




*redirect를 하지 않으면 forward가 됩니다. 주소가 안바뀝니다.

*변수명 일치해야 함
테이블필드명 = DTO = FORM

***********************************************
*설명내용
- @ModelAttribute : 폼의 전체 데이터, dto
- @RequestParam : 폼의 개별값
***********************************************


memberService.updateMember 
F3 -> 인터페이스, 바로 소스보기
F4 -> 계층구조보기 -> MemberServiceImpl 선택 -> updateMember 선택


*****************************************************************************************************************************
*****************************************************************************************************************************
























반응형
반응형

Eclipse에서 Spring Boot로 maven을 build 툴로 선택하였습니다.

그리고 DB와 연결하기 위해서 pom.xml에 commons-dbcp 를 추가하면 자동으로 왼쪽의 commons-dbcp-1.4.jar 파일이 다운로드 됩니다. 그래서 DB와 연결 가능합니다.

반응형
반응형

자바(JAVA) JDK 설치 및 환경 변수 설정하는 방법입니다.

1. 오라클 사이트에서 JDK 1.7 다운로드

URL : https://www.oracle.com/java/technologies/downloads/#jdk17-windows


2. 환경변수 설정

https://marobiana.tistory.com/163

 

windows에서 JAVA 환경변수 설정하기

이클립스 프로그램을 사용할 때(자바 개발 시) JAVA가 설치된 위치를 찾게 해주기 위해 환경변수 설정을 해야한다. 제어판 검색 제어판 > 시스템 및 보안 클릭 제어판 > 시스템 및 보안 > 시스템

marobiana.tistory.com

windows에서 JAVA 환경변수 설정하기
제어판 검색
제어판 > 시스템 및 보안 클릭
제어판 > 시스템 및 보안 > 시스템 클릭
제어판 > 시스템 및 보안 > 시스템 > 고급 시스템 설정 클릭


고급 > 환경 변수 클릭

JAVA_HOME, CLASSPATH 내용 추가


아래쪽 새로 만들기 클릭
확인

3. Eclipse 다운로드 받기

https://www.eclipse.org/downloads/

 

Eclipse Downloads | The Eclipse Foundation

The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 415 open source projects, including runtimes, tools and frameworks.

www.eclipse.org

 

반응형
반응형

--------------------------------------------------------------------------------------------------------------------

1. request.getContextPath() 함수 = 프로젝트 Path만
예시)  http://localhost:8080/project/list.jsp
[return]        /project

--------------------------------------------------------------------------------------------------------------------

2.  request.getRequestURI() 함수 = 프로젝트 + 파일경로까지
예시)  http://localhost:8080/project/list.jsp

[return]        /project/list.jsp

String url = request.getRequestURI.split("/");
String Name = url[url.length -1];       // list.jsp

--------------------------------------------------------------------------------------------------------------------

3. request.getRequestURL() 함수 = 전체 경로를
예시) http://localhost:8080/project/list.jsp
[return]   http://localhost:8080/project/list.jsp

--------------------------------------------------------------------------------------------------------------------

4. request.ServletPath() 함수 = 파일명만
예시) http://localhost:8080/project/list.jsp
[return] /list.jsp

--------------------------------------------------------------------------------------------------------------------

5. request.getRealPath("") 함수 =서버 or 로컬 웹 애플리케이션 절대결로
예시) http://localhost:8080/projectname/list.jsp

[return]         c:\project\webapps\projectname\

--------------------------------------------------------------------------------------------------------------------

반응형
반응형
메소드 Return Type Description
getString(String name)
getString(int index)
String 지정한 값을 String으로
getCharacterStream(String name)
getCharacterStream(int index)
java.io.Reader 지정한 값을 Stream 형태로Long varchar 타입 읽어 올 때
getInt(String name)
getInt(int index)
int Int 타입으로 읽어 올 때
getLong(String name)
getLong(int index)
long Long 타입으로
getDouble(String name)
getDouble(int index)
double Double 타입으로
getFloat(String name)
getFloat(int index)
float Float 타입으로
getTimestamp(String name)
getTimestamp(int index)
java.sql.Timestamp Timestamp 타입으로SQL TIMESTAMP 타입을 읽어 올 때
getDate(String name)
getDate(int index)
java.sql.Date Date 타입으로SQL DATE 타입을 읽어 올 때
getTime(String name)
getTime(int index)
java.sql.Time Time 타입으로SQL TIME 타입으로 읽어 올 때
반응형