美文网首页
一对多关系

一对多关系

作者: 神豪VS勇士赢 | 来源:发表于2018-07-30 17:24 被阅读6次

需求:
查询某种图书分类下面的所有图书。
查询某种电脑分类下面的所有电脑。
查询某种手机分类下面的所有手机。
查询某种服装分类下面的所有服装。
查询某种美食分类下面的所有美食。

方案一:
一对多关联,就需要取得关联的多条记录。

在BookType 实体类里面加入

private ArrayList<BookInfo> bookInfos;

映射文件如下所示:

<select id="selectByOneToMany" parameterType="java.lang.Long" resultMap="resultMapSelectByOneToMany">
SELECT
t_book_type.,t_book_info.
FROM t_book_type ,t_book_info
WHERE t_book_type.type_id=t_book_info.type_id
AND t_book_type.type_id=#{typeId}
</select>

需要注意的地方是 : resultMap="resultMapSelectByOneToMany"

resultMapSelectByOneToMany 如下所示:

<resultMap id="resultMapSelectByOneToMany" type="com.zyh.pojo.BookType">
<id column="type_id" jdbcType="BIGINT" property="typeId" />
<result column="type_name" jdbcType="VARCHAR" property="typeName" />
<result column="type_desc" jdbcType="VARCHAR" property="typeDesc" />
<collection property="bookInfos" ofType="com.zyh.pojo.BookInfo">
<id column="book_id" jdbcType="BIGINT" property="bookId" />
<result column="book_name" jdbcType="VARCHAR" property="bookName" />
<result column="book_author" jdbcType="VARCHAR" property="bookAuthor" />
<result column="book_price" jdbcType="DOUBLE" property="bookPrice" />
<result column="book_date" jdbcType="TIMESTAMP" property="bookDate" />
<result column="book_publish" jdbcType="VARCHAR" property="bookPublish" />
<result column="book_desc" jdbcType="VARCHAR" property="bookDesc" />
<result column="type_id" jdbcType="BIGINT" property="typeId" />
</collection>
</resultMap>

上面的配置文件需要注意的地方是:


image.png

对应的都是实体的属性。

这里需要注意的地方是 因为我们在 BookType 中引用了 BookInfo 而同时我们的 BookInfo 又依赖 BookType 这个时候我们可以进行修改 BookInfo 删除对于 BookType 的引用或者 留下 对于 BookType 属性的引用。

测试方法如下所示:
@Test
public void testSelectByOneToMany(){
SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();
BookTypeMapper mapper = sqlSession.getMapper(BookTypeMapper.class);
BookType bookType = mapper.selectByOneToMany(1l);
ArrayList<BookInfo> bookInfos = bookType.getBookInfos();
for (BookInfo bookInfo : bookInfos) {
System.out.println(bookInfo);
}
}

我们对于 上面需要的注意点分别进行结果输出:

假如我们并没有在 BookInfo 中删除对于 BookType 的引用 , 输出结果如下:
可以发现如果没有删除引用,输出字段为null ,所以并不会因为没有删除字段造成异常 。这一点需要注意。


image.png

当我们删除 BookInfo 对于 BookType引用字段 ,这个时候输出结果如下所示:

image.png

方案二:

在方案一种,我们使用了连接表,这个时候 我们返回来观察 t_book_info 表 会发现 存在 一个类别的字段,所以我们没必要麻烦连接表 ,这个时候我们可以通过单表查询完成。

不使用关联映射:查询单表:根据分类找图书
在图书信息表中使用单表查询:
第一步:在Mapper映射文件中加入自定义查询

<select id="selectOneToMany" parameterType="java.lang.Long" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_book_info
WHERE type_id = #{typeId}
</select>

映射文件对应的
List<BookInfo> selectOneToMany(Long aLong);

测试方法如下所示:
@Test
public void testSelectOneToMany(){
SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();
BookInfoMapper mapper = sqlSession.getMapper(BookInfoMapper.class);
List<BookInfo> bookInfos = mapper.selectOneToMany(1l);
for (BookInfo bookInfo : bookInfos) {
System.out.println(bookInfo);
}
}

这里需要我们注意的是 当我们在映射文件里面设置不同的 输出类型 测试方法输出完全不相同
注意 这里使用的是 resultMap="BaseResultMap"
输出结果如下所示:

image.png

当我们使用 resultType="com.zyh.pojo.BookInfo"
这时候观察测试方法输出结果为 null 所以上面所说的点需要注意 。

相关文章

  • Day60 - Flask模型关系与查询、钩子函数、装饰器登录校

    一对一关系 其他与一对多关系一样 一对多关系 一对多模型定义 一对多关系查询 多对多关系 多对多关系模型定义 定义...

  • 2018-12-20 模型关系和钩子函数

    一、模型关系定义 1.1 一对多   一对多关系中的查询操作 1.2 一对一 1.3 多对多   创建多对多关系 ...

  • Models and Databases 11.例子

    关系 多对多 关系 多对一 关系 一对一

  • Django 模型间的关系

    Django模型之间的关系 Django模型的对应关系,一对一,一对多,以及多对多的关系。 一对一 OneToOn...

  • day3-django模型对应关系

    模型的对应关系,一对一,一对多,以及多对多的关系。 模型对应关系描述如下:1:1 一对一 OneToOneFi...

  • @OneToMany注解的使用

    假设有两个表,订单表和产品表,订单跟产品的关系是一对多的关系,那么在JPA中怎样表示一对多的关系呢?实体关系一对多...

  • 数据库一对一、一对多、多对多设计

    数据库一对一、一对多、多对多设计 数据库实体间有三种对应关系:一对一、一对多、多对多 一对一关系示例: 一个学生对...

  • 02MySQL的多表操作

    MySQL的多表操作 1 多表关系 MySQL多表之间的关系可以概括为:一对一、一对多/多对一关系,多对多 1.1...

  • 模型关联关系

    模型的对应关系主要分为:一对一,一对多,以及多对多。 模型对应关系描述如下:1:1 一对一 OneToOneFie...

  • spring-data-jpa

    Spring Data JPA 之 一对一,一对多,多对多 关系映射

网友评论

      本文标题:一对多关系

      本文链接:https://www.haomeiwen.com/subject/ynmfvftx.html