MyBatis 에서 다 중 관계 에 대한 맵 과 조회

먼저 요 구 를 말씀 드 리 겠 습 니 다.
페이지 에 데이터베이스 에 있 는 모든 도 서 를 표시 하고 도 서 를 표시 하 는 동시에 이 도서 가 속 한 유형 을 표시 합 니 다.(이 책 은 여러 종류 에 속 할 수 있 습 니 다)
생 성 표:
필 자 는 여기 서 중간 표를 사용 하여 도서 표 와 도서 유형 표를 연결 하고 도서 표 에 외 키 관련 도서 유형 표를 사용 하지 않 았 다.
중간 표 에서 도서 메 인 키 와 카 테 고리 메 인 키 를 참조 하 였 습 니 다.
중간 표를 통 해 도서 와 도서 유형의 관 계 를 표시 하 다.
도서 표 만 들 기(도서 번호,도서 이름)

create table book
(
 bid int primary key auto_increment,
 bname varchar(20)   
);
분류 표 만 들 기(분류 번호,분류 이름)

create table category
(
 cid int primary key auto_increment,
 cname varchar(20)
);
중간 표 만 들 기(도서 번호,분류 번호)

create table middle
(
 m_bid int,
 m_cid int,
 constraint fk_bid foreign key(m_bid) references book(bid),
 constraint fk_cid foreign key(m_cid) references category(cid)
);
테스트 데이터 삽입

insert into category values (default,'java');
insert into category values (default,'c++');
insert into category values (default,'mysql');
insert into book values (default,'SQL  ');
insert into book values (default,'SSM+MySQL  ');
insert into book values (default,'C++ java  ');
insert into middle values (1,3);
insert into middle values (2,1);
insert into middle values (2,3);
insert into middle values (3,2);
insert into middle values (3,1);
삽 입 된 데이터 중 첫 번 째 책 은 하나의 유형 이 있 고 두 번 째 책 과 세 번 째 책 은 모두 두 가지 유형 이 있다.
지금까지 데이터베이스 일 은 끝났다.다음은 MyBatis-generator 를 통 해 실체 클래스,DAO 인터페이스,XML 맵 파일 을 생 성 합 니 다.  여 기 를 클릭 하지 않 습 니 다.
편리 함 을 위해 필 자 는 자바 프로젝트 프레젠테이션 을 통 해 새로 만 든 자바 프로젝트 에 자동 으로 생 성 된 파일 을 넣 고 관련 된 Jar 패 키 지 를 가 져 옵 니 다.프로젝트 구 조 는 다음 과 같 습 니 다.

이제 생 성 된 도서 실체 류 를 열 어 보 겠 습 니 다.

public class Book {
 private Integer bid;
 private String bname;
 public Integer getBid() {
 return bid;
 }
 public void setBid(Integer bid) {
 this.bid = bid;
 }
 public String getBname() {
 return bname;
 }
 public void setBname(String bname) {
 this.bname = bname == null ? null : bname.trim();
 }
}
도서 번호,도서 이름 이라는 두 가지 속성 만 있 고 우리 의 수 요 는 도 서 를 얻 는 동시에 이 도서 가 속 한 모든 유형 을 얻 는 것 이기 때문에 우 리 는 도서 실체 류 에 도서 유형의 집합 을 추가 하 는 것 을 고려 할 수 있다.
수 정 된 도서 실체 류 는 다음 과 같다.

public class Book {
 private Integer bid;
 private String bname;
 private List<Category> categories;
 public Integer getBid() {
 return bid;
 }
 public void setBid(Integer bid) {
 this.bid = bid;
 }
 public String getBname() {
 return bname;
 }
 public void setBname(String bname) {
 this.bname = bname == null ? null : bname.trim();
 }
 public List<Category> getCategories() {
 return categories;
 }
 public void setCategories(List<Category> categories) {
 this.categories = categories;
 }
}
다음은 SQL 문 구 를 작성 하고 연결 조회 로 모든 도서 와 도서 유형 을 찾 아 보 겠 습 니 다.

select 
 * 
from 
 book b
  inner join 
    middle m
  on
    b.bid=m.m_bid
  inner join
    category c
  on
   m.m_cid=c.cid
실행 결 과 는 다음 과 같이 모든 도서 와 이 도서 의 유형 을 완벽 하 게 보 여 준다.

다음은 XML 맵 파일 에서 손발 을 움 직 여 우리 가 원 하 는 대로 도서 실체 류 에 자동 으로 채 울 수 있 도록 합 니 다.
이것 은 중점 을 강조 하기 위해 도서 의 맵 파일 과 DAO 인 터 페 이 스 를 비 웁 니 다.비 운 후에 다음 과 같 습 니 다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.mybatis.dao.BookMapper" >
 <select id="queryAll"> 
 </select>
</mapper>

public interface BookMapper {
 List<Book> queryAll();
}
비 운 후에 우 리 는 쓰기 시 작 했 습 니 다.결 과 는 다음 과 같 습 니 다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.mybatis.dao.BookMapper" > 
 <resultMap type="com.mybatis.entity.Book" id="bookMap">
 <id property="bid" column="bid" />
 <result property="bname" column="bname" /> 
 <collection property="categories" ofType="com.mybatis.entity.Category">
 <id property="cid" column="cid" />
 <result property="cname" column="cname" /> 
 </collection>
 </resultMap>
 <select id="queryAll" resultMap="bookMap">
 select 
 * 
 from 
 book b
 inner join 
 middle m
 on
 b.bid=m.m_bid
 inner join
 category c
 on
 m.m_cid=c.cid
 </select>
</mapper>
마지막 으로 main 방법 테스트 를 작성 하 겠 습 니 다.

public class MyMain {
 public static void main(String[] args) throws IOException {
 String resource = "mybatis-config.xml";
 Reader reader = Resources.getResourceAsReader(resource);
 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
 SqlSession session = factory.openSession();
 BookMapper bookMapper = session.getMapper(BookMapper.class);
 for (Book book : bookMapper.queryAll()) {
 System.out.print("["+book.getBname()+"]");
 for(Category category :book.getCategories()){
 System.out.print(category.getCname()+"\t");
 }
 System.out.println("
"); } } }
테스트 결 과 는 아래 그림 과 같다.

모든 도서 와 대응 하 는 도서 유형 을 성공 적 으로 출력 하 였 다.
전체 항목 다운로드:다운로드 클릭
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기