일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kakao Oven
- SEQUENCE
- Kakao 지도 API
- SQL Developer
- Jupyter Notebook
- oracle
- SQL
- 자바
- CSV
- 카카오맵
- python 기초
- typing test
- oracle 11g
- 데이터베이스 접속
- MySQL
- Oracle 18c
- Oracle 오류
- 10fastfingers.com
- Usecase Diagram
- database
- ORA-1017
- 유스케이스 다이어그램
- Python
- Set
- The Network Adapter could not establish the connection
- 카카오맵 API
- tuple
- Java
- 매일 타자연습
- 카카오 오븐
- Today
- Total
Another Brain
41일차(7월 15일)_ Mybatis 본문
프로퍼디 . 빌더. 이름.이름.빌드
## 2일차 진행 상황
-- View <==> Controller <==> Service
-- View
>> JSP 동적 페이지 사용하기 :
=> src/main/webapp/WEB-INF/jsp>
=> application.properties view resolver 환경설정
=> pom.xml 의존관계 추가
>> static 문서 사용하기 : html, css, js, img
=> src/main/resource/static>
=> 서브폴더 관리
>> 응답설정 정보 사용하기
=> JSP EL, JSTL
-- Controller
>> 요청매핑 :
=> @RequestMapping(value = "/member/size", method = RequestMethod.POST)
=> @PostMapping("/member/size")
=> @GetMapping("/member/size")
>> 응답
=> 데이터 응답 : String, JSON {key:value, key:value}
@RequestMapping("/url-pattern")
@ResponseBody
=> 페이지 이동 응답
@RequestMapping("/url-pattern")
>> 요청데이터 parameter 가져오기
>> 응답을 위한 설정
=> Model#addAttribute(key, value);
=> ModelAndView#addObject(key, value), ModelAndView#setViewName("응답페이지이름")
## 요청데이터 parameter 가져오기
1. 기존방법 :
-- HttpServletRequest#getParameter()
-- HttpServletRequest#getParameterValues()
2. args DI : domain data
-- public void doXxx(String memberId, String memberPw){}
3. args DI : domain Object
-- public void doXxx(Member dto){}
4. @RequestParam
-- attributes
>> value = "parameter-name"
>> required = true | [false]
>> defaultValue = "value"
======================================
1. DB연결 : MyBatis Framework 사용하기
-- JDBC API : java.sql.*
-- DataSource : javax.sql.*
>> context.xml : DB resource 환경설정
-- DB resource
>> driver="oracle.jdbc.driver.OracleDriver"
>> url="jdbc:oracle:thin:@localhost:1521:XE"
>> username="scott"
>> password="tiger"
-- context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource auth="Container"
driverClassName="oracle.jdbc.driver.OracleDriver"
maxActive="20"
maxIdle="2"
maxWait="-1"
name="jdbc/Oracle11g"
username="scott"
password="tiger"
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@localhost:1521:XE" />
</Context>
==== JDBC 프로그래밍 절차(순서) ====
1. jdbc driver 로딩 => FactoryDao DataSource Connection Pool 위임
2. db 연결 : Connection => FactoryDao DataSource Connection Pool 위임
3. sql 통로 개설 :
>> Statement(빈통로, 동적sql, sql injection 보안 이슈발생, sql 문자열변환 불편, ...)
>> PreparedStatement(전용통로, 정적sql, )
>> CallableStatement(db server 저장된 stored procedure, stored function call 사용)
4. sql 수행요청
>> executeUpdate():int => CUD(insert, update, delete)
>> executeQuery():ResultSet => R(select)
>> execute():boolean => DDL
5. 요청처리
>> 단일컬럼, 다중컬럼, Collection
6. 자원해제 => FactoryDao DataSource Connection Pool 위임
===========================
## MyBatis Framdwork
-- SQL Mapping Framdwork
-- https://mybatis.org/mybatis-3/ko/index.html
## Spring Boot에서 MyBatis, Oracle 사용하기
1. 의존관계 추가
=> 신규 프로젝트 : 선택
=> 기존 프로젝트
>> 추가 선택
>> Spring >> Add Starts >> pom.xml 체킹
2. db resource 환경설정
-- application.properties
# oracle resource
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=scott
spring.datasource.password=tiger
# mybatis : 도메인 멤버변수(memberId)명과 컬럼명(member_id) 규칙준수 전제조건 매핑
mybatis.configuration.map-underscore-to-camel-case=true
3. dbms 구축 : 회원 테이블
-- member 테이블
4. domain 클래스 : 회원 클래스
-- Member.java
-- 테이블 구조에 맞게 되어 있는지 체킹
-- 도메인 멤버변수(memberId)명과 컬럼명(member_id) 규칙준수
## MVC 의존관계
-- View <==> Controller <==> Service <==> DAO(인터페이스) / mapper.xml
-- @Controller
>> @Autowired private MemberService memberService
-- @Service
-- DAO 인터페이스
@Mapper
public interface MemberDao {
public String login(String memberId, String memberPw);
...
}
-- sql mapper.xml
>> 위치 :
=> MemberDao.java 인터페이스와 같은 폴더에 MemberDao.xml
=> src/main/resources> 폴더 밑에 mappers 서브폴더 위치
=> application.properties 에 환경설정
## MemberDao.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.work.dao.MemberDao">
<!-- public String login(String memberId, String memberPw) -->
<select id="login" resultType="String" parameterType="map">
select grade from member where member_id=#{memberId} and member_pw=#{memberPw}
</select>
<!-- public int insertMember(Member dto)
#{mileage, jdbcType=NUMERIC}, #{manager, jdbcType=VARCHAR} null colum config
-->
<insert id="insertMember" parameterType="com.work.dto.Member">
insert into member
values(#{memberId}, #{memberPw}, #{name}, #{mobile}, #{email}, #{entryDate}, #{grade}, #{mileage}, #{manager})
</insert>
</mapper>
@bulider
## MemberDao.java
package com.work.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.work.dto.Member;
@Mapper
public interface MemberDao {
/** 로그인 */
public String login(String memberId, String memberPw);
/** 전체회원 조회 */
public List<Member> selectMemberList();
/** 회원상세조회 */
public Member selectMember(String memberId);
/** 회원가입 */
public int insertMember(Member dto);
}
## 기능구현 순서
1. view : ______.jsp
2. controller 함수 생성
3. service
** 4. dao @mapper interface
** 5. mapper.xml - dao와 같은 패키지
6. controller :
>> 응답설정
>> 응답페이지 이동
7. view : 응답페이지 응답결과처리
## mybatis null 허용 컬럼이어도 parameter가 없는경우(null) 오류 발생
-- 해결방법:
1. sql 컬럼=null
=> 가능은 하지만 해결책은 안됨
2. #{property-name, jdbcType=타입}
=> null을 허용하는 컬럼단위로 표기해야함(불편??)
=> #{mileage, jdbcType=NUMERIC}, #{manager, jdbcType=VARCHAR}
3. application.properties
# mybatis : null parameter 에 대한 jdbcType 설정
mybatis.configuration.jdbc-type-for-null=VARCHAR
'P > Web' 카테고리의 다른 글
55일차 (8월 6일)_ google Colaboratory (0) | 2021.08.06 |
---|---|
42일차(7월 16일)_ logback, mybatis, Session, Interceptor (0) | 2021.07.16 |
39일차(7월 13일)_ Spring Boot 환경설정 (0) | 2021.07.13 |
35일차(7월 7일)_ Front DataSource (0) | 2021.07.07 |
34일차(7월 6일)_ WebUI mini-project 발표 / Servlet & JSP 개요 (0) | 2021.07.07 |