**@Autowired
=>동일한 자료형의 bean이 있으면 자동으로 주입시켜주는 어노테이션
=>클래스 안에서 변수를 선언하고 위에 @Autowired를 추가하는 형태로 작성
=>이 어노테이션 아래 선언한 변수는 setter메소드를 만들지 않아도 자동으로 주입이 됩니다.
=>이 어노테이션이 작성되면 반드시 동일한 자료형이 bean이 생성되어야 합니다.
bean이 없으면 bean이 없다고 예외가 발생
동일한 자료형의 bean이 2개 이상이어도 예외가 발생
=>나중에 bean을 생성할 거라면 @Autowired(required= false)를 설정하면 예외가 발생하지 않음
=>동일한 자료형의 bean이 2개 이상인 경우에는@Autowired아래에 @Qulifier(bean의 id)를 추가하면됩니다.
=>jdk 1.8 이상을 사용하는 경우에는 @Resource(name=빈의 아이디)를 이용해서도 설정 가능
=>inject라는 라이브러리를 추가하면 @Inject로도 주입을 받을 수 있습니다
Maven- build tool
spring-java Framework
실습
1.spring을 사용하는 maven프로젝트 생성- java application프로젝트
=>sts나 eclipse에 sts 플러그 인을 설치하고 [Spring Legacy Project]- [Spring Simple Mavern]프로젝트를 생성
프로젝트가 제대로 만들어지지 않고 MF파일만 생성
1) Project를 선택하고 Mavern프로젝트로 변환
=>프로젝트를 선택하고 마우스 오른쪽을 클릭한 후 [Cofigure]-[Convert to Maven Project]
=>프로젝트에 M이 보이고 pom.xml파일이 생성
2) Project에서 spring을 사용할 수 있는 설정을 추가
=>pom.xml파일의 project태그 안에 추가
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>spring</groupId>
<artifactId>spring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 이 코드를 pom.xml 파일에 붙여 넣습니다. -->
<!-- 자주 사용하는 버전들의이름을 변수로 등록해두는 것이 properties입니다.
없다고 해서 되지 않는 것은 아니다.-->
<properties>
<!-- Generic properties -->
<!-- 자바 버전 -->
<java.version>1.8</java.version>
<!-- 소스 코드와 출력되는 결과의 인코딩 설정 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Spring -->
<!-- spring 버전 3-5까지 4.0.1, 5.0.7 -->
<spring-framework.version>5.0.7.RELEASE</spring-framework.version>
<!-- Hibernate / JPA(요즘에는 ) :하이버네이트-->
<hibernate.version>4.2.1.Final</hibernate.version>
<!-- Logging -->
<!-- 로그 라이브러리 버전 -->
<logback.version>1.0.13</logback.version>
<slf4j.version>1.7.5</slf4j.version>
<!-- Test -->
<!-- junit버전을 4.12이상 사용하는 것을 권장 -->
<junit.version>4.12</junit.version>
</properties>
<!-- 중앙 저장소 이외에서 다운로드 받아야 할 때 설정: 다운로드 받는 서버를 설정 -->
<repositories>
</repositories>
<!-- 실제 사용할 라이브러리를 설정`-->
<dependencies>
<!-- Spring and Transactions -->
<!-- Spring 기본 라이브러리 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<!-- spring트랜잭션 라이브러리 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<!-- Logging with SLF4J & LogBack -->
<!-- 로그 라이브러리 -->
<!-- compile할때만 사용한다. 끝나면 없어진다. -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>compile</scope>
</dependency>
<!-- runtime 실행할 때 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<scope>runtime</scope>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- Test Artifacts -->
<!-- spring test -->
<!-- 이 라이브러리들은 test할 때만 존재하고 배포할 때는 자동으로 없어집니다. -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-framework.version}</version>
<scope>test</scope>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2 하는 자바 버전 변경
=>프로젝트를 선택하고 마우스 오른쪽을 클릭해서 [Build Path]-[Condigure Build Path]를 선택
=>JRE System Libarry를 선택하고 Edit를 눌러서 원하는 버전으로 변경 - 1.8 이상으로 변경
3 일반 프로젝트 구조
Dao -> service ->controller
1) Dao클래스를 만들고 메소드 1개를 추가
=>di.Dao
public class Dao {
public void insert() {
System.out.println("데이터 삽입 성공");
}
}
2) Service 클래스를 만들고 메소드를 1개 추가
=>di.Service
=>Dao 클래스의 인스턴스를 생성
package di;
public class Service {
//서비스가 Dao를 사용
private Dao dao;
public Dao getDao() {
return dao;
}
public void setDao(Dao dao) {
this.dao = dao;
}
public void insert() {
dao.insert();
}
}
3) Controller클래스를 추가하고 작성
package di;
public class Controller {
private Service service;
public Service getService() {
return service;
}
public void setService(Service service) {
this.service = service;
}
public void insert() {
service.insert();
}
}
4) Main메소드릉를 소유함 Main클래스를 만들고 작성
5 Spring에서는 개발자가 직접 생성자를 호출해서 인스턴스 만드는 것을 권장하지 않음
=>개발자가 클래스를 만들 때 디자인 패턴을 적용해서 만들고 수명 주기를 직접 관리해야 합니다.
클라이언트는 필요할 때 만들어야 한다.
1) Spring bean configuration파일을 추가하고 작성
app.xml
<!-- id는 개발자가 정하는 구별하기 위한 이름이고 class는 인스턴스를 생성할 클래스이름 -->
<bean id ="dao" class="di.Dao"></bean>
<bean id="service" class="di.Service"/>
<bean id="controller" class="di.Controller"/>
2) main 메소드 수정
//spring Bean설정 파일의 내용 가져오기
GenericXmlApplicationContext context = new GenericXmlApplicationContext("classpath:app.xml");
//설정 파일에서 bean 가져오기
Dao dao = context.getBean("dao",Dao.class);
Service service = context.getBean("service", Service.class);
service.setDao(dao);
Controller controller = context.getBean("controller", Controller.class);
controller.setService(service);
controller.insert();
context.close();
6 DI(Dependency Injdection -의존성 주입)
=>다른 클래스의 객체를 외부에서 생성해서 대입해주는 것
=>생성자를 이용하는 방법과 프로퍼티(setter)를 이용하는 방법
=>Spring 에서는 의존성 주입도 자바 코드가 아니라 설정에서 가능합니다.
<bean id="아이디" class="클래스경로">
<constructor-arg value ="값" />또는
<constructor-arg><ref bean ="다른 bean아이디"></constructor-arg>
<property name ="프로퍼티이름" value ="값" /> 또는
<property name ="프로퍼티이름"><ref bean="다른 bean 아이디"/></propery>
</bean>
1) app.xml을 수정
<bean id ="dao" class="di.Dao"></bean>
<bean id="service" class="di.Service">
<property name="dao">
<ref bean ="dao"/>
</property>
</bean>
<bean id="controller" class="di.Controller">
<property name="service">
<ref bean="service"/>
</property>
</bean>
2) main 메소드 수정
//spring Bean설정 파일의 내용 가져오기
GenericXmlApplicationContext context = new GenericXmlApplicationContext("classpath:app.xml");
//설정 파일에서 bean 가져오기
Dao dao = context.getBean("dao",Dao.class);
Service service = context.getBean("service", Service.class);
//설정 파일에서 주입을 했다면 주입하는 코드가 필요 없습니다.
//자바 코드는 없어지고 중간과정은 코드에서 사용하지 말자
//필요한 것만 사용
//service.setDao(dao);
Controller controller = context.getBean("controller", Controller.class);
//controller.setService(service);
controller.insert();
context.close();
7 Autowired
=>변수 위에 @Autowird를 추가하면 동일한 자료형의 bean이 있으면 자동으로 주입
setter도 필요없습니다.
=>어노테이션을 이용한 설정을 사용할려면 spring설정파일에 <context:annotaion-config/>가 추가되어야 합니다.
1)service클래스 수정
public class Service {
//서비스가 Dao를 사용
@Autowired //Dao가 클래스 타입의 bean이 있으면 자돋으로 주입
private Dao dao;
/*
public Dao getDao() {
return dao;
}
public void setDao(Dao dao) {
this.dao = dao;
}
*/
public void insert() {
dao.insert();
}
}
2)controller클래스 수정
public class Controller {
@Autowired
private Service service;
/*
* public Service getService() { return service; }
*
* public void setService(Service service) { this.service = service; }
*/
public void insert() {
service.insert();
}
}
3) app.xml수정
=>context namespace를 추가
<bean id ="dao" class="di.Dao"></bean>
<bean id="service" class="di.Service"></bean>
<bean id="controller" class="di.Controller"></bean>
<!-- namespace가 있어야 한다. -->
<!-- 어노테이션 설정을 적용하기 위한 태그 -->
<context:annotation-config></context:annotation-config>
8 bean의 자동 생성
<context:component-scan base-package ="패키지이름" />
=>패키지에 속한 클래스 중에서 클래스 선언 위에 @Componet, @Controller, @Service, @Repository어노테이션이 추가된 클래스의 beam을 자동 생성
이 때 bean의 id는 클래스 이름의 첫글자를 소문자로 변경한 것입니다.
bean 을 만드는 코드를 쓸 필요없다.
1)controller, service, dao클래스 위에 @Component추가
2) app.xml수정
3)Main 클래스 수정
//spring Bean설정 파일의 내용 가져오기
GenericXmlApplicationContext context = new GenericXmlApplicationContext("classpath:app.xml");
//설정 파일에서 bean 가져오기
//Dao dao = context.getBean("dao",Dao.class);
//Service service = context.getBean("service", Service.class);
//설정 파일에서 주입을 했다면 주입하는 코드가 필요 없습니다.
//자바 코드는 없어지고 중간과정은 코드에서 사용하지 말자
//필요한 것만 사용
//service.setDao(dao);
Controller controller = context.getBean("controller", Controller.class);
//controller.setService(service);
controller.insert();
context.close();
**spring Mavern Project 의 테스트
=>Sprigng Project에서 테스트는 JUnit 과 Spring-test 라이브러리를 이용
=>테스트는 점점 중요하게 평가받는데 최근에는 TDD(Test Driven Development)라는 개발 방법론도 등장
예전에는 어떤 기능을 전부 완성하고 테스트를 수행했습니다.
에러나 예외가 발생하면 디버깅하기가 어려웠고 웹 프로젝트 같은 경우는 거의 모든 부분을 완성해야 테스트를 할 수 있었음
어떤 기능이 있으면 작은 부분으로 쪼개서 가장 작은 부분 부터 제대로 수행되는지 테스트를 하고 이 코드가 테스트를 통과하면 다음 부분을 붙이는 형태로 프로그래밍을 하는 방식이 TDD입니다.
생년월일을 입력받아서 나이 계산
=>생년월일을 입력받기
=>올해 년도 가져오기
=> 올해 년도에서 생년월일 빼서 계산
내가 할 수 있는 최소한 부분을 나누어서 하기
***
**
*
**
***
SPRING TEST어려운 것은 설정파일이다. APP.XML
설정파일의 내용을 실행하도록 해야 한다.
=>SPRING에서 설정 파일에 있는 내용을 읽어서 테스트하는 방법
1. Test클래스를 생성하고 상단에 작성
@RunWith(SpingJUnit4ClassRunner.class)
@ContextConfiguration("설정파일의 경로를 작성")
=>설정 파일의 내용을 읽어서 사용이 가능
2.Service클래스의 insert메소드를 테스트
1)jnit버전에 4.10 이상인지 확인 -pom.xml파일에서 확인
2)spring-test라이브러리의 의존성이 설정되어있는지 확인
dependenciest->spring-test
test에서 하면 배포될때 없어질것이다.
C:\Users\admin\.m2\repository
eclipse 끄고 repository에 잇는 것을 전부 삭제하기
삭제한다음 07. spring\03. repository에 복사해서 옇기
lombok =>dto클래스
DTO ->속성들을 묶어서 표현하기 위한 클래스
class DTO{
변수
생성자
접근자
}
**lombok
1.DTO클래스 -관계형 데이터베이스에서 테이블을 표현하기 위한 클래스
=>여러 개의 속성들을 묶어서 하나로 표현하기 위한 클래스
=>속성들을 private변수로 생성
=>매개변수가 없는 생성자와 매개변수가 있는 생성자를 생성
=>접근자 메소드를 생성
=>toStrin g메소드 재정의
2.DTO클래스를 만들 때 속성만 정의하고 어노테이션을 이용해서 나머지 작업을 수행해주는 라이브러리
3.설치
1)https://projectlombok.org/download에서 jar파일을 다운로드
2)jar파일을 생성 -command창에서 실행
java -jar lombok.jar
3)사용할 ide목록이 나오면 ide를 선택하고 [install/updata]를 ㅅ클릭
4)eclipse재시작
5)프로젝트 rebuild
이클립스 Lombok 사용시 Warning 문제 해결
4.lombok사용
1)pom.xml파일에 lombok 의 의존성 추가
<!-- lombok의 의존성 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
2)dto클래스 위에 작성
@Getter:모든 변수들의 getter메소드 생성
@Setter:모든 변수들의 setter 메소드 생성
@ToString
@Data: 생성자 , 접근자 메소드 ToString 전부 생성
**데이터베이스 사용
1. 프로그래밍 언어에서 데이터베이스를 사용하는 방법
1) 언어가 제공하는 코드를 이용
2) 프레임워크를 이용하는 방법
=>언어를 이용해서 작성하면 프레임워크의 영향을 받지 않기 때뭄에 프레임워크를 종속되지 않음
프레임워크를 사용하면 중북된 코드등을 제거하기 때문에 개발속도가 빠릅니다.
2.데이터베이스 연동 프레임워크의 종류
1) SQL Mapper:SQL과 프로그래밍 언어 코드를 분리시켜서 작성
=>sql을 작성하는 별도의 파일이나 클래스를 만들고 프로그래밍 언어가 호출하는 방식
=>개발이 쉽지만 성능은 떨어짐
2ORM(Object Relation Mapping) :프로그래밍언어의 클래스와 관계형 데이터베이스의 테이블을 매핑하는 방식으로 sql없이 작업
=>별도의 설정 파일을 이용해서 테이블과 클래스를 매핑시키고 실제 작업을 할 때는 클래스의 인스턴스를 가지고 작업
=>최근의 거의 모든 언어에서 지원을 하는 방식인데 sql mapper보다는 어렵지만 성능이 좋습니다.
3.Java의 데이터베이스 프레임워크
1)Mybatis: sql mapper방식
=>sql을 xml파일이나 인터페이스에 작성하고 클래스에서 호출하는 방식
=>쉬워서 si업계에서 많이 사용
2)HIbernate:orm
=>sql을 이용하지 않고 자신만의 문법으로 관계형 데이터베이스를 사용하는 방법
=>어렵지만 성능이 좋아서 솔루션 업체에서 선호
=>최근에는 jpa와 같이 사용
**Mybatis
1.특징
=>java의 sql mapper framework
=>다른 언어 버전도 존재
2.spring project에서 mybatis를 사용할 때 필요한 라이브러리
=>spring-jdbc, mybatis, mybatis-spring
3.spring에서 데이터베이스를 사용할 떄는 데이터베이스 접속 정보를 반드시 bean으로 만들어야 합니다.
코드로 직접 설정하는 것은 안됩니다ㅏ.
4.spring에서 데이터베이스 접속정보를 저장하는 bean생성
org.springframework.jdbc.datasource.DriverManagerDataSource 클래스의 bean을 생성
=>필수
=>driverClassName 프로퍼티 : 데이터베이스 종류
=>url프로퍼티: 데이터베이스 접속 위치
=>username 프로퍼티: 계정 설정
=>password 프로퍼티: 비밀번호
username과 password는 입력하지 않아도 되는 경우가 있습니다.
5. 오라클 사용 준비와 접속 확인
=>url: ip주소
=>username:user01~ user30
=>password : user01 ~ user30
1)java에서 오라클을 사용할 려면 오라클 라이브러리를 다운로드 받아야 합니다.
=>pom.xml에 작성
=>오라클은 중앙 저장소에서 드라이버를 다운로드 제공하지 않기 때문에 repository를 설정해야 합니다.
=>dependencies 태그 바깥에 작성
<!-- 중앙 저장소 이외에서 다운로드 받아야 할 때 설정: 다운로드 받는 서버를 설정 -->
<repositories>
<repository>
<id>codelds</id>
<url>https://code.lds.org/nexus/content/groups/main-repo</url>
</repository>
</repositories>
=>dependencies안에 작성
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
=>위 작업을 했는데 에러 표시가 나는 경우 - 다운로드를 반을 수 없다라는 에러
=>repositories수정
<repositories>
<!-- <repository>
<id>codelds</id>
https://code.lds.org/nexus/content/groups/main-repo
</repository> -->
<repository>
<id>oracle</id>
<name>ORACLE JDBC Repository</name>
<url>http://maven.jahia.org/maven2</url>
</repository>
</repositories>
=>dependency 수정
<!-- 오라클 의존성 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2</version>
</dependency>
3)spring bean configuration파일을 추가하고 데이터베이스 접속 정보를 작성
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@ip주소:1521:xe" />
<property name="username" value="user29" />
<property name="password" value="user29"/>
</bean>
4) class이름에 에러
=>클래스 이름을 잘못 기재했거나 라이브러리가 다운로드 안된 겁니다.
=>pom.xml에 가서 클래스가 소속된 라이브러의 의존성을 설정했는지 확인해보고 설정했는데도 에러가 나면 다운로드가 제대로 안되는 것이므로 버전을 변경해보고 m2디렉토리를 삭제하고 다시 실행을 합니다.
org.springframework.jdbc.datasource.DriverManagerDataSource오류가 날 경우
=>pom.xml 파일에 spring-jdbc라이브러리의 의존성을 설정
<!-- spring에서 데이터베이스 사용할 때 사용할 라이브러리 의존성 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-framework.version}</version>
</dependency>
디비 연력이 잴 먼저이다.
5)main 메소드를 소유한 클래스를 만들어서 데이터베이스 연결
6. Maven Project를 github에서 내려받은 경우에는 마우스 오른쪽을 클릭해서 [Maven]-[Update Project]메뉴를 설정해야 합니다.
**MyBatis사용
1.java에서 Mybatis를 사용하는 방법
1)xml을 이용하는 방법
2)인터페이스를 이용하는 방법
2.xml을 이용하는 방법
1)mybatis환경 설정 파일을 생성 - 생략 가능
=>dto클래스의 패키지를 등록해서 mapper파일에서 패키지이름을 작성하지 않고 dto클래스를 사용하거나 map의 key이름과 데이터베이스의 컬럼이름 매핑등을 설정
2)mapper파일을 생성하고 필요한 sql을 작성
3)spring설정 파일에 sqlsession클래스의 bean 을 등록
4)dao클래스에 sqlsession을 주입받아서 sql을 생성
**실습
1. 실습에 사용할 테이블과 샘플 데이터를 생성
CREATE TABLE goods(
code NUMBER(6) PRIMARY KEY,
name varchar2(50) NOT NULL,
manufacture varchar2(50),
price number(10)
);
INSERT INTO goods(code, name,MANUFACTURE, PRICE)
VALUES (1,'낙지','목포',8000);
INSERT INTO goods(code, name,MANUFACTURE, PRICE)
VALUES (2,'과배기','포항',20000);
INSERT INTO goods(code, name,MANUFACTURE, PRICE)
VALUES (3,'인삼','금산',200000);
COMMIT;
SELECT * FROM GOODS;
2. 프로젝트에 테이블의 데이터와 매핑할 dto클래스를 생성
//접근자 메소드의 tosTRING메소드를 만들어주는 어노테이션
@Data
public class Good {
private int code;
private String name;
private String manufacture;
private int price;
}
3. MyBatis 사용 설정
=>mybatis와 mybstis-spring 라이브러리 설정
=>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
4. mybatis 환경 설정 파일
=>dto클래스의 패키지이름이나 map의 컬럼 매핑 등을 설정
**xml
1.데이터를 표현하는 파일
=>상단에 dtd(!DOCTYPE태그)가 없음
=>개발자가 파싱해서 원하는 대로 사용
2.설정 파일
=>상단에 dtd(!DOCTYPE태그)가 있음
파일의 내용을 DTD에 설정한 곳에서 해석
=>정해진 규칙대로 코드를 작성
=>루트 디렉토리에 mybatis-config.xml 파일로 생성
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<!-- sql파일에서는 sqlmapper 페키지이름을 생략할 수 있음 -->
<package name="sqlmapper"/>
</typeAliases>
</configuration>
5.sql mapper파일 생성
=>실행할 sql을 작성하는 파일
1) mybatis와 테이블의 자료형 매핑
number <-> Integer , Double, Float, Byte, Short, Long, BigDecimal
char, varchar2, clob <-> String
data <-> java.sql.Date, java.util.Date
time <-> java.sql.Time, java.util.Date
timestamp <-> java.sql.Timestamp
blob <-> byte[]
2)select구문 작성
<select id="구분할 이름" resultType ="결과 자료형" parameterType="맥변수 자료형" >
select
from
where
</select>
=>resultType은 select절에 작성한 컬럼의 데이터를 전부 저장할 수 있는 자료형
select에서 하나의 컬럼만 가져오는 경우는 그 컬럼의 값을 저장할 수 잇는 자료형
여러 개의 컬럼을 가져오는 경우는 java.util.Map이나 dto클래스이름을 적어야 합니다.
=>parameterType은 where절에서 값을 나중에 결정하는 것들 전체를 저장할 수 있는 자료형
select에서는 생략되는 경우도 있습니다.
=>where 절에 parameter를 만들 때는 #{컬럼이름}의 형태로 작성
3)insert,delete,update
<insert id="구분할 이름" parameterType ="매개변수 자료형">
insert,update, delete구문
</insert>
4)Spring Confuguration파일에 설정 파일 등록
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
<property name ="dataSource" ref ="dataSource"/>
<property name ="configLocation" value ="환경설정 파일 경로"/>
<property name ="mapperLocation" value ="sql 파일 경로"/>
</bean>
<bean class="org.mybatis.spring.SqlSessionTemplate" id ="sqlSession">
<constructor-arg name ="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
5)Dao클래스에 sqlSession을 주입받아서 sql메소드 호출
List<resultType> selectList("SQL id", 매개변수);
resultType selectOne("SQL id", 매개변수);
int insert("SQL id", 매개변수) //insert대신에 update, delete사용해도 결과는 같음
실습
=>mapper 파일들을 저장할 mappers디렉토리를 생성
=>mappers 디렉토리에 sql을 작성할 mapper파일을 만들고 sql을 작성
good.xml파일
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="good">
<!-- goods테이블의 모든 데이터를 읽어오는 sql -->
<!-- sqlmapper.Good를 해야 한는데 mybatis-config.xml에서 설정하였기 때문에 Good가능
resultType는 select절의 컬럼들을 모두 저장할 수 잇는 자료형
컬럼이 여러개 있 떄는 java.util.Map아니면 자기가 만든 DTO클래스
SELECT 에서 parameterType은 where절에 대입할 데터의 자료형
없으면 지우면 된다.-->
<select id="goodList" resultType="Good">
SELECT code, name, manufacture,price
FROM GOODS
</select>
<!-- code를 가지고 하나의 데이터를 찾아오는 sql -->
<select id="gooddetail" resultType="Good" parameterType="java.lang.Integer">
SELECT code, name, manufacture,price
FROM GOODS
where code = #{code}
</select>
<!-- goods테이블을 데이터를 삽입하는 sql -->
<insert id="goodinsert" parameterType="Good">
INSERT INTO goods(code, name,manufacture, price)
VALUES (#{code},#{name},#{manufacture},#{price})
</insert>
<!-- goods테이블을 데이터를 수정하는 sql -->
<update id="goodupdate" parameterType="Good">
update
set name =#{name}
, manufacture = #{manufacture}
, price = #{price}
where code = #{code}
</update>
<!-- goods테이블에서 code를 이용해서 데이터를 삭제하는 sql -->
<delete id="gooddelete" parameterType="java.lang.Integer">
delete goods where code = #{code}
</delete>
</mapper>
=>spring bean configuration파일에 MyBatis를 사용할 수 있는 Bean 객체를 설정
<!-- MyBatis를 xml을 이용해서 사용할 떄 필요한 설정 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref ="dataSource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:mappers/good.xml"></property>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
</bean>
=>main메소드에서 sql을 호출하는 코드 작성
=>예외
java.lang.IllegalArgumentException sql의 이름이 잘못될 경우
List<Good> list = sqlSession.selectList("goo.goodList"); =>이름이 잘못 되였을 경우
java,sql.sqlSyntaxErrorException sql이 잘못된 경우
NullPointer Exception: 파라미터를 제대로 대입하지 않아서
FIleNotFoundException: Mybatis 설정 잘못
Data 개발자
유저 도메인 지식 업무
data<-개발자 api 플랫폼 <- 도메인지식
**Mybatis의 장점
=>sql과 java코드가 분리가 되기 때문에 유지보수가 용이
=>처음 한 번만 설정이 잘 되면 이후부터는 쉽게 추가가 가능
**Mybatis사용시 주의할 점
=>DTO클래스와 매핑을 시킬 때는 컬럼이름과 변수명이 같아야 쉽게 매핑이 됩니다.
이름 맞추기 잘 해야 한다.
=>Map을 이용하는 경우에는 오라클의 경우는 컬럼이름이 대문자로 리턴되는데 나머지 데이터베이스는 수문자로 리턴
=>오라클의 number자료형은 Map에 매핑하는 경우 BigDecimal로 매핑되기 때문에 정수나 실수로 사용하고자 할 때는 한번의 변환 과정이 더 필요합니다.
=>Map을 사용하게 되면 번거롭기 때문에 아직까지는 DTO클래스를 만들어서 작업을 하는 경우가 많습니다.