已知条件已在上一篇关联单个对象的文中写明,这篇文章则继续根据上篇的已知数据,实现Mybatis一对多的两种关联查询方式
新增数据如下:
1、dao.UserDao.java(Mapper映射器)
package dao;
import entity.User;
public interface UserDao {
//关联多个对象
public User findUserById1(String userId);//一条语句执行sql
public User findUserById2(String userId);//两条语句执行sql
}
2、UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<!-- namespace为命名空间,需与映射器全名一致 -->
<mapper namespace="dao.UserDao">
<!-- 使用一条sql语句来加载User和关联的Book(关联多个对象) -->
<select id="findUserById1" parameterType="String" resultMap="userMap1">
select *from cn_user u join cn_book b on(u.cn_user_id=b.cn_user_id)
where u.cn_user_id=#{id}
</select>
<resultMap id="userMap1" type="entity.User">
<!-- 定义cn_user字段的装载,一定不能少写 -->
<id property="cn_user_id" column="cn_user_id" />
<result property="cn_user_name" column="cn_user_name" />
<result property="cn_user_password" column="cn_user_password" />
<collection property="books" javaType="java.util.List" ofType="entity.Book">
<id property="cn_book_id" column="cn_book_id" />
<result property="cn_user_id" column="cn_user_id" />
<result property="cn_book_name" column="cn_book_name" />
</collection>
</resultMap>
<!-- 使用两条sql语句来加载User和关联的Book(关联多个对象) -->
<select id="findUserById2" parameterType="String" resultMap="userMap2">
select *from cn_user where cn_user_id=#{id}
</select>
<resultMap id="userMap2" type="entity.User">
<!-- 映射主键 -->
<id property="cn_user_id" column="cn_user_id"/>
<!-- 映射其他字段,此处可以选择性指定其他属性 -->
<result property="cn_user_name" column="cn_user_name"/>
<!-- 指定books属性是一个List<Book>集合 -->
<collection property="books" javaType="java.util.List" ofType="entity.Book"
select="findBooks" column="cn_user_id" >
</collection>
</resultMap>
<select id="findBooks" parameterType="String" resultType="entity.Book">
select *from cn_book where cn_user_id=#{userId}
</select>
</mapper>
3、测试类TestCase.java
package test;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import dao.UserDao;
import entity.User;
public class TestCase {
private UserDao dao;
private ApplicationContext ac;
@Before
public void init() {
ac = new ClassPathXmlApplicationContext("spring-mybatis.xml");
dao = ac.getBean("userDao", UserDao.class);
}
@Test
public void test01() {
User user = dao.findUserById1("用户id");//一对多,使用一条sql查询
System.out.println(user);
}
@Test
public void test02() {
User user = dao.findUserById2("用户id");//一对多,使用两条sql查询
System.out.println(user);
}
}
以上便是Mybatis关联映射中的多个映射的两种书写情况,有不懂的可以评论或者私聊