Mybatis 다 중 표 관련 조회 의 실현(DEMO)

개요
이 절 에서 실현 하고 자 하 는 것 은 다 중 표 관련 조회 의 간단 한 demo 이다.장면 은 id 에 따라 특정한 상품 의 분류 정 보 를 조회 하고 이 분류 아래 의 상품 목록 을 보 여 준다.
1.Mysql 테스트 데이터
새 표 카 테 고리(상품 분류)와 제품(상품)을 만 들 고 테스트 데 이 터 를 몇 개 삽입 합 니 다.

create table Category (
Id int not null auto_increment,
Name varchar(80) null,
constraint pk_category primary key (Id)
);
INSERT INTO category(Name) VALUES ('  ');
INSERT INTO category(Name) VALUES ('  ');
INSERT INTO category(Name) VALUES ('  ');
create table product (
Id int not null auto_increment,
categoryId int not null,
Name varchar(80) null,
constraint pk_product primary key (Id),
constraint fk_product_2 foreign key (categoryId)
references category (Id)
);
create index productCat on product (categoryId);
create index productName on product (Name);
INSERT INTO product(CategoryId,Name) VALUES (1, '  ');
INSERT INTO product(CategoryId,Name) VALUES (1, '  ');
INSERT INTO product(CategoryId,Name) VALUES (2,'    ');
INSERT INTO product(CategoryId,Name) VALUES (2,'   ');
INSERT INTO product(CategoryId,Name) VALUES (2, '    ');
INSERT INTO product(CategoryId,Name) VALUES (2, '   ');
INSERT INTO product(CategoryId,Name) VALUES (2, '  ');
INSERT INTO product(CategoryId,Name) VALUES (2, '    ');
INSERT INTO product(CategoryId,Name) VALUES (3,'  JAVA');
INSERT INTO product(CategoryId,Name) VALUES (3,'JAVA    ');
2.mybatis-generator-config.xml 설정
my batis-generator-config.xml 를 설정 하 는 방법 은 JAVA 입문[7]-my batis generator(MBG)에서 my batis 코드 를 자동 으로 생 성 합 니 다.여 기 는 table 노드 로 변경 되 었 습 니 다.

<table tableName="category" enableCountByExample="true" enableDeleteByExample="true" enableSelectByExample="true" enableUpdateByExample="true">
 <generatedKey column="Id" sqlStatement="mysql" identity="true"/>
</table>
<table tableName="product" enableCountByExample="true" enableSelectByExample="true" enableSelectByPrimaryKey="true" enableUpdateByPrimaryKey="true" enableDeleteByPrimaryKey="true" enableInsert="true">
 <generatedKey column="Id" sqlStatement="mysql" identity="true"></generatedKey>
</table>
xml 파일 을 설정 한 후 Maven 패 널 에서 my batis-generator:generate 를 실행 하여 관련 클래스 를 자동 으로 생 성 합 니 다.
Image(36)
3.사용자 정의 my batis 관련 조회
1.패키지 실체 dto
카 테 고리 Dto,패키지 상품 분류 정보 및 상품 목록 을 새롭게 정의 합 니 다.

public class CategoryDto {
 private Category category;
 private List<Product> products;
 private int id;
 public int getId() {
 return id;
 }
 public void setId(int id) {
 this.id = id;
 }
 public Category getCategory() {
 return category;
 }
 public void setCategory(Category category) {
 this.category = category;
 }
 public List<Product> getProducts() {
 return products;
 }
 public void setProducts(List<Product> products) {
 this.products = products;
 }
}
2.Category Mapper.java 인터페이스 에 추가 하 는 방법 getById()
CategoryDto getById(int id);
3.CategoryMapper.xml 설정
먼저 select 노드 를 정의 하고 id 는 위의 방법 명 getById 에 대응 합 니 다.parameterType 매개 변수 형식 은 Integer 입 니 다.resultMap 은 resultMap 의 id 를 사용자 정의 합 니 다.

 <select id="getById" parameterType="java.lang.Integer" resultMap="CategoryResult">
 SELECT Category.Id AS CateId,Category.Name AS CateName,Product.Id AS ProductId,Product.Name AS ProductName
 FROM Category,Product
 WHERE Category.Id=Product.CategoryId AND Category.Id=#{id}
 </select>
다음은 resultMap 노드 id 를 CategoryResult 로 정의 하고 type 은 CategoryDto 로 정의 합 니 다.
resultMap 에 대하 여:
  • id C 하나의 ID 결과;태그 결 과 를 ID 로 표시 하면 전체 효능 을 향상 시 킬 수 있 습 니 다
  • result C 를 필드 나 자바 빈 속성 에 주입 하 는 일반적인 결과
  • association C 의 복잡 한 유형 관련;많은 결 과 는 이런 유형 으로 포 함 될 것 이다.
    4
  • 삽입 결과 맵 C 결 과 는 자신의 관 계 를 나타 내 거나 1 개 를 참고 합 니 다
  • collection C 복잡 한 유형의 집합4
  • 결과 맵 C 결과 맵 자체 의 집합 을 삽입 하거나 4.567918 을 참고 합 니 다.
    전체 참조 홈 페이지:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Result_Maps
    association 으로 category,collection 으로 products 에 대응 한 다음 result 로 각 구체 적 인 필드 에 대응 합 니 다.
    
    <resultMap id="CategoryResult" type="com.data.dto.CategoryDto">
     <association property="category" javaType="com.data.pojo.Category">
     <result property="id" column="CateId"></result>
     <result property="name" column="CateName"></result>
     </association>
     <collection property="products" ofType="com.data.pojo.Product">
     <result property="id" column="ProductId"></result>
     <result property="name" column="ProductName"></result>
     </collection>
     </resultMap> 
    테스트
    이전 테스트 를 바탕 으로 테스트 방법 을 추가 합 니 다.
    
    @Test
     public void test_getById(){
     int id=2;
     CategoryDto dto= categoryMapper.getById(id);
     if(dto==null){
     System.out.println("   ");
     }else {
     System.out.println("  id="+dto.getId()+" name="+dto.getCategory().getName());
     System.out.println("Products:"+dto.getProducts().size());
     for(Product product:dto.getProducts()){
     System.out.println(" |_"+product.getName());
     }
     }
     }
    운행 후에 뜻밖에도 잘못 보고 하 였 다.
    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 6
    나중에 해결 방안 을 찾 았 습 니 다.resultMap 을 수정 하고 id 노드 를 추가 하면 됩 니 다.
    
    <resultMap id="CategoryResult" type="com.data.dto.CategoryDto">
     <id property="id" column="CateId"></id>
    ……
    </resultMap>
    실행 결과:
    상품 id=2 name=뷰 티
    Products:6
        |_막 법 세가
        |_양조장
        |_에 스 테 로 더
        |_올 레 야
        |_나중
        |_본 초 에 알맞다
  • 좋은 웹페이지 즐겨찾기