자바 스프링(Spring) 기초 - MySQl연결, Mapper , DAOImpl

2023. 4. 20. 14:20·BE/Java [Servlet , Spring]

 

 Spring 스프링 

- 자바 기반 오픈소스 애플리케이션 프레임워크

 

 

📌 핵심기능

IoC(Inversion of Control)
- 객체 생성과 관리의 제어권을 개발자가 아닌 프레임워크가 가지며 객체 간의 의존성을 완화시키는 것을 의미한다.

DI(Dependency Injection)
- loC를 기반으로 객체 간의 의존성을 자동으로 주입하는 것

 

 

  0. DB연결 (mySQL)

- target파일의 pom.xml에서 mysql라이브러리를 추가하는 코드를 작성한다

- <dependencies> 태그 안에 아래 코드 작성 후  Maven Dependencies에서 라이브러리 추가된 것을 확인

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.35</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.8</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.2.2</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

 

  1 . Mapper

(src/main/resources 파일 - mapper패키지)

- XML파일로 생성하며 SQL을 저장하는 공간이다.

<mapper namespace="com.example.mapper.CommentsMapper">
 //SQL문 작성
</mapper>

 

1) namespace 지정 

-  매퍼 인터페이스와 SQL쿼리 파일을 연결하는 역할을 하며 명확한 메서드 호출 및 SQL쿼리 매핑에 중요한 역할을 한다

** 동일 메서드명을 사용하더라도 네임스페이스가 다르면 다른 메서드로 인식됨

 

2) SQL 태그

- 각각의 태그에는 id를 지정해 주며 DAOImplements에서 해당되는 sql의 DML구문을 실행할 수 있다.

- 해당 태그 안에는 각각의 타입에 맞는 sql문을 작성한다.

- 변수는 #{변수}로 담아 사용한다.

 

종류 예시
<select> * 결과를 반환하는 select는 태그 안에 resultType속성을 필수로 사용한다. 값에는 "타입"을 넣어줌
<select id="list" resultType="hashmap">
select * from posts order by id desc limit #{start},#{size}
</select>
<insert> <insert id="insert">
insert into posts(title,body,writer) values(#{title},#{body},#{writer});
</insert>
<update> <update id="update">
update posts set title=#{title}, body=#{body}, date=now() where id = #{id}
</update>
<delete> <delete id="delete">
delete from posts where id = #{id}
</delete>
 ※ hashmap 타입 
- 키와 값으로 이루어진 데이터 저장 자료구조로 다양한 데이터 형식을 저장할 수 있고 null값을 허용한다.
- 데이터 삽입, 삭제, 검색 등의 연산이 빠르고 대용량 데이터 처리에도 효율적이다.
- DB의 데이터를 가져올때 조회 결과를 HashMap을 이용해 메모리에 캐싱할 수 있어 VO를 따로 만들지 않아도 되어 편리함.
- Java에서 사용할 때는 HashMap<String,Object>로 타입을 지정한다 - 키, 값

 

  2. VO (value object)

src/main/java파일 - com.example.domain 패키지)

- 자바 클래스로 생성하며 Getter, Setter메서드를 생성한다.

- 값을 담아주는 용도로 사용하며 DB의 컬럼명과 필드명을 동일하게 작성하는 것이 좋다.

 

  3. DAO (data access object)

(src/main/java파일 - com.example.dao 패키지)

- Java의 인터페이스로 생성하며 DB와 연동하는 코드를 담당한다.

public interface ReviewDAO {
	public List<HashMap<String,Object>> list(int code);
}

-  메소드의 형태만 지정해 주기 때문에 중괄호 열지 X

** 배열 타입은 ArrayList가 아닌 List로 사용한다.

 

  4. DAOImplement

(src/main/java파일 - com.example.dao 패키지)

- DAO에서 정의한 메서드를 구현하기 위한 클래스

@Repository
public class CommentsDAOImpl implements CommentsDAO{
	@Autowired
	SqlSession session;
	String namespace="com.example.mapper.CommentsMapper";

 

1) @Repository 지정 

-  스프링 컨테이너에 빈으로 등록하여 DAO의 메서드를 다른 클래스(컨트롤러)에서 사용할 수 있도록 해준다.

 

2) implements 지정

- 구현할 DAO를 클래스명 뒤에 작성해 준다.

 

3) @Autowired로 주입

- 의존성 주입(DI) 기능을 사용하기 위한 선언으로 빈으로 등록된 클래스의 메서드를 호출하여 사용할 수 있도록 해준다.

Sqlsession  MyBatis에서 제공하는 DB연동을 위한 객체로 DB연결 및 실행 역할을 한다.
namespace  Mapper파일에서 사용되는 네임스페이스로 SQL실행시 사용될 mapper파일 경로를 설정한다.

 

  ※DAO와 Impl을 분리하는 이유  

- 코드 변경이 필요한 경우 DAOImpl의 코드만 변경하면 되어 유지보수성이 높아진다. (코드 변경 범위 최소화)
- DAO인터페이스와 DAOImple의 구현 클래스를 분리하여 유연성을 높일 수 있다.
- Impl은 DB와 연동되지 않아도 Mock객체로 테스트할 수 있기 때문에 테스트 용이성을 높인다.

 

  5. Controller

(src/main/java파일 - com.example.controller 패키지)

- JAVA 클래스로 생성한 Spring MVC컨트롤러로 웹 요청을 처리하는 데 사용된다.

 

** 따로 명시하지 않으면 URL은 기본적으로 GET방식으로 요청된다.

@Controller
@RequestMapping("/comments")
public class CommentsController {
//URL매핑 코드 작성
}

 

1.  @Controller 어노테이션 선언 

-  해당 클래스가 웹 애플리케이션에서 컨트롤러 역할을 한다는 것을 명시해 준다.

** 만약 해당 컨트롤러가 데이터만 출력할 경우 @RestController로 선언해도 된다. (하위에서 @ResponseBody을 쓰지 않아도 됨)

 

2. 상위 @RequestMapping 어노테이션 선언 

- 요청 URL과 매핑될 메서드를 지정하는 데 사용, 클래스 밖에 명시해 줄 경우 하위의 모든 URL메서드에 해당 경로가 기본 적용된다.

** 위의 코드와 같이 작성할 경우 하위에 mapping 한 주소 경로 앞에 /comments가 기본적으로 붙음

 

//URL매핑 코드 예시

@Autowired
CommentsDAO dao;

@RequestMapping("/list.json")
@ResponseBody
public List<HashMap<String,Object>> list(int postid, int page, int size){
return dao.list(postid, page, size);
}

 3. @Autowired 어노테이션 주입 

빈으로 등록된 DAO호출하여 dao객체에 주입시켜 사용한다.

 

 4. 하위 @RequestMapping 어노테이션 선언 

- 해당 URL과 매핑시켜 /comments/list.json경로에 대한 요청처리를 해준다.

** 메서드 안에 return문은 페이지를 출력해야 하는 경우에 사용한다.

 

 5. @ResponseBody 어노테이션 

- 컨트롤러에서 반환되는 데이터를 HTTP응답 본문에 직접 출력하는 경우 사용하며 데이터를 json형태로 변환해 보내줄 수 있다.

** @RestController로 선언된 컨트롤러에는 따로 선언해주지 않아도 된다.

 

//POST 요청

@RequestMapping(value="/insert",method=RequestMethod.POST)
public void insert(CommentsVO vo){
    dao.insert(vo);
}

- value에는 처리해 줄 URL을 작성, method는 RequestMethod.Post로 지정

 

  6. View 생성

- src파일 - main - webapp -  WEB-INF-views에다 JSP파일을 생성한다.

** 외부 이미지, css, js파일은 src - main - webapp - resource파일에다 생성

'BE > Java [Servlet , Spring]' 카테고리의 다른 글

Spring mysql DB와 연결하기 (pom.xml버전변경, root-context.xml 타임존)  (0) 2023.08.03
[이클립스] 자바 라이브러리 JSP활용 - Gson, jstl, cos, mysql-connector  (0) 2023.04.04
핸들바로 JSP 데이터 출력하기 (mysql 데이터 json타입 변환)  (0) 2023.03.31
MVC구조 및 아파치 톰캣 서버를 사용한 JSP & Servlet 파일 생성  (0) 2023.03.31
Oracle(SQL Developer) & JAVA 상품 주문 관리 프로그램 리뷰 - 1. SQL문  (0) 2023.01.24
'BE/Java [Servlet , Spring]' 카테고리의 다른 글
  • Spring mysql DB와 연결하기 (pom.xml버전변경, root-context.xml 타임존)
  • [이클립스] 자바 라이브러리 JSP활용 - Gson, jstl, cos, mysql-connector
  • 핸들바로 JSP 데이터 출력하기 (mysql 데이터 json타입 변환)
  • MVC구조 및 아파치 톰캣 서버를 사용한 JSP & Servlet 파일 생성
시녜's
시녜's
성장중인 새싹 개발자 🌱
  • 시녜's
    개발기록
    시녜's
  • 전체
    오늘
    어제
    • 분류 전체보기
      • FE
        • React
        • javascript(jQuery)
        • HTML & CSS
      • BE
        • Java [Servlet , Spring]
        • C & C++
        • Node.js
        • node.js
        • SQL (Oracle, mysql)
      • CS
        • 프로그래밍 이론(정보처리기사)
      • Etc
        • 코딩 챌린지
        • 개발 성장 일지
        • 코딩테스트
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코테기초
    스프링
    CharAt함수
    코딩기초
    자바배열
    리액트
    제이쿼리
    자바조건문
    백준브론즈
    자바
    백준
    코딩입문
    자바반복문
    코딩테스트
    백준단계별문제
    React
    html
    javascript
    자바스크립트
    jsp
    코딩테스트입문
    자바문자열
    자바기초
    백준문제풀이
    백준코딩테스트
    mysql
    코테
    jquery
    프로그래밍
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
시녜's
자바 스프링(Spring) 기초 - MySQl연결, Mapper , DAOImpl
상단으로

티스토리툴바