Mybatis遇到的一对多,多对多封装问题汇总

一对多
环境:仅使用mybatis框架配置
  1. 要对pojo类进行配置
    在以往写代码顺手之后忘记配置,最好一下配置好包,省掉一些麻烦
	<typeAliases>
		<package name="com.mybatis.pojo"/>
	</typeAliases>
  1. 对mybatis-config.xml进行配置,这个我特别容易忘,不过一旦报错,进会很容易根据报错找到
    错误信息:Type interface com.mybatis.mappers.Many2ManyMapper is not known to the MapperRegistry.
    示例代码:
<mappers>
		<mapper resource="com/mybatis/mappers/One2OneMapper.xml"/>
		<mapper resource="com/mybatis/mappers/Many2ManyMapper.xml"/>
</mappers>
  1. POJO类是否添加对另一个POJO的封装
    List集合封装一对多的另一个多的POJO类的信息,被封装的类也与下面类似
public class TTeacher {
private Integer id;
private String name;
private List<TStudent> students;
//get/set
//无参(必须有,用以反射),有参,toString
}
  1. Mapper.java的接口中一对多的返回值应该是TTeacher类型或其他可封装的List,Map。
public interface Many2ManyMapper {
	//查询老师1号教了哪些学生
	TTeacher selectTeacherWithStudent(Integer teacherId);
}
  1. Mapper.xml的配置
    命名空间 按 Ctrl+单击 测试是否配置正确。
    column属性应与查询结果对应,切记是与查询结果对应,不是不数据库的列名对应
    我就这个问题弄了半天,所有的结果都对,SQLPLUE也能查来,就是封装不了。后来发现我对查询结果起了别名,与column不能一一对应,造成封装失败,返回null。
<mapper namespace="com.mybatis.mappers.One2ManyMapper" >
	<resultMap type="TStudent" id="TStudentResult">
		<id property="id" column="TSID" />
		<result property="name" column="SNAME" />
	</resultMap>
	<resultMap type="TTeacher" id="TTeacherResult">
		<id property="id" column="id" />
		<result property="name" column="name" />
		<collection property="students" resultMap="TStudentResult"></collection>
	</resultMap>
多对多

多对多与一对多很相似,出错可以照着上面的来排查。

  1. 数据库设计
    要设计两个多对多的关系,要设计三张表,比如老师对学生,出老师表,学生表之外,要再设计一张表存储老师和学生的关系表这样方便查询。

  2. POJO类的设计
    以老师和学生为例,只要设计老师和学生的POJO类即可,同时要分别对应加上相应的List,用于查询结果存储。
    其余与上述一对多相似。另建议使用【嵌套结果】,而非【嵌套查询】,这样会提高一些性能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值