Monicase
2017-10-20 02:43
采纳率: 25%
浏览 2.7k
已采纳

mybatis 多表查询 resultMap结果集怎么传到Controller

<resultMap type="com.tsy.springmvc.model.system.Employee" id="ClassResultMap">
    <id property="employeetID" column="employeetID"/>
        <result property="employeetName" column="employeetName"/>
        <result property="depatmentID" column="depatmentID"/>
    <association property="department" javaType="com.tsy.springmvc.model.system.Department">
         <id property="departmentID" column="departmentID"/>
         <result property="departmentName" column="departmentName"/>
    </association>
</resultMap>

<!--   简单的两个表查询  -->
<select id="selectDepartmetAndEmployee" resultMap="ClassResultMap">
    select *
    from employee, department
    where employee.departmentID = department.departmentID
</select>

Controller

@RequestMapping("/")
public ModelAndView index(ModelAndView modelAndView) {
    modelAndView.setViewName("index");
    modelAndView.addObject("employeeAndDepartment", employeeService.selectDepartmetAndEmployee());
    return modelAndView;
}

Service
public interface IEmployeeService extends IService {

List<Employee> selectALLEmployee(Employee);

//这里我就不知道如何去写

}

①我不知道如何才能获取到多表查询的结果,resultMap映射了,但是不知道怎么使用。

②是一个简单的部门和员工, 我想在页面显示所有员工(员工的部门)。

③我是不是应该建立两个mybatis 查询,都是单表查询,然后通过先查询员工,得到员工的所有属性(包括部门ID)
然后在Controller中通过循环查询部门ID,得到一个与员工对应的部门表,然后再通过Model 1 Model 2 传输对应的两个List到页面?


针对@独家de记忆,补充

@TableId(value = "employeeID", type=IdType.AUTO)
private Long employeeID; //员工ID
private String employeeName;//员工姓名
private Long departmentID; //部门ID

    -------------------------------------------------------------------更改之后
    @TableId(value = "employeeID", type=IdType.AUTO)
private Long employeeID; //员工ID
private String employeeName;//员工姓名
private Long departmentID; //部门ID
    @TableField(exist = flase)
    private Long departmentID; //部门名称
    ---------------------------------------------------------------------
    这样我就可以实现我的问题

    但是这样会不会其实很累赘?
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

12条回答 默认 最新

  • 独家de记忆 2017-10-20 03:14
    已采纳
     public class Employee{
        private String A;
        private String B;
        private String C;
        private String D;
    }
    
    
    <resultMap type="com.tsy.springmvc.model.system.Employee" id="ClassResultMap">
        <result property="A" column="a"/>
        <result property="B" column="b"/>
        <result property="C" column="c"/>
        <result property="D" column="d"/>
    </resultMap>
    
    
    
    <select id="selectDepartmetAndEmployee" resultMap="ClassResultMap">
        select a,b,c,d
        from employee, department
        where employee.departmentID = department.departmentID
    </select>
    

    楼主仔细看下以上映射关系;
    1.resultMap中的property对应type com.tsy.springmvc.model.system.Employee中的字段名称
    2.resultMap中的column对应select查询中的字段名称

    你关联查询的字段最终名称是啥,就对应到每个column里面,column转换成Employee对象中的property

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • qq_25717027 2017-10-20 03:03

    可以一次获取多表的结果只要你的员工表里包含部门实体类,也就是作为一个变量,你需要写一个dao实现层,自己百度一下很多

    评论
    解决 无用
    打赏 举报
  • qq_25717027 2017-10-20 03:06

    @Override

    public User selectUser(int id) {

    SqlSession session = sqlSessionFactory.openSession();

    User user = session.selectOne("cn.bj.mybatis.models.UserMapper.selectUser", id);

    session.close();

    return user;

    }

    评论
    解决 无用
    打赏 举报
  • qq_25717027 2017-10-20 03:27

    只要将部门作为一个员工的属性就可以了

    评论
    解决 无用
    打赏 举报
  • qq_25717027 2017-10-20 03:29

    数据库员工表里只要有部门id可以进行联合查询

    评论
    解决 无用
    打赏 举报
  • qq_32957421 2017-10-20 06:43

    你在 emp 类里 封装一个department 的对象 属性名称要和你 xml对应就行了

    评论
    解决 无用
    打赏 举报
  • Bookreflect 2017-10-20 06:57

    每个表都封装成对象,在你要查询的主键表中,加入外键对象(属性),连表查询,用这 对象.属性 表示就好

    评论
    解决 无用
    打赏 举报
  • 卡卡罗特琪琪 2017-10-20 06:58

    resultMap里也可以不用关联映射,你直接查出什么字段,映射什么字段即可,另外property属性字段需要与实体类里的字段严格对应,用一个实体就可以,
    我之前公司(大唐电信)都是这么做的。

    评论
    解决 无用
    打赏 举报
  • 低头飞歌 2017-10-20 07:31

    让一个实体类包含 员工表和部门表里的字段,list里边用这个实体类就行了

    评论
    解决 无用
    打赏 举报
  • Figting_moden 2017-10-20 10:16

    把返回类型改为map就不会有任何限制

    评论
    解决 无用
    打赏 举报
  • Figting_moden 2017-10-20 10:19

    不使用对象映射 使用List接收

    评论
    解决 无用
    打赏 举报
  • Figting_moden 2017-10-20 10:22

    或者将列一个表的字段对应的属性写到 主表对象内 用@Transient注解 mapping配置的对象关系映射也加进来 就可以了

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题