mybatis 一对一,一对多

model 类:

//班级
public class Clazz implements Serializable{
	private Integer claId;
	private String claName;	
}
//教师
public class Teacher implements Serializable{
	private Integer teaId;
	private String teaName;
}
//学生
public class Student implements Serializable{
	private Integer stuId;
	private String stuName;
	private Clazz clazz = new Clazz();
	private List<Teacher> teachers = new ArrayList<Teacher>();
}

Mapper 接口:

public interface ClazzMapper {
	/** 根据学生查班级*/
	Clazz selectByStuId(@Param("stuId") Integer stuId);
}

public interface TeacherMapper {
	/** 根据学生查老师 */
	List<Teacher> selectByStuId(@Param("stuId") Integer stuId);
}

public interface StudentMapper {
	/** 查询学生列表 */
	List<Student> selectList();
}

Mapping  XML文件

<?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" >
<mapper namespace="com.hfd.student.dao.ClazzMapper" >
  <resultMap id="BaseResultMap" type="com.hfd.student.model.Clazz" >
  	<result column="cla_id" property="claId" jdbcType="INTEGER" />
    <result column="cla_name" property="claName" jdbcType="VARCHAR" />
  </resultMap>
  <sql id="Base_Column_List" >
    T.cla_id, 
    T.cla_name
  </sql>
  <select id="selectByStuId" resultMap="BaseResultMap" >
	    select 
	    <include refid="Base_Column_List" />
	    from t2_clazz T
	    inner join t2_stu_cla sc on T.cla_id = sc.cla_id
	    where sc.stu_id = #{stuId}
  </select>
</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" >
<mapper namespace="com.hfd.student.dao.TeacherMapper" >
  <resultMap id="BaseResultMap" type="com.hfd.student.model.Teacher" >
  	<result column="tea_id" property="teaId" jdbcType="INTEGER" />
    <result column="tea_name" property="teaName" jdbcType="VARCHAR" />
  </resultMap>
  <sql id="Base_Column_List" >
    T.tea_id, 
    T.tea_name
  </sql>

  <select id="selectByStuId" resultMap="BaseResultMap" >
    select 
    <include refid="Base_Column_List" />
    from t2_teacher T
    inner join t2_stu_tea st on T.tea_id = st.tea_id
    where st.stu_id = #{stuId}
  </select>
</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" >
<mapper namespace="com.hfd.student.dao.StudentMapper" >
  <resultMap id="BaseResultMap" type="com.hfd.student.model.Student" >
  	<result column="stu_id" property="stuId" jdbcType="INTEGER" />
    <result column="stu_name" property="stuName" jdbcType="VARCHAR" />
  </resultMap>
  
  <resultMap id="ResultMap" type="com.hfd.student.model.Student" extends="BaseResultMap">
    <association column="STU_ID" property="clazz" javaType="com.hfd.student.model.Clazz" select="com.hfd.student.dao.ClazzMapper.selectByStuId" />
   	<collection column="STU_ID" property="teachers" javaType="arrayList" ofType="com.hfd.student.model.Teacher" select="com.hfd.student.dao.TeacherMapper.selectByStuId"/>
  </resultMap>
  
  <sql id="Base_Column_List" >
    stu_id, stu_name
  </sql>

  <select id="selectList" resultMap="ResultMap" >
	    select 
	    <include refid="Base_Column_List" />
	    from t2_student
   </select>
</mapper>

 

MYSQL 数据表结构:

CREATE TABLE `t2_clazz` (
  `cla_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '班级ID',
  `cla_name` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT '班级名称',
  PRIMARY KEY (`cla_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `t2_stu_cla` (
  `sc_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生班级主键',
  `stu_id` int(11) NOT NULL COMMENT '学生ID',
  `cla_id` int(11) NOT NULL COMMENT '班级ID',
  PRIMARY KEY (`sc_id`),
  KEY `sc_stuid` (`stu_id`),
  KEY `sc_claid` (`cla_id`),
  CONSTRAINT `sc_stuid` FOREIGN KEY (`stu_id`) REFERENCES `t2_student` (`stu_id`),
  CONSTRAINT `sc_claid` FOREIGN KEY (`cla_id`) REFERENCES `t2_clazz` (`cla_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `t2_stu_tea` (
  `st_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生老师中间主键',
  `stu_id` int(11) NOT NULL COMMENT '学生ID',
  `tea_id` int(11) NOT NULL COMMENT '教师ID',
  PRIMARY KEY (`st_id`),
  KEY `st_stuid` (`stu_id`),
  KEY `st_teaid` (`tea_id`),
  CONSTRAINT `st_teaid` FOREIGN KEY (`tea_id`) REFERENCES `t2_teacher` (`tea_id`),
  CONSTRAINT `st_stuid` FOREIGN KEY (`stu_id`) REFERENCES `t2_student` (`stu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `t2_student` (
  `stu_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生ID',
  `stu_name` varchar(20) DEFAULT NULL COMMENT '学生姓名',
  PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

CREATE TABLE `t2_teacher` (
  `tea_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '教师ID',
  `tea_name` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT '教师姓名',
  PRIMARY KEY (`tea_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值