Mybatis多表查询
一、创建VO多表查询:
1、二个实体类
/**
* 学生
* @author deer
*
*/
public class Student {
private Integer sno;//序号
private String sname;//学生名
private int sage;//年龄
}
/**
* 班级
* @author deer
*
*/
public class Classx {
private Integer cno;//序号
private String csno;//学生ID
private String cname;//班级名
private int csc;//分数
}
2、VO类
/**
* 学生 班级 VO 类
* @author Deer
*
*/
public class StudentClassVO {
private Integer sno;//学生ID 如果没有设置主键,可能会被重叠覆盖返回一个结果集。
private Student student;//学生对象
private Classx classx;//班级对象
}
没有贴SetGet方法。太长了。
3、接口
/**
* 创建接口
* @author Deer
*
*/
public interface VODao {
List<StudentClassVO> queryVO();//无参返回List
}
4、Mapper
<?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" >
<!-- namespace=接口所在位置 -->
<mapper namespace="com.zking.dao.VODao">
<!-- 标签: resultMap=结果映射 ; 属性:id=唯一标识 type=类型 -->
<resultMap id="BaseResultMap" type="com.zking.vo.StudentClassVO">
<!-- 标签:id=主键/唯一标识; 属性: property=Class类字段 column=数据库字段 -->
<id property="sno" column="sno"></id>
<!-- 标签: association=联系(VO类中的对象);属性:property=Class中的字段 javaType=类型 -->
<association property="student" javaType="com.zking.entity.Student">
<id property="sno" column="sno"/>
<result property="sname" column="sname"/>
<result property="sage" column="sage"/>
</association>
<association property="classx" javaType="com.zking.entity.Classx">
<id property="cno" column="cno"/>
<result property="csno" column="csno"/>
<result property="cname" column="cname"/>
<result property="csc" column="csc"/>
</association>
</resultMap>
<select id="queryVO" resultMap="BaseResultMap">
select * from student stu,classx cx where stu.sno=cx.csno
</select>
</mapper>
5、调用
@Controller
@RequestMapping("/")
public class SkipControlloer {
@Autowired
VODao vo;//自动注入
@RequestMapping("{name}.html")//{name} 占位符
public void skip(@PathVariable String name){//获取占位符中的值
List<StudentClassVO> list2 = vo.queryVO();
System.out.println();
}
}
二、不创建VO,直接返回Map
1、接口加个方法
/**
* 创建接口
* @author Deer
*
*/
public interface VODao {
List<StudentClassVO> queryVO();//无参返回List
List<Map> queryForMap();//无参返回List<Map>
}
2、Mapper中添加一个查询
<!-- 属性:resultType=结果类型 -->
<select id="queryForMap" resultType="java.util.HashMap">
select * from student stu,classx cx where stu.sno=cx.csno
</select>
3、调用
@Controller
@RequestMapping("/")
public class SkipControlloer {
@Autowired
VODao vo;//自动注入
@RequestMapping("{name}.html")//{name} 占位符
public void skip(@PathVariable String name){//获取占位符中的值
// List<StudentClassVO> list2 = vo.queryVO();
List<Map> list = vo.queryForMap();
System.out.println();
}
}