SpringMybatis

RedNine·2023년 2월 22일
0

스프링

목록 보기
6/17
post-thumbnail

Mybatis

xml파일을 이용해서 SQL관리(DB관리를) 해주는 프레임워크(crud까지 처리)이다. 메서드 호출과 연관이 있다.

  • 프레임워크 : 1.스프링 2.Mybatis 3.SpringTiles

장점

  • 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을 복사
      1. Mybatis으로 변경->lib->Spring 3.x이상으로 설정->jar파일을 복사
      1. DB연동->WEB-INF/jdbc.properties파일 생성=>web.xml에서 읽어들임

라이브러리와 WEB-INF(1)

  • 반드시 엔진은 끄고 진행하기
  • 향후 메이븐으로 변경할 예정

DB연동

  • web.xml에서 불러오는 환경설정을 하기 때문에 같은 폴더에 저장하는 것이 불러오는 속도가 빠르다.

xml 설정

dataAccessContext-local.xml(2)

  • 메모리에 올려주는 역할을 한다.
  • web.xml로 보낸다.
  • DB연결
      1. jdbc.properties파일 읽어오기(메모리에 올려주는 역할을 하는 빈즈를 등록)
      1. jdbc.properties파일에서 각각의 키명에 해당되는 값을 메모리에 저장
      • 메모리 해제시키는 destroy-method="프로그램 종료시 자동으로 호출할 메서드명" 메서드 지정
      • close메서드(메모리 해제)
  • DB관리
      1. Mybatis을 이용해서 DB관리(SqlSessionFactoryBean)
      1. 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 관계)

web.xml(3) - (추가)

외부의 DB에 관련된 환경설정파일을 불러오는 경우(관련 클래스, 매개변수(파일의 정보))

  • 바늘과 실의 관계(has a 관계)
  • param-name(매개변수명)
  • param-value(경로포함해서 불러올 파일명(상대경로))

    외부의 DB관련 설정파일을 메모리에 로딩에 관련클래스 지정
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

=> DB연결준비 끝!!

SqlMapConfig.xml


DB접속된 후에 DB관리(테이블의 데이터 추가, 수정, 검색, 삭제)등을 작업하기 위해서
필요로하는 환경설정 파일(테이블 하나당 파일로 저장해서 불러온다.)

  • configuration
    • typeAliases 생략가능(패키지가 긴 DTO클래스이름의 별칭을 부여할때사용)
    • typeAliases 태그등록->별칭을 등록(패키지명이 긴 자바빈즈파일(DTO)
      형식) <typeAlias type="상위패키지명...불러올 클래스명" alias="별칭명" />
    • type->"패키지명...클래스명(DTO) alias="별칭명"
  • mapprs : 접속시 불러올 테이블에 대한 정보 xml파일을 지정해줄 때 사용하는 태그이다.
    • 테이블의 갯수만큼 xml파일을 만들어서 불러온다.
  • kang.BoardCommand -> board로 불러 오겠다는 별칭을 지정했다.
  • 참고) mapper resource는 '/'를 사용하고 class는 '.'을 사용한다.

글쓰목록보기

Board.xml

  • 사람이 직접 작성하면 에러가 나기 때문에 불어와야 한다.(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구문을 작성했다.

BoradCommand클래스설정(DTO 설정)

BoardDAO(새로작성)

  • 게시판 프로그램에서 공통으로 사용할 메서드를 추상메서드로 선언 한다.

SqlMapBoardDao

  • 인터페이스 BoardDAO 상속
  • SqlSessionDao 클래스 상속
  • SqlSessionDaoSupport 상속
    getSqlSession()을 이용해서 SqlSession객체를 얻어오기 편하다.

board-servlet.xml에서 요청명령어 등록하기(Mybatis설정으로 변경)

  • 주석처리 후 변경


    => DB연결, 환경설정 끝
    ListActionController 설정

    list.jsp설정

글목록보기 결과 확인


글쓰기

구현순서

  1. BoardDAO 인터페이스->공통 추상 메서드 선언->write()
  2. SqlMapBoardDAO클래스 ->메서드 작성->xml와 연관->메서드 호출
  3. Board.xml -><insert>,<update>,<delete>,<select>
  4. 각각의 ActionController 필요->메서드 호출

BoardDAO(추가)

Board.xml

  • SqlMapBoardDao의 getNewNum()에서 Board.xml의 id를 가져온다.
  • select는 반환값이 있어서 resultType=""을 사용했다.
  • 멤버변수 이름이랑 DTO or VO의 매개변수 이름이 같아야 한다. #{매개변수}
    -> data(DB)에서 값을 한번에 받아와 Getter Method로 각각 불러온다.

SqlMapBoardDao

  • selectOne -> 레코드 한개만 또는 각 필드(문자열, 숫자,,)모든객체
  • 형식)sqlSession객체명.selectOne("실행시킬 sql id값")
  • Object 를 반환 받아 -> Integer로 형변환을 한다. -> int
  • insert태그 => sqlSession객체명.insert("실행시킬 id명, 전달할 매개변수명")
  • id는 Board.xml의 id를 가져오며, id 이름은 메서드명과는 상관없이 동일하게만 지정해주면 된다.

WriteActionController

  • 현재 들어있는 게시물 번호에 +1을하고 멤버변수에 값을 넣어준다.

글상세보기,글삭제,글수정

BoardDAO

Board.xml

  • 매개변수가 있다면 parameterTyp을 준다.
  • '?'대신에 '#{}'을 사용

SqlMapBoardDao

  • update태그 => sqlSession객체명.update("실행시킬 id명, 전달할 매개변수명")
  • 글삭제 : 형식) sqlSession객체명.delete("실행시킬 구문의 id",전달할 매개변수명)
  • update : data -> getter 호출 -> 각각 넣어준다.

RetriveActionController

  • updateReadcnt에 조회수를 먼저 증가시켜준다.
    readcnt=readcnt+1을 넣어준다.
  • retrieve는 이미 조회수가 증가된 게시물 위에 조회수를 증가했기 때문이다.

retrieve.jsp

UpdateActionController

반환받는지 확인하기

BoardCommand

소스코드 확인

글검색

BoardDAO

SqlMapBoardDao

Board.xml

SearchActionController

  • 검색분야, 검색어는 수동으로 Setter Method 호출
  • 필드에 저장해야 -> #{searchValue}할 수 있다.
  • List list에 통째로 넣는다.

Mybatis에서 매개변수를 받을때 주의할점

현재 상황에서 결과 보기

1.값을 입력(글쓰기,글수정)=>#{매개변수}(=멤버변수와 동일)
=>매개변수가 순수한 값을 입력받는값이 아닌 필드명으로 값을 입력받거나 특수기호
가 포함되는 값을 입력받은 경우->#{매개변수} 사용불가
2.매개변수 받는 위치
필드명 ,특수기호가 포함되는 경우 #{매개변수} =>${매개변수}을 써야 된다.

SpringMybatis(SpringMVC+Mybatis까지 구현됨)

0개의 댓글

관련 채용 정보