-
Hibernate는 어떻게 작동하며 왜 사용해야 합니까?
원칙:
1. 구성 파일을 읽고 구문 분석합니다.
2. 매핑 정보를 읽고 구문 분석하고 SessionFactory를 생성합니다.
3.세션 열기
4. 거래 생성
5. 지속성 작업
6. 거래 제출
7.세션 닫기
8. SessionFactory를 닫습니다.
왜 사용:
1. 데이터베이스에 대한 JDBC 액세스 코드가 캡슐화되어 데이터 액세스 계층의 지루하고 반복적인 코드가 크게 단순화됩니다.
2. Hibernate는 JDBC와 뛰어난 ORM 구현을 기반으로 하는 주류 지속성 프레임워크입니다. 이는 DAO 레이어의 코딩 작업을 크게 단순화합니다.
3. 최대 절전 모드는 투명성을 달성하기 위해 바이트 코드 향상 프로그램 대신 Java 반사 메커니즘을 사용합니다.
4. Hibernate는 경량 프레임워크이기 때문에 성능이 매우 좋습니다. 매핑의 유연성이 뛰어납니다. 일대일 관계부터 다대다 복잡한 관계까지 다양한 관계형 데이터베이스를 지원합니다.
2. Hibernate 지연 로드는 어떻게 이루어지나요?
1. Hibernate2 지연 로딩 구현: a) 엔터티 객체 b) 컬렉션(Collection)
2. Hibernate3에서는 속성의 지연 로딩 기능을 제공합니다.
Hibernate가 데이터를 쿼리할 때 데이터는 메모리에 존재하지 않지만, 프로그램이 실제로 데이터에 대해 동작할 때는 객체가 메모리에 존재하므로 서버의 메모리 오버헤드를 절약하여 서버의 성능을 향상시킵니다. . 성능.
3. Hibernate에서 클래스 간의 관계(예: 일대다, 다대다 관계)를 실현하는 방법은 무엇입니까?
클래스 간의 관계는 주로 테이블 간의 관계 작동에 반영되며 모두 객체에 대해 작동하며 모든 테이블과 클래스는 우리 프로그램에서 함께 매핑되며 구성 파일에서는 -one을 통해 함께 매핑됩니다. 일대다, 다대다,
4. Hibernate의 캐싱 메커니즘에 대해 이야기해보자
1. Hibernate에는 내부 캐시가 존재하는데, 이는 1차 캐시라고도 하며 애플리케이션 트랜잭션 레벨 캐시에 속합니다.
2. 두 번째 수준 캐시:
a) 애플리케이션 및 캐시
b) 분산 캐시 조건: 데이터가 제3자에 의해 수정되지 않고, 데이터 크기가 허용 가능한 범위 내에 있고, 데이터 업데이트 빈도가 낮고, 동일한 데이터가 시스템에서 자주 사용되며, 중요하지 않은 데이터
c) 타사 캐시 구현
5. 최대 절전 모드 쿼리 방법
SQL, 기준, 객체 구성
본사:
1. 속성 쿼리
2. 매개변수 쿼리, 명명된 매개변수 쿼리
3. 관련 검색어
4. 페이징 쿼리
5. 통계 기능
6. 최대 절전 모드를 최적화하는 방법은 무엇입니까?
1. 단방향 일대다 연결 대신 양방향 일대다 연결을 사용합니다.
2. 단방향 일대다 연결의 유연한 사용
3. 일대일 대신 다대일을 사용하세요.
4. 객체 캐시를 구성하고 컬렉션 캐시를 사용하지 않음
5. 일대다 컬렉션에는 Bag을 사용하고 다대다 컬렉션에는 Set을 사용합니다.
6. 상속된 클래스에서 명시적인 다형성을 사용하세요.
7. 테이블 필드 수가 적어야 하고, 테이블 연결이 너무 많아도 걱정하지 말고, 두 번째 수준 캐시를 지원해야 합니다.
7. Struts는 어떻게 작동하나요? 왜 Struts를 사용하는가?
작동 메커니즘:
Struts 작업 흐름:
웹 애플리케이션이 시작되면 초기화 ActionServlet이 로드됩니다.
struts-config.xml 파일에서 구성 정보를 읽어 다양한 구성 객체에 저장합니다. ActionServlet은 고객 요청을 받으면 다음 프로세스를 실행합니다.
-(1) 사용자 요청과 일치하는 ActionMapping 인스턴스를 검색합니다. 존재하지 않는 경우 잘못된 요청 경로 정보를 반환합니다.
-(2) ActionForm 인스턴스가 존재하지 않는 경우 ActionForm 객체를 생성하고 고객이 제출한 양식 데이터를 ActionForm 객체에 저장합니다.
-(3) 구성 정보를 기반으로 양식 유효성 검사가 필요한지 여부를 결정합니다. 유효성 검사가 필요한 경우 ActionForm의 verify() 메서드를 호출합니다.
-(4) ActionForm의 유효성 검사() 메서드가 null을 반환하거나 ActionMessage를 포함하지 않는 ActuibErrors 객체를 반환하는 경우 이는 양식 유효성 검사가 성공했음을 의미합니다.
-(5) ActionServlet은 ActionMapping에 포함된 매핑 정보를 기반으로 요청을 전달할 Action을 결정합니다. 해당 Action 인스턴스가 존재하지 않으면 먼저 이 인스턴스를 생성한 다음 Action의 Execute() 메서드를 호출합니다.
-(6) Action의 실행() 메소드는 ActionForward 객체를 반환하고 ActionServlet은 ActionForward 객체가 가리키는 JSP 구성 요소에 고객 요청을 전달합니다.
-(7) ActionForward 개체는 JSP 구성 요소를 가리키며 동적 웹 페이지를 생성하고 이를 고객에게 반환합니다.
왜 사용:
JSP, Servlet 및 JavaBean 기술의 출현으로 강력한 엔터프라이즈 애플리케이션 시스템을 구축할 수 있게 되었습니다. 하지만 이러한 기술로 구축된 시스템은 매우 복잡하기 때문에 여기에 이러한 기술을 구성하는 규칙, 규칙이 필요하며 이것이 바로 Struts가 탄생한 것입니다.
Struts를 기반으로 개발된 애플리케이션은 컨트롤러 컴포넌트, 모델 컴포넌트, 뷰 컴포넌트의 세 가지 유형의 컴포넌트로 구성됩니다.
8. Struts의 유효성 검사 프레임워크는 어떻게 확인합니까?
Struts 구성 파일에서 특정 오류 프롬프트를 구성한 다음 FormBean에서 구체적으로 verify() 메서드를 호출합니다.
9. Struts의 디자인 패턴에 대해 이야기해보자
MVC 모드: 웹 애플리케이션이 시작될 때 ActionServler가 로드되고 초기화됩니다. 사용자가 양식을 제출하면 구성된 ActionForm 객체가 생성되고 해당 양식의 데이터가 채워집니다. ActionServler는 Struts-config.xml 파일에 구성된 설정을 기반으로 양식 유효성 검사가 필요한지 여부를 결정합니다. ActionForm의 Validate() 확인 후 요청을 보낼 Action을 선택합니다. Action이 존재하지 않으면 ActionServlet은 먼저 이 객체를 생성한 다음 Action의 Execute() 메서드를 호출합니다. Execute()는 ActionForm 객체에서 데이터를 얻고 비즈니스 로직을 완성한 후 ActionForward 객체를 반환합니다. 그런 다음 ActionForward 객체가 지정한 jsp 구성 요소에 고객 요청을 전달합니다. 고객에게 반환합니다.
10. 스프링은 어떻게 작동하며 왜 사용해야 합니까?
1. Spring MVC는 모든 요청이 DispatcherServlet에 제출되도록 요청합니다. DispatcherServlet은 요청의 실제 처리를 담당하도록 애플리케이션 시스템의 다른 모듈을 맡깁니다.
2.DispatcherServlet은 요청을 처리하는 컨트롤러를 찾기 위해 하나 이상의 HandlerMapping을 쿼리합니다.
3.DispatcherServlet은 요청을 대상 컨트롤러에 제출하십시오.
4. 컨트롤러는 비즈니스 로직 처리를 수행한 후 ModelAndView를 반환합니다.
5.Dispathcher는 하나 이상의 ViewResolver 뷰 파서를 쿼리하여 ModelAndView 객체에 의해 지정된 뷰 객체를 찾습니다.
6. 뷰 객체는 이를 렌더링하고 클라이언트에 반환하는 역할을 담당합니다.
사용 이유:
{AOP를 사용하면 개발자는 크로스커팅 문제라고 하는 비동작 문제를 생성하고 이를 애플리케이션 코드에 삽입할 수 있습니다. AOP를 사용한 후, 도메인 개체의 개체 모델의 복잡성을 증가시키지 않으면서 공용 서비스(예: 로깅, 지속성, 트랜잭션 등)를 여러 측면으로 분해하여 도메인 개체에 적용할 수 있습니다.
IOC를 사용하면 객체를 구성한 다음 이러한 객체를 공동 객체로 전달할 수 있는 애플리케이션 환경을 만들 수 있습니다. 반전이라는 단어에서 알 수 있듯이 IOC는 역방향으로 JNDI와 같습니다. 여러 가지 추상 팩토리, 서비스 로케이터, 싱글톤 및 직선 구성을 사용하는 대신 모든 객체는 공동 객체로 구성됩니다. 따라서 컨테이너는 협업 개체(협력자)를 관리합니다.
Spring은 AOP 프레임워크이면서도 IOC 컨테이너이기도 합니다. Spring의 가장 좋은 점은 객체를 교체하는 데 도움이 된다는 것입니다. Spring에서는 JavaBean 속성과 구성 파일을 사용하여 종속성(협력 개체)을 추가하기만 하면 됩니다. 그러면 필요할 때 공동 작업 개체를 유사한 인터페이스로 쉽게 교체할 수 있습니다. }
Spring 프레임워크는 잘 정의된 7개의 모듈로 구성된 계층형 아키텍처입니다. Spring 모듈은 그림 1과 같이 Bean을 생성, 구성 및 관리하는 방법을 정의하는 핵심 컨테이너 위에 구축됩니다.
Spring 프레임워크를 구성하는 각 모듈(또는 구성요소)은 단독으로 존재할 수도 있고 하나 이상의 다른 모듈과 함께 구현될 수도 있습니다. 각 모듈의 기능은 다음과 같습니다.
☆ 코어 컨테이너: 코어 컨테이너는 Spring 프레임워크의 기본 기능을 제공합니다. 핵심 컨테이너의 주요 구성 요소는 팩토리 패턴의 구현인 BeanFactory입니다. BeanFactory는 IOC(Inversion of Control) 패턴을 사용하여 실제 애플리케이션 코드에서 애플리케이션의 구성 및 종속성 사양을 분리합니다.
☆ Spring 컨텍스트: Spring 컨텍스트는 Spring 프레임워크에 컨텍스트 정보를 제공하는 구성 파일입니다. Spring 컨텍스트에는 JNDI, EJB, 이메일, 국제화, 검증 및 디스패치 기능과 같은 엔터프라이즈 서비스가 포함됩니다.
☆ Spring AOP: 구성 관리 기능을 통해 Spring AOP 모듈은 측면 지향 프로그래밍 기능을 Spring 프레임워크에 직접 통합합니다. 따라서 Spring 프레임워크에서 관리하는 모든 객체가 AOP를 지원하도록 만드는 것은 쉽습니다. Spring AOP 모듈은 Spring 기반 애플리케이션의 객체에 대한 트랜잭션 관리 서비스를 제공합니다. Spring AOP를 사용하면 EJB 구성 요소에 의존하지 않고 선언적 트랜잭션 관리를 애플리케이션에 통합할 수 있습니다.
☆ Spring DAO: JDBC DAO 추상화 계층은 다양한 데이터베이스 공급업체에서 발생하는 예외 처리 및 오류 메시지를 관리하는 데 사용할 수 있는 의미 있는 예외 계층 구조를 제공합니다. 예외 계층 구조는 오류 처리를 단순화하고 작성해야 하는 예외 코드(예: 연결 열기 및 닫기)의 양을 크게 줄입니다. Spring DAO의 JDBC 지향 예외는 공통 DAO 예외 계층 구조를 따릅니다.
☆ Spring ORM: Spring 프레임워크는 JDO, Hibernate 및 iBatis SQL Map을 포함한 ORM 객체 관계형 도구를 제공하기 위해 여러 ORM 프레임워크를 삽입합니다. 이들 모두는 Spring의 일반 트랜잭션 및 DAO 예외 계층 구조를 준수합니다.
☆ Spring 웹 모듈: 웹 컨텍스트 모듈은 애플리케이션 컨텍스트 모듈을 기반으로 구축되어 웹 기반 애플리케이션에 대한 컨텍스트를 제공합니다. 따라서 Spring 프레임워크는 Jakarta Struts와의 통합을 지원합니다. 웹 모듈은 또한 멀티파트 요청 처리 및 요청 매개변수를 도메인 개체에 바인딩하는 작업을 단순화합니다.
☆ Spring MVC 프레임워크: MVC 프레임워크는 웹 애플리케이션 구축을 위한 모든 기능을 갖춘 MVC 구현입니다. 전략 인터페이스를 통해 MVC 프레임워크는 고도로 구성 가능해지며 MVC는 JSP, Velocity, Tiles, iText 및 POI를 포함한 수많은 뷰 기술을 수용합니다.
Spring Framework 기능은 모든 J2EE 서버에서 사용할 수 있으며 대부분의 기능은 관리되지 않는 환경에도 적합합니다. Spring의 핵심은 특정 J2EE 서비스에 묶여 있지 않은 재사용 가능한 비즈니스 및 데이터 액세스 개체를 지원하는 것입니다. 이러한 객체가 다양한 J2EE 환경(웹 또는 EJB), 독립형 애플리케이션 및 테스트 환경 간에 재사용될 수 있다는 점에는 의심의 여지가 없습니다.
IOC와 AOP
제어 반전 패턴(종속성 개입이라고도 함)의 기본 개념은 객체를 생성하는 것이 아니라 객체를 생성하는 방법을 설명한다는 것입니다. 코드 내 객체 및 서비스와 직접 연결되지는 않지만, 어떤 구성 요소가 어떤 서비스를 필요로 하는지는 구성 파일에 설명되어 있습니다. 컨테이너(Spring 프레임워크에서는 IOC 컨테이너)가 이들을 하나로 묶는 역할을 담당합니다.
일반적인 IOC 시나리오에서 컨테이너는 모든 객체를 생성하고 객체를 서로 연결하고 메소드 호출 시기를 결정하는 데 필요한 속성을 설정합니다. 다음 표에는 IOC의 구현 모드가 나열되어 있습니다.
Spring 프레임워크의 IOC 컨테이너는 유형 2와 유형 3을 사용하여 구현됩니다.
관점 지향 프로그래밍
관점 지향 프로그래밍(AOP)은 프로그래머가 로깅 및 트랜잭션 관리와 같은 일반적인 책임 라인이나 관심사를 뛰어넘는 동작을 모듈화할 수 있도록 하는 프로그래밍 기술입니다. AOP의 핵심 구성은 여러 클래스에 영향을 미치는 동작을 재사용 가능한 모듈로 캡슐화하는 측면입니다.
AOP와 IOC는 모듈식 접근 방식을 사용하여 엔터프라이즈 애플리케이션 개발의 복잡한 문제를 해결하는 보완 기술입니다. 일반적인 객체 지향 개발 방식에서는 로깅 기능을 구현하기 위해 모든 메서드와 Java 클래스에 로깅 문을 배치할 수 있습니다. AOP 접근 방식에서는 로깅 서비스를 모듈화하고 로깅이 필요한 구성 요소에 선언적으로 적용할 수 있습니다. 물론 자바 클래스가 로그 서비스의 존재를 알 필요도 없고, 관련 코드를 고려할 필요도 없다는 장점이 있다. 따라서 Spring AOP로 작성된 애플리케이션 코드는 느슨하게 결합됩니다.
AOP의 기능은 Spring 트랜잭션 관리, 로깅 및 기타 다양한 기능의 컨텍스트에 완전히 통합됩니다.
IOC 컨테이너
Spring 디자인의 핵심은 JavaBean 구성 요소와 함께 사용하도록 설계된 org.springframework.beans 패키지입니다. 이 패키지는 일반적으로 사용자가 직접 사용하지 않지만 서버에서 대부분의 다른 기능에 대한 하위 수준 중개자로 사용됩니다. 다음으로 높은 수준의 추상화는 Factory 디자인 패턴을 구현한 BeanFactory 인터페이스로, 객체를 이름으로 생성하고 검색할 수 있습니다. BeanFactory는 객체 간의 관계도 관리할 수 있습니다.
BeanFactory는 두 가지 객체 모델을 지원합니다.
❑ 단일형 모델은 쿼리 시 검색할 수 있는 특정 이름을 가진 개체의 공유 인스턴스를 제공합니다. 싱글톤은 기본이며 가장 일반적으로 사용되는 개체 모델입니다. 상태 비저장 서비스 객체에 이상적입니다.
❑ 프로토타입 모델은 검색할 때마다 별도의 개체가 생성되도록 합니다. 프로토타입 모델은 각 사용자가 자신만의 개체가 필요할 때 가장 적합합니다.
Bean Factory의 개념은 IOC 컨테이너로서 Spring의 기초입니다. IOC는 애플리케이션 코드에서 프레임워크로 작업을 처리하는 책임을 이전합니다. 다음 예제에서 보여주듯이 Spring 프레임워크는 JavaBean 속성과 구성 데이터를 사용하여 어떤 종속성을 설정해야 하는지 나타냅니다.
BeanFactory 인터페이스
org.springframework.beans.factory.BeanFactory는 간단한 인터페이스이므로 다양한 기본 저장 방법에 대해 구현될 수 있습니다. 가장 일반적으로 사용되는 BeanFactory 정의는 목록 1에 표시된 것처럼 XML 파일의 정의를 기반으로 Bean을 로드하는 XmlBeanFactory입니다.
목록 1. XmlBeanFactory
BeanFactory 팩토리 = new XMLBeanFactory(new FileInputSteam("mybean.xml"));
XML 파일에 정의된 Bean은 수동적으로 로드됩니다. 즉, Bean이 필요할 때까지 Bean 자체가 초기화되지 않습니다. BeanFactory에서 빈을 검색하려면 목록 2에 표시된 대로 검색할 빈의 이름을 전달하여 getBean() 메소드를 호출하면 됩니다.
목록 2. getBean()
MyBean mybean = (MyBean) Factory.getBean("mybean");
각 빈 정의는 POJO(클래스 이름과 JavaBean 초기화 속성으로 정의됨) 또는 FactoryBean일 수 있습니다. FactoryBean 인터페이스는 Spring 프레임워크를 사용하여 구축된 애플리케이션에 간접 수준을 추가합니다.
IOC 예시
제어 반전을 이해하는 가장 쉬운 방법은 실제로 작동하는 모습을 보는 것입니다. 나는 Spring IOC 컨테이너를 통해 애플리케이션의 종속성을 (빌드하는 대신) 주입하는 방법을 보여주는 예제로 3부로 구성된 Spring 시리즈의 1부를 마무리했습니다.
나는 온라인 신용 계좌 개설의 사용 사례를 출발점으로 사용했습니다. 이 구현을 위해 신용 계좌를 개설하려면 사용자가 다음 서비스와 상호 작용해야 합니다.
☆신용평가 서비스, 사용자의 신용정보를 조회합니다.
☆ 고객정보를 삽입하고 고객정보를 신용카드, 은행정보와 연결하여 자동이체(필요시)할 수 있는 원격 메시지 연동 서비스입니다.
☆ 신용 카드 상태에 대한 이메일을 사용자에게 보내는 이메일 서비스입니다.
세 개의 인터페이스
이 예에서는 서비스가 이미 존재하고 이상적으로는 느슨하게 결합된 방식으로 통합한다고 가정합니다. 다음 목록은 세 가지 서비스에 대한 API를 보여줍니다.
목록 3. CreditRatingInterface
공개 인터페이스 CreditRatingInterface {
공개 부울 getUserCreditHistoryInformation(ICustomer iCustomer);
}
목록 3에 표시된 신용 등급 인터페이스는 신용 기록 정보를 제공합니다. 고객 정보가 포함된 Customer 개체가 필요합니다. 이 인터페이스의 구현은 CreditRating 클래스에서 제공됩니다.
목록 4. CreditLinkingInterface
공개 인터페이스 CreditLinkingInterface {
공개 문자열 getUrl();
공개 무효 setUrl(String url);
public void linkCreditBankAccount()에서 예외가 발생합니다.
}
신용 연결 인터페이스는 신용 이력 정보를 은행 정보(필요한 경우)와 결합하고 사용자의 신용 카드 정보를 삽입합니다. 신용링크 인터페이스는 원격 서비스이며 해당 쿼리는 getUrl() 메서드를 통해 수행됩니다. URL은 나중에 논의할 Spring 프레임워크의 Bean 구성 메커니즘에 의해 설정됩니다. 이 인터페이스의 구현은 CreditLinking 클래스에서 제공됩니다.
목록 5. 이메일 인터페이스
공개 인터페이스 EmailInterface {
공개 무효 sendEmail(ICustomer iCustomer);
공개 문자열 getFromEmail();
공개 무효 setFromEmail(String fromEmail);
공개 문자열 getPassword();
public void setPassword(문자열 비밀번호);
공개 문자열 getSmtpHost();
공공 무효 setSmtpHost(String smtpHost);
공개 문자열 getUserId() ;
공개 무효 setUserId(String userId);
이 기사는 CSDN 블로그에서 가져온 것입니다. 재인쇄할 때 출처를 표시하십시오: http://blog.csdn.net/loshu2003/archive/2009/12/31/5111344.aspx
-