为什么mybatis有selectOne和selectList在一起

时间:2017-12-20 14:43:00

标签: java mybatis

我打算设计一种方法public List<Booking> getBooking(Integer id)来预订,我认为这已经足够了。但我的同事说我应该创建两种方法

public Booking getBooking(Integer id)public List<Booking> getBookingList(Map parameter)

他说我们应该并且也提到mybatis同时也有selectOneselectList

我检查了mybatis selectOne的{​​{1}}和selectList,发现它只调用selectOne中的selectList,如果selectList有一个结果则返回第一个,否则返回null或者throw例外。

因此,我认为没有强有力的理由让selectOne和selectList。

因此我的问题是:

  1. 为什么mybatis有selectOne和selectList而不是selectList
  2. 像mybatis这样做是一种惯例或好习惯,就是当我们想要获取对象时,我们需要设计两个方法,一个用于获取一个对象,另一个用于获取列表对象

1 个答案:

答案 0 :(得分:0)

你的班级不应该

public Booking getBooking() 

这没有多大意义:数据库中的哪些预订会返回?

但它应该

public Booking getBooking(Long id)

这很有意义:它允许获得由给定ID标识的唯一预订。这样的查询在很多用例中都很有用(显示预订,编辑预订等)。而且,实际上,还有getBookings(),这将返回所有预订:你真的不想要,并且通常不应该有任何理由,加载数据库中的所有预订。

现在,为什么myBatis有这两种方法?因为许多查询应该只返回一个值,并且使用在执行这样的查询时返回列表的方法会很麻烦:你会系统地测试列表是否为空,并获得它的第一个元素。