使用Mybatis进行查询的时候,查询出来的数据可能有一条数据,也可能是多条,我们就得根据返回数据的条数来指定返回类型,如果记录是多条,那么返回值类型就不能是实体类。
如果查询出来有多条记录,但是我们方法的返回类型是实体类,就会报下面的错误
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne() 因为,当我们的方法返回值类型是实体类,底层会调用selectOne方法,这个方法的返回数据只能有一个
<font color="blue" size="4">总结:查询出来的记录有一条,返回值类型可以是实体类,也可以是集合,如果记录有多条,返回值类型可以设置成List集合,也可以是Map集合,但是一定不能设置成实体类类型,不然报错TooManyResultsException
</font>
我们有的时候,希望能够查询出来有多少条记录,那么SQL语句就使用了分组函数,那么查询出来的结果应该是单行单列
/** * 查询用户信息的总记录数 * @param * @return */
Integer getCount();
<font color="blue" size="4">大家有没有感觉很神奇,为什么会是这个样子的呢?原因是因为mybatis设置了类型别名
MyBatis 已经为Java类型取好的别名(自己起别名时小心重复)
MyBatis已经为许多常见的 Java 类型内建了相应的类型别名。它们都是大小写不敏感的,我们在起别名的时候千万不要占用已有的别名。</font>
<font size="4" color="blue">当返回数据是一条
如果我们查询出来的结果没有一个实体类与之相对应,我们就可以把返回值类型设置成为Map集合
看到上面查询记录为一条的时候,我们用map可以查询出记录,我们再来看看如果记录是多条,用刚刚的方法能不能查询出来</font>
Map<String,Object> getUserMap();
<font color="blue" size="4">解决方法:把多个map放在list集合中
List<Map<String,Object>> getUserMapToList();</font>