一.功能描述
一个大学生去提交自己的身份验证,如果已经验证则显示他的身份验证信息,如果没有验证则填写验证信息并显示在验证页面。
二.工具,框架,表
采用springboot+mybatis框架,服务器用tomca,数据库用MySQL,数据库管理用的Navicat.
两张表主键皆为自动递增,且没有设置外键关联
第一张大学生表:college
第二张认证信息表:qualityinfo
三.遇到问题以及难点
1.如何确认大学生保存的认证身份信息,与展现页面上的一致(就是大学生认证的个人信息与展现的一致)。
2.大学生身份验证信息假如已经验证,如何点击认证页面时直接展示验证信息而不至于为空。
3.当你刷新页面时,原来展现的认证信息,仍然存在。
4.如何在没有外键的情况下,由大学生表中的字段去查找认证信息表的内容。
5.如何在当点击大学生认证信息保存时,取到数据库设计主键自增的qualityId。
6.最纠结的是我发布验证信息时候,大学生还没产生qualityID,当验证完成后要将qualityinfo的qualityID传到college表中。。how to do it !!!!
四.过程
1.开始想的是把信息填好保存就行,然后展示就行了
写完过后马上运行,页面也展现出来了,数据库数据也增加了,那岂不是就完成了。下个功能走起。结果写下个功能时不下心点进认证中心,WTF???里面的信息没有了,再往里面添加数据,依然能行。WTF,每次刷新每次都要认证。。。并且在数据库中发现每次增加一个认证信息对象,college表中qualityID并没有。。。,可是我记得建立关系了,在collegeDao中
2.既然新增加的qualityInfo对象在college表中qualityId并没有出现,那就自动加吧。并且要把这两个对象关联起来
于是我做了一个惊为天人的操作,在Navicat里面college表的qualityID直接手动加,嘿嘿。于是再次run,发现神奇的一幕,当我点击认证的时候,我其实已经认证了(手动在college的qualityID上传了个数据),然后新认证的信息不知道给谁认证的。老衲真的6666.
3.后来为了验证信息自己还是自己的,得保证两张表中qualityId相同,于是我就将保存对象的通过查ID取出来,然后再给college加上qualityID属性,我是这样操作的
好吧,我也不知道为撒我一个set方法就天真认为把它存在数据库里面了。。。
4.前方核能
我沿着上面的错误道路越走越远,甚至以为快抵达光明的道路。当时想college的qualityID有了,那么得根据它去查验证表中的属性啊,得用一个连接查询
嘿嘿,终于要完成了,把数据展现一下mv.addObject("icn",college.getIcn());卧槽咋报错了,college里面咋没有getICN这个方法,我他妈明明连接查询了。想了半天,都想不通。后来就去Navicat里面直接运行SQL,发现原来两张表已经整合成一个了,college也不是当初的college了。。。哎,物是人非事事休,欲语泪先流。
5.后来想不是college中qualityID都有值了(是的我还以为set()能把值保存在数据库中),那我直接用college.qualityID然后再通过quality表查询不就完了,嗯,应该是这样的。把展示数据也传到前端,再一次点起了run,激动的搓起了小手手,顺便趁运行时间去楼下小卖部买了冰可乐。
6.回到寝室,我尼玛,又没有成功,debug一下,妈的,发现在这一步都出现问题了
qualityinfo.getQualityId根本没东西,于是去百度一下,发现是表中设置主键自动增长,主键的值取不到,真的操蛋把,后来去数据库发现college.qualityId,为空想了半天,突然想起set能把数据存进数据库吗???喝锤子可乐。。
7.于是我又根据quality中的ICN(身份证)查到这个人,然后再通过update,把qualityID的值写进college里面
还有写更新语句时,第一次没有加上@Param运行报错,说是参数没有绑定
整个控制器是这样的
现在点击run,添加数据,没有问题,哈哈我终于解决了,伴随着我越来越嬴荡的笑声似乎该整一口冰可乐了
8.但是当我返回主页面点击发现没有了,苍天啊,大地啊,我还能毕业吗??找了半天我发现在college的控制器我写了个类似这样的东西
没错点击那个链接直接返回那个页面,没错没有任何模型,当然模型里面也没有任何数据。。。
9.想了想我另外一个控制器里面不是已经传了数据吗??
想了半天这是没有验证的用户,提交信息后展现的。另外从主页面点击进验证中心,里面返回的数据nothing。。。,而且加入点击去之前已经认证了,又怎么办,我要疯了。。。
10.后来我理了理(其实不是我,我的大学同学刘老板帮我理了理),当你点认证中心是假如你没有认证,那么肯定没法在college产生qualityID这个属性,于是用它作为判断条件,如果没有就是一个添加页面,如果存在就显示。
好吧其实当时我根本没写这个
后来发现点击链接进入认证中心报错的,还有这里必须new一个qualityInfo对象,不然要报空指针异常,好像是点击验证链接,那个是qualityinfo是没有的,假如这个对象没有,坑定没有qualityID这属性。
五.在自己的大起大落中这个功能终于完成了,怎么眼角挂起了泪花。哎一天一个功能都整不起,咋毕业。。。
特别鸣谢大学同学刘某
2019/4/4