怎么在MyBatis中实现一个表关联查询功能

  介绍

这期内容当中小编将会给大家带来有关怎么在MyBatis中实现一个表关联查询功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

MyBatis中的一对多对象关联查询查询

模拟情景,商品与商品详情:一件商品可以对应多个商品详情信息,即从商品吗?商品详情方向看,属于一对多。在一对多关系中,需要在属于一的一方的实体类中添加多的一方的集合,一般为List<祝辞类型

,//(省去了获取和设置的方法)   ,public  class  Goods  {   private 才能;Integer  goodsId ;   private 才能;String  title ;   private 才能;String  subTitle ;   private 才能;Float  originalCost ;   private 才能;Float  currentPrice ;   private 才能;Float  discount ;   private 才能;Integer  isFreeDelivery ;   private 才能;Integer  categoryId ;//才能在一对多关系中,在一方添加多的一方的集合   private 才能;List< GoodsDetail>, goodsDetailLists ,,   }

在“一方“实体类对应的xml文件中,添加配置信息

& lt; !,,,对多对象关联查询   ,,,resultMap可用于说明一对多或者多对一的映射逻辑   ,,,id 是resultMap属性引用的标志   ,,,type 指向一个的实体(货物)   ——比;   & lt;才能resultMap  id=皉mGoods1",类型=癱om.imooc.mybatis.entity.Goods"比;   & lt; !,,,,,映射商品对象的主键到goods_id字段——比;   ,,,& lt; id 列=癵oods_id",财产=癵oodsId"祝辞& lt;/id>   & lt; !   ,,,收集的含义是,在   ,,,sql语句得到结果后,对所有商品对象遍历得到goods_id字段值,   ,,,并代入到goodsDetail命名空间的selectByGoodsId的sql中执行查询   ,,,将得到的“商品详情”集合赋值给goodsDetailsList对象   ——比;   ,,,& lt; collection 财产=癵oodsDetailLists",选择=癵oodsDetail.selectByGoodsId"   ,,,,,,,,,列=癵oods_id"祝辞& lt;/collection>   & lt;才能/resultMap>   & lt;才能select  id=皊electOneToMany", resultMap=皉mGoods1"比;   ,,,select  *,得到t_goods  limit  0,,, 1   & lt;才能/select>

在“多方”对应的xml文件中添加

& lt; mapper 名称空间=癵oodsDetail"比;   & lt;才能select  id=皊electByGoodsId", parameterType=癐nteger"   ,,,,,resultType=癱om.imooc.mybatis.entity.GoodsDetail"比;   ,,,select  *,得到t_goods_detail  where  goods_id =, # {value}   & lt;才能/select>   & lt;/mapper>

至此,关于商品到商品详情的一对多查询配置就完成了。

测试

,//对   @Test才能   public 才能;void  selectOneToMany () {   ,,,SqlSession  SqlSession =, null ;   ,,,试着{   ,,,,,sqlSession =, MybatisUtils.openSession (),;   ,,,,,List, list =, sqlSession.selectList (“goods.selectOneToMany");   ,,,,,for  (Goods  g :列表){   ,,,,,//输出商品和该商品的详情信息数量   ,,,,,,,System.out.println (g.getTitle (), +,“:“, +, g.getGoodsDetailLists () .size ());   ,,,,,}   ,,,}catch  (Exception  e) {   ,,,,,e.printStackTrace ();   ,,,}finally  {   ,,,,,MybatisUtils.closeSession (sqlSession);   ,,,}   ,,}

Mybatis多对一对象关联查询

在上诉情景中,商品详情?商品即为多对一的关系
在多对一关系中,需要在多的一方的实体类中添加一的一方的实体对象

public  class  GoodsDetail  {   private 才能;Integer  gdId ;   private 才能;Integer  goodsId ;   private 才能;String  gdPicUrl ;   private 才能;Integer  gdOrder ;//多才能对一:在多的一方添加一的一方的实体   private 才能;Goods  Goods ;   }

在多的一方xml文件中添加

& lt; !,,,多对一关系——比;   & lt;才能resultMap  id=皉mGoodsDetail",类型=癱om.imooc.mybatis.entity.GoodsDetail"比;   ,,,& lt; id 列=癵d_id",财产=癵dId"祝辞& lt;/id>   ,,,& lt; result 列=癵oods_id",财产=癵oodsId"祝辞& lt;/result>   ,,,& lt; !——, goods.selectById 为goods.xml根据主键id查找商品信息。——比;   ,,,& lt; association 财产=癵oods",选择=癵oods.selectById",列=癵oods_id"祝辞& lt;/association>   & lt;才能/resultMap>   & lt;才能select  id=皊electManyToOne", resultMap=皉mGoodsDetail"比;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在MyBatis中实现一个表关联查询功能