Mybatis04_多對多查詢
customer表結構:
customer表內容:
goods表結構:
goods表內容:
中間表customer_goods表結構:
中間表customer_goods表內容:
Customer實體:
package com.blu.entity;
import java.util.List;
import lombok.Data;
@Data
public class Customer {
private long id;
private String name;
private List<Goods> goods;
}
Goods實體:
package com.blu.entity;
import java.util.List;
import lombok.Data;
@Data
public class Goods {
private long id;
private String name;
private List<Customer> customers;
}
查詢Customer帶Goods
CustomerRepository接口:
package com.blu.repository;
import com.blu.entity.Customer;
public interface CustomerRepository {
public Customer findById(long id);
}
CustomerRepository.xml:
<?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.blu.repository.CustomerRepository">
<resultMap id="customerMap" type="com.blu.entity.Customer">
<id column="cid" property="id"></id>
<result column="cname" property="name"></result>
<collection property="goods" ofType="com.blu.entity.Goods">
<id column="gid" property="id" />
<result column="gname" property="name" />
</collection>
</resultMap>
<select id="findById" parameterType="long" resultMap="customerMap">
select c.id cid,c.name cname,g.id gid,g.name gname
from customer c,goods g,customer_goods cg
where c.id = #{id} and cg.cid = c.id and cg.gid = g.id
</select>
</mapper>
註冊mapper
<mapper resource="com/blu/mapper/CustomerRepository.xml"></mapper>
測試方法:
public class Test {
public static void main(String[] args) {
InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
CustomerRepository customerRepository = sqlSession.getMapper(CustomerRepository.class);
Customer customer = customerRepository.findById(1L);
System.out.println(customer);
sqlSession.close();
}
}
結果:
Customer(id=1, name=張三, goods=[Goods(id=1, name=電視, customers=null), Goods(id=3, name=洗衣機, customers=null)])
查詢Goods帶Customer
GoodsRepository 接口:
package com.blu.repository;
import com.blu.entity.Goods;
public interface GoodsRepository {
public Goods findById(long id);
}
GoodsRepository.xml:
<?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.blu.repository.GoodsRepository">
<resultMap id="goodsMap" type="com.blu.entity.Goods">
<id column="gid" property="id"></id>
<result column="gname" property="name"></result>
<collection property="customers" ofType="com.blu.entity.Customer">
<id column="cid" property="id" />
<result column="cname" property="name" />
</collection>
</resultMap>
<select id="findById" parameterType="long" resultMap="goodsMap">
select c.id cid,c.name cname,g.id gid,g.name gname
from customer c,goods g,customer_goods cg
where g.id = #{id} and cg.cid = c.id and cg.gid = g.id
</select>
</mapper>
註冊mapper
<mapper resource="com/blu/mapper/GoodsRepository.xml"></mapper>
測試方法:
public class Test {
public static void main(String[] args) {
InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
GoodsRepository goodsRepository = sqlSession.getMapper(GoodsRepository.class);
Goods goods = goodsRepository.findById(3L);
System.out.println(goods);
sqlSession.close();
}
}
結果:
Goods(id=3, name=洗衣機, customers=[Customer(id=1, name=張三, goods=null), Customer(id=3, name=李華, goods=null)])