mybatis的dao层传参数对象和parameterType关系

3 篇文章 0 订阅
2 篇文章 0 订阅

今天写项目的时候遇到了一个问题 我在xml里面的parameterType定义的对象里面只有字段A,B,C但是dao里面通过通配符传递接受对象,传进去的有字段A,B,C,D之后通过xml里面取值#{D}可以取到值见代码

public class TestParam{
	private String A;
	private String B;
	private String C;
}
public class TestParam2{
	private String A;
	private String B;
	private String C;
	private String D;
}

public interfacae TestDao{
	int testInsert(T entity);
}

<insert parameterType="xx.xx.xx.xx.xx.TestParam">
	insert into t_test (field1,field2,field3,field4) values (#{A},#{B},#{C},#{D})
</insert>


@Autowired
private TestDao testDao;

public void test(){
	TestParam2 testParam2 = TestParam2();
	testParam2.setA("a");
	testParam2.setB("b");
	testParam2.setC("c");
	testParam2.setD("d");
	testDao.insert(testParam2);
}
结果:D字段正常入库

通过上述代码dao层接受的TestParam2但是我xml里面的parameterType接受的是TestParam1
并且TestParam1不包含D字段但是入库的时候正常入库了并且#{D}也取到值了这里问了下部门的大佬大佬的解释如下:
因为mybatis的运行方式是先有sql然后再去取值,这里的parameterType只是一个指导参数,并不具备实际意义,当sql里面有#{D}的时候会通过反射区找到dao层传递进来的对象去找指定字段的值,编译成功后dao层传递进来的其实就是一个map,sql里面所有的取值都是从这个map里面拿到的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值