快速复制当前代码到下一行:ctrl+D
格式化代码(快速整理代码):ctril+alt+L
一步一步来,后续会不停添加功能。
先创建项目结构:搭建框架
(36条消息) SSM框架模板(高配:一次性配完所有需要的配置文件)_one day321的博客-CSDN博客
登录与注册 功能实现 的问题:
登录很简单,这里就不详述了。可以参考上一个博客的内容,里面有关登录的介绍。
主要看注册的问题:
第一个问题:没有进行 判断数据是否为空,就插入数据到数据库里面了,这个时候插入的数据都是null。
原因:通过logger.ingo("user") 。我们可以发现。原来我们的判断语句是:
if(user ==null) 。但是日志输出的user 是一个 po.user类型,里面各个数据存放的是null。但不是user为null。
修改: 改为user.getAccount() ==null
第二个问题:插入了三次
在插入语句里面,插入了三次。是因为,这个里面,使用了三次插入 (userDao.register(user)尽管 )
修改:将userDao.register语句只保存一个就可以了。
第三个问题:从表单提交给Controller的数据。需要有model的属性指定。
在浏览器输入/register 的时候,它的modelAttribute是user。表示,它提交的表单,其中会有一个user的model属性。所以这里要像下面一样修改。
第四个问题:从service层提交给view层的数据。也需要有相应的model属性指定
像下面,service层返回给login.jsp。然后login.jsp存在modelAttribute("login")。所以这里必须也要指定login的model属性。
第三个和第四个问题,分别是 从两个方向提交数据,如果缺少上述属性的指定,就会造成,浏览器500,并提示,找不到bean标签。
第五个问题:是有关数据库的属性指定。
比如,这里指定id 不能为空,所以。在Mapper.xml文件里面,需要首先对sql语句里面的id进行赋值,否则,就会报错。
比如这里,就必须先进行赋值null。
第二个功能:实现 商品类型的展现 和商品类型的添加。
第一个问题:404
商品类型和商品类型的添加都属于一个商品类型的表。 然后我在做的时候,把SQL语句放在了UserMapper.xml文件里面(UserMapper.xml 文件的映射是dao.userDao。)不符合我们属于商品类型的表。
修改:需要创建一个商品类型的Mapper.xml。需要创建 一个POJO类型的商品类型。在mybatis-config.xml文件里面添加 对商品类型的映射。
修改完后,就不会出现404的问题了。
第二个问题:代码层不建议多写。一个表对应一类代码层。比如:这次的商品类型。那么就写GoodsType。(dao层就是TypeGoodsDao、service层就是TypeService、controller层就是TypeController)
关于代码层,我一开始的作法是分了两个模块,一个添加,一个展示。但是书上要求是在同一个页面展示,最后越做越乱。直到我把代码层的代码全部删除,重新放在一个模块来思考,问题得到解决。
第三个问题:我想知道,数据是如何在这个里面进行传输和储存的。
小结自己的感悟:
1.Controller层 的方法参数要和 Service层 一一对应。
2.像SQL语句这些。若没有从view层传送数据过来,那么controller层的POJO类型始终为空,当然Service层也始终为空。例如:查询所有语句。没有view层传递数据。只需要在view层使用dao层的方法就能获取到数据。但POJO数据始终为空。
3.从view层传递数据过来了(view层数据绑定POJO的属性),那么POJO始终 有这么一条数据。也仅有这一条数据。
4.有一点需要重视,像多个功能放在同一个页面下,那么view层就会存在多个model属性。那么对应功能的方法也会有对应几个的model.add属性。
(并不是对应一个功能,那么在一个方法里面就只写一个model属性。因为最终返回的界面有多个model属性,那么尽管是一个功能的方法,它也要写上所有 和返回界面 里面有的所有model.add属性。否则,只写一个model属性,它最后返回到界面里面会因为发现不了其它model属性而导致报错。并提示,此bean未找到。)