공부일지

231121 (JSP)

CD가참둥그렇다 2023. 11. 21. 17:50

실습용 프로젝트 생성시 초기 준비

  1. 빌드패스 - project facets에서 자바 버전 확인
  2. javaEE에서 deployment…로 web.xml 생성
  3. configure에서 maven 프로젝트로 변경
  4. pom.xml에 dependencies를 추가
  5. tomcat 서버에서 add and remove를 통해 서버에 구동될 프로젝트 선택
  6. server.xml에서 Context path를 원하는 이름으로 지정

퍼시스턴스 프레임워크

  • 데이터베이스와 애플리케이션을 연결하여 데이터 베이스 작업을 하고 관리하는 도구 라이브러리 모음
  • JDBC가 반드시 필요하다.
  • 기능
    • ORM(object-Relational Mapping) : 관계형 데이터베이스를 자바의 객체 형태로 사용하는 기법
    • 데이터베이스 연동 관리(Connection Pool) : 연결, 트랜젝션, Sql 생성 등등 처리
    • 쿼리 생성 및 최적화
    • 객체의 상태 변화 추적

퍼시스턴스 프레임워크의 종류

  • Hibernate
    • 장점
      • ORM 기반의 퍼시스턴스 프레임워크. 데이터베이스를 객체지향 프로그래밍 언어와 상호작용하게 만든다.
      • 캐싱, 검증, 내장 쿼리, 내장 언어 및 함수 제공 등 다양한 기능이 많다.
    • 단점
      • 복잡성 : 초기 설정이나 복잡하고 모호한 개념 매핑 설정 등이 필요하다.
      • 오버헤드 : 가끔 너무 많은 기능이 제공되어 메모리를 많이 차지해 속도저하나 충돌이 발생된다.
  • JPA(Java Persistence Api)
    • 장점
      • 표준화 API로 여러 구현체(Hibernate, EclipseLink)를 선택 사용 가능하다.
      • 객체지향적 접근성 : 객체와 데이터베이스 간의 매핑을 지원하여 객체지향적 프로그램이 가능하다.
      • 어노테이션 지원 : 간단한 어노테이션으로 조인 등을 표현 가능하다.
      • 자바 기반의 코드이기 때문에 데이터베이스의 영향을 받지 않는다.
    • 단점
      • 인터페이스 기반이기 때문에 오라클 등의 고급 데이터베이스의 특성을 다루지 못함
      • 복잡한 쿼리를 작성하면 JPA의 제약이 엄청 크게 다가온다. 동적쿼리 등
  • Mybatis
    • 장점
      • 개발자가 직접 SQL을 작성하고 제어하기 때문에 세밀한 제어나 복잡한 쿼리를 작성할 때 유리하다.
      • SQL과 자바 코드가 분리가 되어있어 가독성이 좋고 유지보수가 쉽다.
    • 단점
      • 초기 설정이 까다롭다.(까다로운 순서는 Hibernate, Mybatis, JPA)
      • 자바 코드로 사용하는 기능에 제약이 있을 수 있다.
  • Entity FramWork
    • 특수한 경우가 아니면 사용하지 않는다.(칼들고 협박한다던지..)

mybatis 설정하기

  • maven 저장소에서 jdbc, mybatis를 pom.xml에 넣어주기
  • mybatis 공식 문서의 설명서를 참고하여 환경설정해준다.
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "https://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
      <environments default="development">
        <environment id="development">
          <transactionManager type="JDBC"/>
          <dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
          </dataSource>
        </environment>
      </environments>
      <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
      </mappers>
    </configuration>
    • property의 value를 내 설정에 맞춰 넣는다.
    • properties 파일을 만들어두는 경우 EL코드로 가져올 수 있다.
  • mapper의 요소
    • namespace : sql을 저장한 xml의 이름을 지정한다.
    • id : xml에서 특정 sql의 호출명을 지정한다.
    • resultType : 결과의 반환 타입을 지정한다.
  • mapper의 사용
    • servlet에서 초기화 식을 복사해 붙여넣는다.
    String resource = "org/mybatis/example/mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
    • resource에 mybatis 요소를 가져온 xml의 주소를 입력한다.
    • sql 결과를 호출할 때 sqlSession이 필요하다.
    SqlSession sql = sqlSessionFactory.openSession();//Connection 객체를 이용해서 동작하는걸 대신 해준다.
    		int result = sql.selectOne("testmapper.selectTest");
    		System.out.println(result);
    
    • sqlsession은 sqlsessionfactory.opensession을 이용하여 만들어준다.
    • sql.selectOne처럼 반환받을 타입을 지정하고 파라미터로 namespace.id를 String 형태로 대입하여 쿼리문 결과를 반환받을 수 있다.

select 태그의 규칙

  • id외 resultType을 가진다.
  • resultType으로 특정 클래스를 지정할 때 주소.클래스 이름으로 찾아야 한다.
  • 여러 행에 걸쳐 나오는 결과는 클래스는 그대로 작성 해도 list의 형태로 반환된다.

UNION, UNION ALL, MINUS

  • union : 연결된 두 셀렉트 문의 결과 중 중복행을 제거 후 출력
  • union all : 위와 같으나 중복행 제거가 없어서 더 빠르다.
  • Minus : 비교 후 첫 번째 결과에만 있는 데이터 출력(사용 x, join 이용)

mybatis에서 파라미터를 넘겨받기

  • 단일 파라미터 : String, int 등 변수 1개의 값
  • 다중 파라미터 : Map, List, VO등으로 여러 개의 값을 가지는 경우
  • #{param} : 쿼리문 내부에서 param에 해당하는 값을 대입한다.
  • ${param} : 컬럼 이름 등 내용물을 직접 사용할 때 사용한다.
  • 넘길 때 mapper 주소 뒤에 파라미터를 넘긴다.
  • 단일 파라미터 sql에서 매개변수 이름을 아무렇게 넣어도 인식한다.
  • 다중 파라미터는 hashmap이나 vo를 이용하고, 각 key값과 변수 명을 이용하여 대입할 수 있다.

insert

  • 반드시 작업 후 commit을 해야 한다.
  • sqlSessionFactory.openSession(true)으로 sqlsession을 만들면 오토 커밋 기능이 동작하여 commit을 생략할 수 있다.