快速复制当前代码到下一行: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未找到。)
第三个功能:实现商品类型的展现 和 删除。(在每一个类型后边加一个删除)
第一个问题:我发现,我好像不知道,怎么删除商品。(主要商品的删除,应该怎么把数据提交给控制器,然后由控制器进行删除)
删除商品的 sql语句我知道写:delete from goodstype where id = #{id}
但是,这个id,应该怎么从view层获取过来。
解决:通过JavasScript 函数 提交id给控制器。
然后在下面编写: 通过使用函数的方法,提交id数据。
在控制器有两种方式 可以获取到这个数据:
第一种,通过Integer 获取。(第一次浏览器输入/delete界面,此时没有点击删除,ID为null。)
第二种,通过 POJO 使用 goodsTypeDao方法使用Mapper.xml文件的SQL映射文件。使用这个方法之后,goodsType的存放的数据就发生改变了。
这里需要注意一下,就是,只通过第二种方式,删除数据可以吗?
答案是当然不行:
因为我们在SQL映射语句是 通过where id = {#id} .
也就是,在Dao层,使用的是delet(Integer id) 的方式 进行删除数据。所以必须需要第一种方式获取传输过来的id .
比较:前面我们使用查询语句 ,插入语句 。它们的类型是POJO类型。
查询、插入的方式:它们是通过表单的形式和POJO的类型进行绑定的,所以只要提交action按钮。就会改变POJO的类型。这和我们使用删除的方式有点不一样。
这里我们点击删除的方式 是传入一个id的数据。然后传给Service层。
总结:写到这个例子,我才差不多理解,在这些代码层里面,数据是如何进行数据的传输的。
例如:删除,是通过传递id编号。使用service层的映射。
查询、添加 是通过 和POJO的绑定,当点击按钮,就改变POJO的数据,在传递给Service层,使用dao层的映射。
第二个问题:点击删除按钮,页面没有变化,但是数据库显示,数据已被删除。
总结:从《JavaEE 框架整合开发入门到实战》这本书开始学习。
到现在学习到第20章,最后一个电子商务平台的设计与实现。沿途碰见了许多困难,直到现在,或许我应该 转换思路学习了。这本书,不是很好。因为最后一个项目,在我看来,很多地方都没有解释清楚,比如,它们的数据是怎么传递的,以及怎么突然,一个界面就获得了另外一个数据。而且缺少很多数据和属性。
我只搞明白了,对应view层获得或者传入数据,都是通过一个model属性进行传递的。还有很多地方,我并没有搞明白。比如,在实现第三个功能,进行上传图片的操作的时候,我就碰到了困难。看书上的例子,我真的觉得有点莫名其妙。
最后只能实现一个简单的添加商品类,但是做不了上传这个界面。所以此书到此为止了。
当然,此书给我的收获还是很大的,我至少学会了SSM项目的基本搭建,以及学会使用IDEA这个应用。