mybatis使用注解实现多对一查询
一、实体类(getset方法,toString,构造方法忽略)
public class Dept {
private Integer deptid;
private String dname;
private String dloc;
}
public class Emp {
private Integer empid;
private String ename;
private String esex;
private Date ehiredate;
private Double esal;
private Dept dept;
}
二、接口方法,以下用了两种方法
public interface EmpMapper {
//方法1
@Select("select * from emp inner join dept using(deptid)")
@ResultMap("aaa.myEmp")
public List<Emp> selectAllEmp();
//方法2
@Select("select * from emp inner join dept using(deptid)")
@Results({@Result(property = "empid",column = "empid"),
@Result(property = "ename",column = "ename"),
@Result(property = "esex",column = "esex"),
@Result(property = "ehiredate",column = "ehiredate"),
@Result(property = "esal",column = "esal"),
@Result(property = "dept", column = "deptid",
javaType = Dept.class,one = @One(select ="com.gx.mapper.DeptMapper.selectById" ))
})
public List<Emp> selectAllEmp2();
}
public interface DeptMapper {
/**
* 根据部门id查询部门信息
*/
@Select("select * from dept where deptid=#{deptid}")
public Dept selectById(Integer deptid);
}
三、xml文件
<mapper namespace="aaa"> <resultMap type="Emp" id="BaseEmp"> <id property="empid" column="empid" /> <result property="ename" column="ename"/> <result property="esex" column="esex"/> <result property="ehiredate" column="ehiredate"/> <result property="esal" column="esal"/> </resultMap> <resultMap type="Emp" id="myEmp" extends="BaseEmp"> <!-- 建立关系 property="dept" 指emp里面的dept属性 javaType 指emp属性的类型 --> <association property="dept" javaType="com.gx.domain.Dept" > <id property="deptid" column="deptid"/> <result property="dname" column="dname"/> <result property="dloc" column="dloc"/> </association> </resultMap> </mapper>
四、测试
public class myTest {
SqlSession session = MyBatisUtils.openSession();
EmpMapper empMapper = session.getMapper(EmpMapper.class);
@Test
public void selectAllEmp() {
List<Emp> list = empMapper.selectAllEmp();
for (Emp emp : list) {
System.out.println(emp);
}
MyBatisUtils.closeSession(session);
}
@Test
public void selectAllEmp2() {
List<Emp> list = empMapper.selectAllEmp2();
for (Emp emp : list) {
System.out.println(emp);
}
MyBatisUtils.closeSession(session);
}
}
五、配置
<mappers>
<mapper resource="com/gx/mapping/EmpMapper.xml"/>
<!-- 注解的时候使用class -->
<mapper class="com.gx.mapper.DeptMapper"/>
<mapper class="com.gx.mapper.EmpMapper"/>
</mappers>

浙公网安备 33010602011771号