<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; //部门名称
---------------------------------------------------------------------
这样我就可以实现我的问题
但是这样会不会其实很累赘?
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
可以一次获取多表的结果只要你的员工表里包含部门实体类,也就是作为一个变量,你需要写一个dao实现层,自己百度一下很多
@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;
}
只要将部门作为一个员工的属性就可以了
数据库员工表里只要有部门id可以进行联合查询
你在 emp 类里 封装一个department 的对象 属性名称要和你 xml对应就行了
每个表都封装成对象,在你要查询的主键表中,加入外键对象(属性),连表查询,用这 对象.属性 表示就好
resultMap里也可以不用关联映射,你直接查出什么字段,映射什么字段即可,另外property属性字段需要与实体类里的字段严格对应,用一个实体就可以,
我之前公司(大唐电信)都是这么做的。
让一个实体类包含 员工表和部门表里的字段,list里边用这个实体类就行了
把返回类型改为map就不会有任何限制
不使用对象映射 使用List接收
或者将列一个表的字段对应的属性写到 主表对象内 用@Transient注解 mapping配置的对象关系映射也加进来 就可以了