xml파일을 이용해서 SQL관리(DB관리를) 해주는 프레임워크(crud까지 처리)이다. 메서드 호출과 연관이 있다.
- 1.XML로 SQL을 관리하므로 가독성이 높아진다.
- 관리하기가 수월하다.
- 유지하기가 쉽다.
- 2.JDBC 드라이버가 있다면 어떤 DB에서도 사용이 가능하다.
- 3.DB연결 정보의 관리가 용이하다.
- 유지보수 측면에서 탁월하다.
- 4.JavaBean 스타일의 클래스를 지원한다.
- 클래스의 멤버변수=테이블의 필드와 연관(자료형 측면에서)
- 5.여러 개의 DB에 접근이 쉽다.
- 6.Map,Collection,List와 기본형의 래퍼이다.
- SQL구문을 작성할때,매개변수와 반환형은 자바의 기본자료형,객체 자료형을 사용한다.
- (Integer,String등)을 지원한다.
- 7.복잡한 객체 모델등을 쉽게 생성한다.
환경설정이 쉽지 않다.(오타때문에 찾기가 어렵다)
- 1)프로젝트명 변경 : SpringBoard를 WAR파일로 가져와서 SpringMybatis 생성
- 2)Maven을 사용하기전에 lib폴더에 스프링라이브러리 3.x이상
=> lib을 복사
- Mybatis으로 변경->lib->Spring 3.x이상으로 설정->jar파일을 복사
- DB연동->WEB-INF/jdbc.properties파일 생성=>web.xml에서 읽어들임
- 반드시 엔진은 끄고 진행하기
- 향후 메이븐으로 변경할 예정
- web.xml에서 불러오는 환경설정을 하기 때문에 같은 폴더에 저장하는 것이 불러오는 속도가 빠르다.
- 메모리에 올려주는 역할을 한다.
- web.xml로 보낸다.
- DB연결
- jdbc.properties파일 읽어오기(메모리에 올려주는 역할을 하는 빈즈를 등록)
- jdbc.properties파일에서 각각의 키명에 해당되는 값을 메모리에 저장
- 메모리 해제시키는 destroy-method="프로그램 종료시 자동으로 호출할 메서드명" 메서드 지정
- close메서드(메모리 해제)
- DB관리
- Mybatis을 이용해서 DB관리(SqlSessionFactoryBean)
- SqlSessionTemplate(sqlSession객체를 더욱 쉽게 얻어오기 위해서 설정한다.)
1. /WEB-INF/jdbc.properties
2. jdbc.properties파일에서 각각의 키를 분리
- jdbc.properties의 key value 형태를 property 넣기
- ${키명}으로 환경설정이 편해진다.
- BasicDataSource은 connection객체 역할을 함
3.(Mybatis) bean등록(SqlSessionFactoryBean)
- 1) configLcation -> 전체 테이블에 대한 xml파일을 불러올때 사용한다.
- 접속해서 가져올 테이블의 정보를 가져온다.
- 2) dataSource -> 연결할 DB정보를 가진 멤버변수
- 마땅한 이름이 없다면 SqlMapConfig.xml으로 설정
- ref는 2번에 연결할 상대방의 id(dataSource)
4 SqlSessionTemplate(sqlSession객체를 더 쉽게 얻어오기 위해서 설정
- 3번과는 바늘과 실의 관계(has a 관계)
외부의 DB에 관련된 환경설정파일을 불러오는 경우(관련 클래스, 매개변수(파일의 정보))
- 바늘과 실의 관계(has a 관계)
- param-name(매개변수명)
- param-value(경로포함해서 불러올 파일명(상대경로))
외부의 DB관련 설정파일을 메모리에 로딩에 관련클래스 지정<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
=> DB연결준비 끝!!
DB접속된 후에 DB관리(테이블의 데이터 추가, 수정, 검색, 삭제)등을 작업하기 위해서
필요로하는 환경설정 파일(테이블 하나당 파일로 저장해서 불러온다.)
- configuration
- typeAliases 생략가능(패키지가 긴 DTO클래스이름의 별칭을 부여할때사용)
- typeAliases 태그등록->별칭을 등록(패키지명이 긴 자바빈즈파일(DTO)
형식)<typeAlias type="상위패키지명...불러올 클래스명" alias="별칭명" />
- type->"패키지명...클래스명(DTO) alias="별칭명"
- mapprs : 접속시 불러올 테이블에 대한 정보 xml파일을 지정해줄 때 사용하는 태그이다.
- 테이블의 갯수만큼 xml파일을 만들어서 불러온다.
- kang.BoardCommand -> board로 불러 오겠다는 별칭을 지정했다.
- 참고) mapper resource는 '/'를 사용하고 class는 '.'을 사용한다.
- 사람이 직접 작성하면 에러가 나기 때문에 불어와야 한다.(xml)
< 기본적인 속성 >- 1.id(필수)
- sql문장에 종류와 상관없이 필수로 작성(구분인자값)
- 관례(메서드명)->list()
- 2.parameterType(선택)
- SQL구문중에서 매개변수를 입력을 받아서 처리해주는 경우의 SQL구문에 필요하다.
- where조건식
- 입력을 받는 자료형을 쓰게 되어있다.
parameterType="java.lang.String" or"String"
"java.lang.Integer" or "int" or "Integer"
select * from springboard where num=#{매개변수명} <= ?대신에 사용
insert into springboard values(#{매개변수},,,,)
- 3.resultType(선택)
- sql구문을 사용해서 반환값이 있는 경우
- 대부분->select num from springboard (insert,update,delete X)
- resultType="java.lang.Integer" or "int" or "Integer"
1. 글목록보기
- sql문장을 쓰고 ';'을 작성하지 않는다.
- resultType에 kang.BoardCommand을 작성해야 하지만 별칭인 board를 사용했다.
- list()에서 실행할 SQL구문을 작성했다.
- 게시판 프로그램에서 공통으로 사용할 메서드를 추상메서드로 선언 한다.
- 인터페이스 BoardDAO 상속
- SqlSessionDao 클래스 상속
- SqlSessionDaoSupport 상속
getSqlSession()을 이용해서 SqlSession객체를 얻어오기 편하다.
- 주석처리 후 변경
=> DB연결, 환경설정 끝
ListActionController 설정
list.jsp설정
- BoardDAO 인터페이스->공통 추상 메서드 선언->write()
- SqlMapBoardDAO클래스 ->메서드 작성->xml와 연관->메서드 호출
- Board.xml ->
<insert>,<update>,<delete>,<select>
- 각각의 ActionController 필요->메서드 호출
- SqlMapBoardDao의 getNewNum()에서 Board.xml의 id를 가져온다.
- select는 반환값이 있어서 resultType=""을 사용했다.
- 멤버변수 이름이랑 DTO or VO의 매개변수 이름이 같아야 한다. #{매개변수}
-> data(DB)에서 값을 한번에 받아와 Getter Method로 각각 불러온다.
- selectOne -> 레코드 한개만 또는 각 필드(문자열, 숫자,,)모든객체
- 형식)sqlSession객체명.selectOne("실행시킬 sql id값")
- Object 를 반환 받아 -> Integer로 형변환을 한다. -> int
- insert태그 => sqlSession객체명.insert("실행시킬 id명, 전달할 매개변수명")
- id는 Board.xml의 id를 가져오며, id 이름은 메서드명과는 상관없이 동일하게만 지정해주면 된다.
- 매개변수가 있다면 parameterTyp을 준다.
- '?'대신에 '#{}'을 사용
- update태그 => sqlSession객체명.update("실행시킬 id명, 전달할 매개변수명")
- 글삭제 : 형식) sqlSession객체명.delete("실행시킬 구문의 id",전달할 매개변수명)
- update : data -> getter 호출 -> 각각 넣어준다.
- updateReadcnt에 조회수를 먼저 증가시켜준다.
readcnt=readcnt+1을 넣어준다.- retrieve는 이미 조회수가 증가된 게시물 위에 조회수를 증가했기 때문이다.
retrieve.jsp
BoardCommand
소스코드 확인
- 검색분야, 검색어는 수동으로 Setter Method 호출
- 필드에 저장해야 -> #{searchValue}할 수 있다.
- List list에 통째로 넣는다.
현재 상황에서 결과 보기
1.값을 입력(글쓰기,글수정)=>#{매개변수}(=멤버변수와 동일)
=>매개변수가 순수한 값을 입력받는값이 아닌 필드명으로 값을 입력받거나 특수기호
가 포함되는 값을 입력받은 경우->#{매개변수} 사용불가
2.매개변수 받는 위치
필드명 ,특수기호가 포함되는 경우 #{매개변수} =>${매개변수}을 써야 된다.