今天写用户注册功能,报了一个错误,如下:

提示是参数不匹配的错误,我赶紧查看一下SQL语句


发现好像并没有什么毛病啊,那为什么报这个错误呢?
从报错信息来看是参数不匹配,于是我在插入前添加了两条打印语句,如下

可以看到控制台成功打印,说明参数赋值没有问题,但是给出了一个SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7a214eb] was not registered for synchronization because synchronization is not active的错误提示

这个错误的意思是插入的某个字段是null,而数据库设计的时候,这个字段不能为null,所以报错。

打开数据库一看,确实有个id是不为null,可是id设置了自增啊!
下面,重点来了!
转念一想,在mybatis中#{}底层调用的是jdbc的prepareStatement的set方法!
既然你需要id字段,那我就给你传user对象,你自个去数据库自增吧!
修改如下:


测试:效果很不错,数据成功插入。以上只是解决该问题的其中一种方案,仅供参考。

在开发用户注册功能时遇到一个参数不匹配的错误,检查SQL语句无误。通过打印语句排除了参数赋值问题,但出现'SqlSession'未注册同步错误,提示某字段不应为null。发现数据库中id字段不允许为null,但已设置为自增。经分析,MyBatis底层使用PreparedStatement,传入user对象让数据库自增解决了问题。了解框架底层原理至关重要。

7627

被折叠的 条评论
为什么被折叠?



