코드를 객체지향적으로 설명할수있따면 6~7년을 단축할수있다.
doFilter는 왜 또 그냥 쓸쑤 있는데..? 이해가 안돼
인터페이스 존나모르겟어 샹
JDBC프로그래밍 캡슐화 -> 우리가 직접 JDBC API를 사용하는게 아니라 퍼시스턴스 프레임워크를 통해 JDBC API를 호출하는것, 즉 JDBC API를 호출하는 자바 코드를 클래스로 만들어 제공하는 것을 의미한다.
JDBc API를 없애는게 아니라 대신 호출하게 해주는거다!!! 착각하지말 것.
SQL Mapper
SQLID
OR Mapper
HSSQL
스프링 프레임워크들
egovframwork : 정부 관공서에서 많이 씀, 스프링 프레임워크를 가공한 것
anyframe : 삼성이 만들었음.
기존에 있던 시스템을 가리키는 말 : 레거시
src/main/resources
자바소스파일들은 src/main/java에 두고 사용할 리소스들은 리소스 폴더 밑에 둔다.(자바가 사용하는 설정파일들)
자바 프로퍼티
class Board {
int no
int getBoardNo(){...}
void setBoardNo() {...}
String name;
String getWriter() {...}
}
여기서 int, String은 필드(Field)
set,get = 프로퍼티(property) = setter, getter
read/write property = get,set BoardNo()
read only property = get Writer()
* property이름
앞의 get,set을 제거하고 대문자를 소문자로 바꾼다.
=> getBoardNo = "boardNo"
mybatis에서 원시타입 , 래핑클래스 값 꺼내려면 : 파라미터값을 지정하는 이름을 내 맘대로 줘도 된다.
<select id="findByNo" parameterType="java.lang.Integer" resultMap="BoardMap">
select
b.no,
b.title,
b.content,
b.cdt,
b.vw_cnt,
m.no writer_no,
m.name
from pms_board b
inner join pms_member m on b.writer=m.no
where
b.no = #{no} // 이 값 이름을 마음대로 줘도 되지만 의미있는 이름을 지어주는게 좋다.
</select>
sql문에서 파라미터값을 2개로 넘길 수 없으니 Map객체로 받는다.
<select id="findByEmailPassword" parameterType="java.util.Map" resultMap="MemberMap">
select
no,
name,
email,
photo,
tel,
cdt
from pms_member
where email = #{email} and password = password(#{password})
</select>
<association property="owner" javaType="com.eomcs.pms.domain.Member">
<result column="owner_no" property="no"/>
<result column="owner_name" property="name"/>
</association>
</resultMap>
자바타입에 얻고싶은 클래스를 명시하고 프로퍼티에 얻고싶은 값을 입력한다.
<collection property="members" ofType="com.eomcs.pms.domain.Member">
<result column="member_no" property="no"/>
어레이리스트가 members에 들어간다.
번호, 프로젝트명, 시작일 ~ 종료일, 관리자, 팀원
11, aaaProject, 2020-01-01 ~ 2020-02-02, b(787738361), [a(1888442711),b(1754894440),c(1998767043)]
10, test200, 2020-02-02 ~ 2020-03-03, x1(1642030774), [x3(607932305),x4(168366)]
8, test100, 2020-01-01 ~ 2020-01-02, x1(1357563986), []
7, test2, 2020-01-01 ~ 2020-02-02, x1(384587033), []
6, test1, 2020-01-01 ~ 2020-02-02, x1(49752459), []
5, fff, 2020-02-02 ~ 2020-03-03, a(514455215), [a(411506101)]
4, ddd, 2020-01-01 ~ 2020-02-02, a(551479935), [a(1780034814),b(1360657223),c(1905485420)]
3, c, 2020-02-02 ~ 2020-03-03, c(501107890), [a(58940486)]
2, b, 2020-02-02 ~ 2020-03-03, a(959869407), [b(1997859171),c(550402284)]
1, aba, 2020-02-02 ~ 2020-01-01, a(116237769), [x1(1449263511)]
해쉬코드값이 같은 관리자인데도 다 다르다 : 매번 새 객체를 생성한다는 뜻
해결책 : 아래코드
<collection property="members" ofType="com.eomcs.pms.domain.Member">
<id column="member_no" property="no"/>
<result column="member_name" property="name"/>
</collection>
result였던 column을 id로 바꿔준다.
id컬럼이 같으면 같은 데이터로 취급해서 프로젝트 객체를 하나만 만들고 거기에 담는다. 그래서 id컬럼을 이상한 값으로 주면 안됌!
join했던 테이블의 pk를 꼭 들고와야함.
member_project테이블에 멤버 비활성화 컬럼 추가하기
비활성화된 멤버 0으로 출력하게하기 (탈퇴된 회원 게시글이 없어지고 나머지 댓글은 다 보이게 하는 거)
=> taskDaoImpl에서 delete수정
트랜젝션 : 프로젝트와 테스크를 하나로 엮어야만 기능수행이 되도록 하는것. (쇼핑몰 결제..)