在刚刚接触SSM的时候,最初遇到的难题便是多表联查的问题。mybatis由于他的特性一般情况下映射的结果与pojo(entity)实体类里面的属性都是一一对应的。所以如果是多张表联合查询然后返回结果集的话,由于存在pojo里面的属性不全的问题无法完成映射,因为这个问题纠结了2天。
找了许多的网站和例子也没有找到解决的方案,在一次偶然的尝试中发现了解决的方法,因此在这里做下笔记,作为留念。
需求:从Seorder, Seorderentry, Icitemcore获取数据显示到页面上
要求显示的数据
Seorder 表的 FBillNo
Seorderentry 表的 FMapNumber,FEntrySelfS0164
Icitemcore 表的 FNumber FShortNumbe FName
首先写sql语句
SeorderKDao.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="cn.gsp.dao.SeorderKDao">
<sql id="seorderwhere">
<where>
<if test="FBillNo!=null and FBillNo!=''">
and t1.FBillNo=#{FBillNo}
</if>
<if test="FMapNumber!=null and FMapNumber!=''">
and t2.FMapNumber=#{FMapNumber}
</if>
<if test="FEntrySelfS0164!=null and FEntrySelfS0164!=''">
and t2.FEntrySelfS0164=#{FEntrySelfS0164}
</if>
</where>
</sql>
<select id="getByFBillNo" resultType="cn.gsp.pojo.SeorderK" >
SELECT
t1.FBillNo,
t2.FMapNumber,
t2.FEntrySelfS0164,
t3.FNumber,
t3.FShortNumber,
t3.FName
FROM
SEOrder t1
inner join SEOrderEntry t2 on t1.FInterID=t2.FInterID
inner join t_ICItemCore t3 on t2.FItemID=t3.FItemID
<include refid="seorderwhere"></include>
</select>
</mapper>
然后根据xml写出对应的dao接口,dao中的方法名字与xml中select的id要相同
SeorderKDao.java
package cn.gsp.dao;
import java.util.List;
import cn.gsp.pojo.SeorderK;
public interface SeorderKDao {
/**
* 通过查询条件来查询数据
*/
public List<SeorderK&g