JavaGuide icon indicating copy to clipboard operation
JavaGuide copied to clipboard

Dao接口里方法重载的一些补充

Open klogan2023 opened this issue 4 years ago • 1 comments

Dao接口中方法是可以重载的,但是有一些限制。 1、无参数方法可以和有参数方法共存。guide哥文中已经写了 2、同为有参方法,参数数量必须一致。且使用相同的@Param,或者使用param1这种

下面是参数数量不同时,测试如下: PersonDao.java QQ截图20210416094749 PersonDao.xml QQ截图20210416131153

queryById()执行到DynamicContext中 QQ截图20210416094621 因为传的参数为空,所以获取到的parameterObject为空,获取到id和name值为null,标签中条件就不成立了,sql语句可以执行通过。

queryById(1L)执行到DynamicContext中,当标签获取name的参数值时 QQ截图20210416094700

参数数组中只有参数名id和param1两个参数。parameterObject为参数Map。进入((Map)parameterObject).get(name)方法中。 QQ截图20210416094718

因为刚才的parameterObject只含有id和param1两个参数,所以不包含name,抛出异常。 <if test="name != null and name != ''">执行失败。

queryById(1L,"1")方法可以正常执行

klogan2023 avatar Apr 16 '21 05:04 klogan2023

Dao接口中方法是可以重载的,但是有一些限制。 1、无参数方法可以和有参数方法共存。guide哥文中已经写了 2、同为有参方法,参数数量必须一致。且使用相同的@param,或者使用param1这种

下面是参数数量不同时,测试如下: PersonDao.java QQ截图20210416094749 PersonDao.xml QQ截图20210416131153

queryById()执行到DynamicContext中 QQ截图20210416094621 因为传的参数为空,所以获取到的parameterObject为空,获取到id和name值为null,标签中条件就不成立了,sql语句可以执行通过。

queryById(1L)执行到DynamicContext中,当标签获取name的参数值时 QQ截图20210416094700

参数数组中只有参数名id和param1两个参数。parameterObject为参数Map。进入((Map)parameterObject).get(name)方法中。 QQ截图20210416094718

因为刚才的parameterObject只含有id和param1两个参数,所以不包含name,抛出异常。 <if test="name != null and name != ''">执行失败。

queryById(1L,"1")方法可以正常执行

👍 这块你可以提交一个 PR 完善一下。代码不用截图,直接贴上来就行了。

Snailclimb avatar Apr 20 '21 09:04 Snailclimb