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>

  

posted @ 2020-04-25 20:18  青青子衿啊  阅读(755)  评论(0)    收藏  举报