Mybatis的多表操作主要使用了resultMap标签,来处理来自不同数据库表的信息。
示例:
<?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="V_多表操作.Mapper.UserMapper">
<!-- 编写映射文件 -->
<resultMap id="userMap" type="user">
<id column="uid" property="id"></id>
<result column="name" property="name"></result>
<result column="password" property="password"></result>
<!--配置集合信息
property:集合名称
ofType:当前集合中的数据类型
-->
<collection property="orderList" ofType="order">
<!--封装order的数据-->
<id column="oid" property="id"></id>
<result column="date" property="ordertime"></result>
<result column="oname" property="name"></result>
</collection>
</resultMap>
<select id="findAll" resultMap="userMap">
SELECT *,o.id oid,o.name oname FROM USER u,orders o WHERE u.id=o.uid
</select>
</mapper>
<?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="V_多表操作.Mapper.OrderMapper">
<resultMap id="orderMap" type="order">
<!--手动指定字段与实体属性的映射关系
column: 数据库中表的字段名称
property:实体的属性名称
-->
<id column="oid" property="id"></id>
<result column="date" property="ordertime"></result>
<result column="name" property="name"></result>
<!--<result column="uid" property="user.id"></result>
<result column="name" property="user.name"></result>
<result column="password" property="user.password"></result>-->
<!--
property: 当前实体(order)中的属性名称(private User user)
javaType: 当前实体(order)中的属性的类型(User)
-->
<association property="user" javaType="user">
<id column="uid" property="id"></id>
<result column="uname" property="name"></result>
<result column="password" property="password"></result>
</association>
</resultMap>
<select id="findAll" resultMap="orderMap">
SELECT *,o.id oid,u.name uname FROM orders o,user u WHERE o.uid=u.id
</select>
</mapper>
@Test
public void test1() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("V/sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
List<order> orderList = mapper.findAll();
for (order order : orderList) {
System.out.println(order);
}
sqlSession.close();
}
@Test
public void test2() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("V/sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.findAll();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}