MyBatis的<constructor>是指定而非创建

1.mybatis在实体类只有一个构造函数的情况下是不会报错的,不管你是查询几个列,不管你有没有写getter,setter,只要有一个构造函数(不管无参,有参,有几个),都能够正确输出toString。

2.在实体类有多个构造函数,并且没有和mapper文件中的sql语句对应的构造函数时(不管有没有getter,setter))会报错如下:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in com.entity.Test1 matching [java.lang.Integer, java.lang.String]

主要是记录一下:对这个不怎么理解,只要随便有一个构造函数就可以,但是构造函数超过或者等于2个,并且没有和mapper的sql语句对应的构造函数会出错。

3.解决方法:从1,2可知,只要有一个构造函数就可以解决问题,可能是mybatis有选择恐惧症,不知道选哪个。因此在没有符合sql语句的构造函数的情况下,我们可以使用<resultMap>中的<constructor>指定一个具体的构造函数给mybatis。注意:这里是指定,而不是让mybatis通过<constructor>创建。我就搞错了,浪费2小时在上面。

听课没听懂,还是看了https://blog.csdn.net/u012702547/article/details/54599132这篇文章看见的指定。

posted on 2020-03-18 15:14  我欲皆真  阅读(2986)  评论(0编辑  收藏  举报

导航