1.数据库表结构:
表名: sp_goods_photourl 四个字段: photoUrlId goodsId photoUrl photoNote其中goodsId是一个外键,主键是photoUrlId.
goodsId字段对应的表名:sp_business_goods_info.
两张表之间产生的逻辑关系:在表sp_goods_photourl通过goodsId做sp_business_goods_info.的外键引用。商品图片对商家商品信息是一对一的关系。所以需要在pojo实体类中做级联关系:private BusinessGoods photoOfBusinessGoods;
2.引入jar包 mybatis
3.mybatis-config.xml
做pojo实体类的别名,跟mapper的package映射。
4.pojo类 GoodsPhoto.java -> 路径com.su_pay.pojo.GoodsPhoto
5.做接口类 GoodsPhotoMapper.java ->路径com.su_pay.mapper.GoodsPhotoMapper.java
接口映射类中实现有两个抽象方法,分别是通过sp_goods_photourl表中的两个字段findGoodsPhoto.
6.mapper.xml
这个配置关系复杂,很重要,下面是详细讲解包括映射关系详解:
首先mybatis-config.xml映射到mapper之后:
在GoodsPhotoMapper.xml中出现了下图,直接定位到GoodsPhotoMapper.java
然后在resultMap标签中做pojo类跟数据表的映射:
先不看级联:
总结一下这其中的逻辑大体上就是:resultMap做数据表跟pojo实体类的映射,然后在select中使用resultMap的映射结构,通过调用接口中的抽象方法传参查询,将数据库中的指定数据查询出来保存到pojo类中,然后可以实例化实体类对象,将数据打印出来。如下:
7.最后看一下级联,重点!
首先级联使用到的是实体类中的对应关系:
然后做级联:
执行findBusinessGoodsByGoodsId方法将返回值放到 photoOfBusinessGoods实体类对象中保存。
也就是再把上面 6 的套路走一遍:
最后查询出来的数据还是得放到:
然后通过photoOfBusinessGoods找到BusinessGoods实体类,保存数据:
再然后,还是这个测试用例:
GoodsPhoto实例化就将两张表存储的数据全部输出。