# ManyToOne 查询

### 需求场景

tgoods中每一个商品(goods*id 字段)在 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 对象。

```java
    private Goods goods;

    public Goods getGoods() {
        return goods;
    }

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

### 添加 selectManyToOne 标签

&#x20;MyBatis\src\main\resources\mappers\goods\_detail.xml 添加下面两个标签:

```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&#x20;

&#x20;MyBatis\src\test\java\MyBatisTest.java 下添加这个方法:

```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);
        }

    }
```

这个方法就是选中 t*goodsdetail 中的一条数据，根据 goodsid 去 tgoods 中查询对应的商品, 最后将商品和其对应的 gd\_pic\_*&#x75;rl打印出来。

运行结果:&#x20;

```
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 : 亲润 孕妇护肤品豆乳大米盈润保湿胶原蚕丝面膜（18片装）
```
