728x90
❓ Mybatis란?
- 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크
분류 | ORM (Object Relational Mapping) |
SQL Mapper |
종류 | JPA/Hibernate, OpenJPA, EclipseLink, TopLink Essentials | iBatis, MyBatis, Oracle SQLJ |
기능 | 객체와 관계형 데이터베이스의 데이터를 매핑 | 객체와 SQL문을 매핑하여 데이터를 객체화하는 기술 |
장점 | - 객체 모델만을 이용 객체지향적으로 프로그래밍 가능 - SQL을 직접 작성하지 않아도 됨 (개발시간 단축) - 유지보수 용이 - DBMS 종속성 X |
- 관계를 정확히 명시 - 복잡한 SQL문도 처리할 수 있음 |
단점 | - 데이터의 관계가 복잡할 수록 구현하기 어려움 - 복잡한 SQL문을 처리하기 어려움 |
- SQL 구문을 직접 작성해야함 - 유지보수 하락 -DBMS의 종속성이 높음 |
Springboot와 mybatis 이용 웹프로젝트 layer
프로젝트 생성
라이브러리 선택
src/main/java 설정
controller, dto, mapper, service 패키지 생성
2. Member dto 생성
더보기
package ksmart42.mybatis.dto;
public class Member {
private String memberId;
private String memberPw;
private String memberName;
private String memberLevel;
private String memberEmail;
private String memberAddr;
private String memberRegDate;
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getMemberPw() {
return memberPw;
}
public void setMemberPw(String memberPw) {
this.memberPw = memberPw;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public String getMemberLevel() {
return memberLevel;
}
public void setMemberLevel(String memberLevel) {
this.memberLevel = memberLevel;
}
public String getMemberEmail() {
return memberEmail;
}
public void setMemberEmail(String memberEmail) {
this.memberEmail = memberEmail;
}
public String getMemberAddr() {
return memberAddr;
}
public void setMemberAddr(String memberAddr) {
this.memberAddr = memberAddr;
}
public String getMemberRegDate() {
return memberRegDate;
}
public void setMemberRegDate(String memberRegDate) {
this.memberRegDate = memberRegDate;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Member [memberId=");
builder.append(memberId);
builder.append(", memberPw=");
builder.append(memberPw);
builder.append(", memberName=");
builder.append(memberName);
builder.append(", memberLevel=");
builder.append(memberLevel);
builder.append(", memberEmail=");
builder.append(memberEmail);
builder.append(", memberAddr=");
builder.append(memberAddr);
builder.append(", memberRegDate=");
builder.append(memberRegDate);
builder.append("]");
return builder.toString();
}
}
3. MemberMapper 인터페이스 생성
package ksmart42.mybatis.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import ksmart42.mybatis.dto.Member;
@Mapper
public interface MemberMapper {
//회원 전체목록 조회
public List<Member> getMemberList();
}
5. memberServiece 설정
package ksmart42.mybatis.service;
import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ksmart42.mybatis.dto.Member;
import ksmart42.mybatis.mapper.MemberMapper;
@Service
@Transactional
public class MemberService {
//DI 의존성 주입 생성자 메서드 주입방식
private MemberMapper memberMapper;
public MemberService(MemberMapper memberMapper) {
this.memberMapper = memberMapper;
}
public List<Member> getMemberList(){
List<Member> memberList = memberMapper.getMemberList();
return memberList;
}
}
6. memberController 설정
package ksmart42.mybatis.controller;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import ksmart42.mybatis.dto.Member;
import ksmart42.mybatis.service.MemberService;
@Controller
@RequestMapping("/member")
public class MemberController {
private static final Logger log = LoggerFactory.getLogger(MemberController.class);
//DI 의존성 주입 생성자 메서드 주입방식(bean으로 등록 되어 있기 때문에 가능한 방법)
private MemberService memberService;
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
@GetMapping("/memberList")
public String getMemberList(Model model) {
log.info("회원목록요청"); //로그
List<Member> memberList = memberService.getMemberList();
model.addAttribute("title", "회원목록조회");
model.addAttribute("memberList", memberList);
return "member/memberList";
}
}
src/main/resources 설정
1. application.property 설정하기
- 서버포트, thymeleaf cache 새로고침, db연결정보, mybatis 설정, log 정보 설정 등
(2022.02.22 - [Framework/Spring] - (Springboot) log4j log4j 설정 글)
#서버 포트 설정
server.port=80
#thymeleaf cache 설정여부 false
spring.thymeleaf.cache=false
#db 연결정보 log4jdbc datasource 설정
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/ksmart42db?serverTimezone=UTC&characterEncoding=UTF8
spring.datasource.username=ksmart42id
spring.datasource.password=ksmart42pw
#mybatis 설정
#mapper xml 파일 위치 경로 설정 classpath: == src/main/resources/
mybatis.mapper-locations=classpath:mapper/**/*.xml
#mapper dto 설정
mybatis.type-aliases-package=ksmart42.mybatis.dto
# log 설정파일 위치
logging.config=classpath:logback-spring.xml
# spring banner 파일 경로 설정
spring.banner.location=classpath:templates/banner.txt
4. MemberMapper.xml 설정
Mybatis ArchitectureInDetail 페이지
위의 소개 페이지 또는 구글 검색등으로 mapper 태그 긁어서 MemberMapper.xml 파일에 붙여넣기
2. 자동완성으로 생기는 <mapper></mapper> 태그의 namespace속성에
위에서 만들어둔 memberMapper인터페이스 경로를 써준다.
3. 멤버의 목록을 조회하기 위해서 select 문을 써준다.
member 객체의 dto setter,getter 메서드와 맞춰주기 위해서 as 이용
▼ 완성된 memberMapper.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="ksmart42.mybatis.mapper.MemberMapper">
<select id="getMemberList" resultType="Member">
SELECT
m.m_id AS memberId
,m.m_pw AS memberPw
,m.m_name AS memberName
,m.m_level AS memberLevel
,m.m_email AS memberEmail
,m.m_addr AS memberAddr
,m.m_reg_date AS memberRegDate
FROM
tb_member AS m;
</select>
</mapper>
7. memberList.html 작업하기
(thymeleaf 레이아웃 나누기 > )
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layout/default}">
<!-- 사용자 정의 title -->
<th:block layout:fragment="customTitle">
<title th:text="${title}"></title>
</th:block>
<th:block layout:fragment="customContents">
<table border="1">
<thead>
<tr>
<th>회원아이디</th>
<th>회원비밀번호</th>
<th>회원이름</th>
<th>회원등급</th>
<th>회원이메일</th>
<th>회원주소</th>
<th>회원등록날짜</th>
</tr>
</thead>
<tbody>
<tr th:if="${not #lists.isEmpty(memberList)}" th:each="l : ${memberList}">
<td th:text="${l.memberId}"></td>
<td th:text="${l.memberPw}"></td>
<td th:text="${l.memberName}"></td>
<td th:text="${l.memberLevel}"></td>
<td th:text="${l.memberEmail}"></td>
<td th:text="${l.memberAddr}"></td>
<td th:text="${l.memberRegDate}"></td>
</tr>
<tr th:unless="${not #lists.isEmpty(memberList)}">
<td colspan="7">등록된 회원의 정보가 없습니다.</td>
</tr>
</tbody>
</table>
</th:block>
</html>
완성된 모습
현재 db목록
'Framework > SpringBoot' 카테고리의 다른 글
(Springboot) Thymeleaf 객체 바인딩, 유틸리티 객체 (0) | 2022.02.22 |
---|---|
(Springboot) Thymeleaf 이클립스 자동완성 플러그인 설치하기 (0) | 2022.02.22 |
(Springboot) 🅲 Mybatis 회원 가입 (0) | 2022.02.22 |
(Springboot) log4j (0) | 2022.02.22 |
(Springboot) hello spring boot 찍기 (0) | 2022.02.08 |