공부일지
231121 (JSP)
CD가참둥그렇다
2023. 11. 21. 17:50
실습용 프로젝트 생성시 초기 준비
- 빌드패스 - project facets에서 자바 버전 확인
- javaEE에서 deployment…로 web.xml 생성
- configure에서 maven 프로젝트로 변경
- pom.xml에 dependencies를 추가
- tomcat 서버에서 add and remove를 통해 서버에 구동될 프로젝트 선택
- 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 공식 문서의 설명서를 참고하여 환경설정해준다.
- https://mybatis.org/mybatis-3/ko/getting-started.html
- xml 파일을 만들고 sqlSessionFactory의 xml에 추가할 부분을 복사하여 xml에 붙여넣기 한다.
<?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을 생략할 수 있다.