위의 기사에서는 EasyUI 메뉴의 구현을 완료했습니다. 여기를 클릭하십시오. 이 섹션에서는 주로 데이터베이스의 계단식 쿼리를 완료하기 위해 카테고리 viceimpl 구현 클래스에 대해 주로 작성합니다. 일반적으로 프로젝트는 뒷면에서 앞쪽으로 이루어지고 먼저 서비스를 수행합니다 (우리는 DAO를 추출하지 않았고 마침내 추출한 다음 마무리 후 상단 계층을 수행합니다.
쓰기 전에 데이터베이스의 테이블을 살펴 보겠습니다.
삭제 데이터베이스가 존재하는 경우; /*데이터베이스 생성 및 인코딩 설정*/ 데이터베이스 창출 기본 문자 세트 UTF8; 상점 사용; /*관리자 테이블 삭제*/ 드롭 테이블이 존재하는 경우 계정; /*제품 범주 테이블 삭제*/ 드롭 테이블이 존재하는 경우 범주; /*======================================================================================================================== ============================================================================================================================================== ============================================================================================================================================== ============================================================================================================================================== 관리자 로그인 이름*/ 로그인 varchar (20),/*관리자 이름*/ name varchar (20),/*관리자 암호*/ Pass Varchar (20)); /*============================================================================================================================================== ================================================================================================================================= ================================================================================================================================= ========================================================================================================================== 이 범주를 관리하는 거짓, /* 외국 키* / ac
주로 제품 카테고리 테이블 및 관리자 테이블, 외국 키 관련 관리자 테이블이 주로 두 개의 테이블이 있으며 제품 카테고리 테이블에 제공됩니다. 즉, 제품과 관리자는 다중 관계입니다. 이제 제품 쿼리에 대한 카테고리 정보를 작성하기 시작하며 계단식 관리자가 필요합니다.
1. 계단식 쿼리 방법을 구현하십시오
먼저 카테고리 서비스 인터페이스 에서이 메소드를 정의하십시오.
공개 인터페이스 카테고리 서비스를 확장하여 기본 서비스 <범주> {// 쿼리 카테고리 정보, 캐스케이드 관리자 공개 목록 <Cat // 카테고리 이름의 쿼리} 그런 다음 구현 클래스 카테고리 에서이 메소드를 구현합니다.
@Service ( "CategoryService") 공개 클래스 카테고리를 확장하여 BaseServiceImpl <카테고리> 구현 범주를 구현합니다. CategoryService {@override public list <Cat return getsession (). Createquery (HQL) .SetString ( "type", "%" + type + "%"). list (); }} 두 모델 중에서, 우리는 주석에 대한 링크를 할당합니다.
// @ManyToOne (fetch = fetchType.eger) @joincolumn (name = "ac } // @onetomany (cascade = cascadetype.all, fetch = fetchtype.lazy, mappedby = "acc }
그런 다음 테스트 클래스에서 테스트합니다.
@RunWith (SpringJunit4classRunner.class) @ContextConfiguration (locations = "classPath : beans.xml") 공개 클래스 카테고리 erviceimpltest {@resource private categyService categorService; @Test public void testQueryJoinAccount () {for (category c : categoryService.queryJoinAccount ( "")) {system.out.println (c); System.out.println (c.getAccount ()); }}} 2. 계단식 쿼리 문제
콘솔의 출력을 살펴보면 하나 이상의 SQL 문을 보냈지 만 한 번만 쿼리 한 것을 알 수 있습니다. 왜 그렇게 많은 진술을 보내는가? 이것은 일반적인 1+N 문제입니다. 소위 1+N 문제는 먼저 현재 객체를 쿼리하기 위해 명령문을 발행 한 다음 관련 객체를 쿼리하기 위해 n 문을 발행하는 것입니다. 여기에는 두 개의 객체 만 있습니다. 더 많은 객체가 있으면 효율이 크게 줄어 듭니다. 이 문제를 어떻게 해결해야합니까?
어쩌면 FetchType.lazy를 생성하기 위해 Fetch를 설정하면 여러 문장을 게시하지 않지만 Lazy로 설정 한 후에는 계정 객체를 얻을 수 없기 때문에 불가능합니다. 더 나은 해결책은 HQL 문을 스스로 작성하고 Join Fetch를 사용하는 것입니다. 자세한 내용은 수정 된 카테고리 viceimpl 구현 클래스를 참조하십시오.
@Service ( "CategoryService") 공개 클래스 카테고리를 확장하여 BaseServiceImpl <Category> 구현 범주를 구현합니다. CategoryService {@override public list <Cat return getsession (). Createquery (HQL) .SetString ( "type", "%" + type + "%"). list (); }} 왼쪽 결합은 계정과 함께 쿼리하는 수단, 계정 객체를 범주에 추가하는 것을 의미하므로 하나의 SQL 문만 전송되고 반환 된 범주에 계정 개체도 포함됩니다.
3. 페이징 기능을 완료하십시오
최대 절전 모드의 페이지 매김은 매우 간단합니다. 두 가지 방법 만 호출하면 setfirstresult 및 setMaxResults를 호출하면됩니다. 카테고리 서비스 인터페이스 및 구현 클래스 CategoryServiceImpl을 수정하겠습니다.
// categoryService public interface categoryService 확장베이스 서비스 <카테고리> {// 쿼리 카테고리 정보, 캐스케이드 관리자 공개 목록 <Cat // Pagination} // categoryserviceimpl @service ( "categoryService") public class categoryserviceimpl은 baseServiceimpl <category> empless categoryService {@override public list <cat return getsession (). createquery (HQL) .SetString ( "type", "%" + type + "%") .setFirstresult ((Page-1) * size) // show .setMaxResults (size) // show youghlist (); }} 테스트 클래스에서 테스트합시다.
@RunWith (SpringJunit4classRunner.class) @ContextConfiguration (locations = "classPath : beans.xml") 공개 클래스 카테고리 erviceimpltest {@resource private categyService categorService; @Test public void testQueryJoinAccount () {for (categoryservice.queryJoinAccount ( "", 1,2)) {// 첫 페이지를 표시, 페이지 당 2 개의 데이터를 표시합니다. }}} 이를 위해 서비스 방법 작성을 마치고 제품 카테고리의 계단식 쿼리 및 페이징 기능을 완료했습니다.
(참고 : 결국 전체 프로젝트의 소스 코드 다운로드를 제공 할 것입니다! 모두가 수집하거나 공유 할 수 있습니다).
원본 주소 : http://blog.csdn.net/eson_15/article/details/51320212
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.