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 를 실행 하여 관련 클래스 를 자동 으로 생 성 합 니 다.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 에 대하 여:
4
전체 참조 홈 페이지: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
|_막 법 세가
|_양조장
|_에 스 테 로 더
|_올 레 야
|_나중
|_본 초 에 알맞다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 모델 층 은 다 중 표 관계 생 성과 다 중 표 작업 을 실현 합 니 다.먼저 명확 한 것 은 여러 쌍 의 추가 삭제 수정 은 세 번 째 관계 표를 조작 하 는 것 입 니 다.그러나 세 번 째 관계 표 는 django 가 자동 으로 만 든 것 입 니 다.어떻게 코드 를 통 해 세 번 째 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.