ManyToOne 查询

多对一查询

需求场景

tgoods中每一个商品(goodsid 字段)在 t_goods_detail 中对对应了多个商品详情(gd_pic_url 字段)。 如何通过gd_pic_url goods_id 查询到其对应的单个 goods_id 字段呢?

修改 GoodsDetail 实体类

在MyBatis\src\main\java\indi\chester\mybatis\entity\GoodsDetail.java 成员属性中添加一个 Goods 对象,用来表示每一个 GoodsDetail 对象所对应的唯一一个 Goods 对象。

    private Goods goods;

    public Goods getGoods() {
        return goods;
    }

    public void setGoods(Goods goods) {
        this.goods = goods;
    }

添加 selectManyToOne 标签

MyBatis\src\main\resources\mappers\goods_detail.xml 添加下面两个标签:

    <!-- 将SELECT * FROM t_goods_detail LIMIT 0,1 的结果转换为一个个 GoodsDetail对象, 然后将goods_id传入到
    goods.selectById 中的查询语句进行查询,查询结果放回到 GoodsDetail对象中的 goods-->
    <resultMap id="rmGoodsDetail" type="indi.chester.mybatis.entity.GoodsDetail">
        <id column="gd_id" property="gdId"/>
        <association property="goods" select="goods.selectById" column="goods_id"/>
    </resultMap>
    <select id="selectManyToOne" resultMap="rmGoodsDetail">
        SELECT  * FROM t_goods_detail LIMIT 0,1 
    </select>

修改 MyBatisTest.java

MyBatis\src\test\java\MyBatisTest.java 下添加这个方法:

    @Test
    public void testManyToOne () throws Exception{
        SqlSession sqlSession=null;
        try {
            sqlSession=MyBatisUtils.openSession();
            List<GoodsDetail> list = sqlSession.selectList("goodsDetail.selectManyToOne");
            for (GoodsDetail gd: list){
                System.out.println(gd.getGdPicUrl()+ " : "+gd.getGoods().getTitle());
            }
        }catch (Exception e){
            e.printStackTrace();
            throw e;
        }finally {
            MyBatisUtils.closeSession(sqlSession);
        }

    }

这个方法就是选中 tgoodsdetail 中的一条数据,根据 goodsid 去 tgoods 中查询对应的商品, 最后将商品和其对应的 gd_pic_url打印出来。

运行结果:

12:14:56:163 [main]  DEBUG goodsDetail.selectManyToOne -==>  Preparing: SELECT * FROM t_goods_detail LIMIT 0,1  
12:14:56:209 [main]  DEBUG goodsDetail.selectManyToOne -==> Parameters:  
12:14:56:239 [main]  DEBUG goods -Cache Hit Ratio [goods]: 0.0 
12:14:56:240 [main]  DEBUG goods.selectById -====>  Preparing: select * from t_goods WHERE goods_id=?  
12:14:56:240 [main]  DEBUG goods.selectById -====> Parameters: 739(Integer) 
12:14:56:244 [main]  DEBUG goods.selectById -<====      Total: 1 
12:14:56:249 [main]  DEBUG goodsDetail.selectManyToOne -<==      Total: 1 
http://img05.meituncdn.com/group1/M00/04/63/987d578f4a05497190497ca46391bfb4.jpg : 亲润 孕妇护肤品豆

Last updated