WEB Application

20/09/17 웹 프로그래밍 기초 (프레임워크, iBatis, MyBatis )

Tech Signal 2020. 9. 17. 17:26

<프레임워크?>

Java: OOPL

DB: RDBMS

 

데이터를 표현하는 방식이 다름

객체 <-> 튜플, 릴레이션

 

프레임워크의 사용방법에 집중하기보다 동작구조의 원리를 보아야함

프레임워크: 미리 짜놓은 코드의 집합

 

=>프레임워크: IoC(Inversion of Control)됨, DI(Dependency Injection)패턴을 따르게 됨. Control권한이 역전되어 이제 개발자는 프레임워크를 따라야함

 

프레임워크와 라이브러리의 차이: Control이 inversion됐냐 안됐냐. e.g. common-lang3(라이브러리) 쓸때 우리는 우리 맘대로 했는데 iBatis의 구조는 개발자가 따라야만 함.


<IBatis와 MyBatis의 역할>

1. SQLMapper로서의 역할

  - 커넥션과 쿼리객체를 대신 생성. (ibatis: #인라인파라미터# 를 pstmt의 ?로 바꾼다) 

        커넥션을 위해서는 DB의 username, pw 등을 줘야함 (sqlConfig.xml: configuration file)

        쿼리객체를 위해서는 쿼리, 쿼리ID를 줘야함 (query mapping file)

2. DataMapper로서의 역할

  - 생성된 쿼리 객체들을 Map에 저장(모든 쿼리는 id를 식별자로 가지고있음)

  - consumer로부터 요청이 오면 db가 쿼리 실행하고 보낸 결과를 ibatis가 받아서 변환, 매핑

 

2가지 라이브러리 씀 SqlSession이랑 SqlSessionFactory(싱글톤)

 

SqlSession = 매 트랜잭션마다 다른 sqlSession 씁니당 (non-Singleton)

 

+ Persistence Layer 지원 framework


Mybatis쓸때

1. Jar넣고 XML에서 sqlmapConfig.xml 생성 (for Connection)

2.  SqlSessionFactory 빌드하기

뫄뫄가 Mapper proxy 생성해줌

 

Mybatips

 

NULL 데이터 있으면

iBatis 공백으로 치환해서 넣음 => 큰일 나죠~~~

MyBatis NULL 그대로 넣기 위해 #{mem_hp, jdbcType=VARCHAR} 이런식으로 해줌 

 


세션이 힘들지 않게 해주기위해 최대한 가볍게 인증정보를 구성하라

만약 회원가입창(registForm.jsp)를 이용해 회원정보 수정을 한다면?

req.setAttribute("command", "update") 로 지금 뭘 할건지 구성

 

command가 update면

registForm.find("input[name]").prop("readonly", true); => name이 있는 인풋들을 찾아 readonly 가 되게 함

registForm.find("input.editable").prop("readonly", false); => editable 속성을 가진 인풋을 찾아 readonly 해제

IMemberDAO.class <-- 맵퍼 프록시 (진짜 클래스가 아님)

 

+최프때 customException 적극 활용하기