스프링
@Autowired ( 스프링 자동 주입 기능 )
설정하는 빈의 개수가 증가하면 한 개의 클래스 파일에 설정하는 것보다 영역별로 설정 파일을 나누면 관리가 편해짐
스프링은 한 개 이상의 설정 파일을 이용해서 컨테이너를 생성할 수있다.
장점은 AppConf2에 주석 처리한 세터 메서드를 사용해서 의존 주입을 하지 않아도 스프링 컨테이너가 @Autowired를
붙인 필드에 자동으로 해당 타입의 빈 객체를 주입 한다. ( 세터 자동 주입 )
AppConf1
package config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import spring.MemberDao;
import spring.MemberPrinter;
@Configuration
public class AppConf1 {
@Bean
public MemberDao memberDao() {
return new MemberDao();
}
@Bean
public MemberPrinter memberPrinter() {
return new MemberPrinter();
}
}
AppConf2
package config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import spring.ChangePasswordService;
import spring.MemberDao;
import spring.MemberInfoPrinter;
import spring.MemberListPrinter;
import spring.MemberPrinter;
import spring.MemberRegisterService;
import spring.VersionPrinter;
@Configuration
public class AppConf2 {
@Autowired
private MemberDao memberDao;
@Autowired
private MemberPrinter memberPrinter;
@Bean
public MemberRegisterService memberRegSvc() {
return new MemberRegisterService(memberDao);
}
@Bean
public ChangePasswordService changePasswordService() {
ChangePasswordService pwdSvc = new ChangePasswordService();
pwdSvc.setMemberDao(memberDao);
return pwdSvc;
}
@Bean
MemberListPrinter listPrinter() {
return new MemberListPrinter(memberDao, memberPrinter);
}
@Bean
public MemberInfoPrinter infoPrinter() {
MemberInfoPrinter infoPrinter = new MemberInfoPrinter();
// infoPrinter.setMemberDao(memberDao);
// infoPrinter.setPrinter(memberPrinter);
return infoPrinter;
}
@Bean
public VersionPrinter versionPrinter() {
VersionPrinter versionPrinter = new VersionPrinter();
versionPrinter.setMajorVersion(5);
versionPrinter.setMinorVersion(0);
return versionPrinter;
}
}
설정 클래스가 두 개 이상일 때 스프링 컨테이너를 생성하는 코드
ctx = new AnnotationConfigApplicationContext(AppConf1.class, AppConf2.class);
@import 애노테이션 사용
두 개이상의 설정 파일을 사용하는 또 다른 방법은 해당 애노테이션을 사용하는 것 이다.
package config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import spring.MemberDao;
import spring.MemberPrinter;
@Configuration
@Import(AppConf2.class)
public class AppConfImport {
@Bean
public MemberDao memberDao() {
return new MemberDao();
}
@Bean
public MemberPrinter memberPrinter() {
return new MemberPrinter();
}
}
ctx = new AnnotationConfigApplicationContext(AppConfImport.class);
오라클
뷰(view) : 가상 테이블
목적
편리성 : SELECT문의 복잡도를 완화하기 위해 사용
보안성 : 테이블의 특정 열을 노출하고 싶지 않을 경우
뷰 생성
create view vw_view20
as (select empno, ename, job, deptno
from emp
where deptno = 20 );
조인(join) 후 뷰 생성
create view test_view
as
select empno, ename, job, sal, d.deptno, loc
from emp_temp e, dept_temp d
where e.deptno = d.deptno;
ROWNUM ( 테이블에 저장된 행 번호 붙혀서 출력 )
select rownum, ename, empno
from emp
ROWNUM ( 인라인 뷰 ) 서브쿼리 사용
select rownum, e.*
from (select *
from emp
order by sal desc) e
ROWNUM ( 인라인 뷰 ) WITH절 사용
with e as (select * from emp order by sal desc)
select rownum, e.*
from e
인라인 뷰로 TOP-N 추출하기 ( 서브쿼리 사용 ) 급여가 높은 상위 3명 출력
select rownum, e.*
from ( select *
from emp
ORDER by sal desc ) e
where ROWNUM <= 3
'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글
2023-07-31 52일차 (0) | 2023.07.31 |
---|---|
2023-07-28 51일차 (0) | 2023.07.28 |
2023-07-26 49일차 (0) | 2023.07.26 |
2023-07-25 48일차 (0) | 2023.07.25 |
2023-07-24 47일차 (0) | 2023.07.24 |