
本文前面是我开发过程的记录,分为删除、修改、增加三个篇章来描述。文章的末尾是github的地址。
修改数据
在展示所有数据的页面中,点击“修改”按钮,跳转到修改数据的页面,在修改页面点击提交完成数据的修改,跳转回到展示所有数据的页面。此时发现数据已被修改。
这个项目有几个关键点。
- 当点击浏览器的“修改按钮”时,如果可以把allAccount页面展示的数据送到修改页面中对用户来说是一件很方便的事情,因为节省了用户输入修改的参数的时间。

点击修改后跳转到修改账户的页面,参数“自动带上”放到页面里

实现:在allAccount的跳转连接地址的后面加上请求参数,通过http请求头发送到controller,controller接收数据之后把数据放到model,然后转发updateAccount页面,解析updateAccount的时候把model里面的数据放到value属性里面。这样的三个步骤就可以达到allAccount的数据展示在updateAccount的效果啦。
下面是数据从allAccount到controller到updateAccout传送的过程:

allAccount页面

通过controller把数据传递给updateAccount

接着updateAccount页面通过value属性接收controller发送过来的参数
2. 在学习JDBC的时候,都需要在DML(INSERT、UPDATE、DELETE)语句操作完成后执行conn.commit(事务提交)才可以对数据库更新。但由于此项目用的是mybatis,mybatis默认自动提交,因此无需手动提交。
3. 修改的语句要记住,是这种格式的:
UPDATE demo_ssm.account
SET id = #{id}, name = #{name}, money = #{money}
where id = #{id}
总结:
- 在注解、扫描包都配置好的情况下,组件还是无法给ioc容器生成对象,那么这个时候就要考虑是不是没有配listener。
- 不要用maven将bootstrap导进来,最好用在线的形式或者是官网下载到本地的形式。
- 给Controller发送数据是通过JSP的表单输入标签的name属性。
增加数据
在这个项目中用到了bootstrap其中有一个概念叫做清除浮动,查了下百度,其中两个解释比较合理,我将其摘录了下来。
“清除”就是clear这个bai属性的中文解du释,“浮动”是float这个属性的中文解释。 清除(clear)的zhi意思可以理解为把dao这个元素指定方向的内容给移走。例如clear:both; 就是指这个元素左右两边的内容给排除开,相当于这个元素独立成一行,其它元素不管宽度大小,都不能和这个元素并排显示。如果是clear:right;就相当于这个元素右边的内容会被排除开,但是左边的不会,仍然可以在同一行显示。 浮动(float)则是控制元素在一行内的显示位置,例如float:left;就表示这个元素会显示在这一行的左边,如果是float:right则表示这个元素会显示在一行的右边。通常情况下,应用了float的元素,浏览器会认为它同时也意味着会与相邻的元素在同一行内显示,但是这个规则在IE6等浏览器里面并不会被严格执行,有时即使定义了float属性,浏览器还是默认认为这个元素是clear:both的,所以一般定义了float之后,还要定义一个display:inline;才可以实现多个元素在同一行内显示的效果。
呵呵,很简单么bai.left 和 right 是用来对其的,比如两个dudiv想要排列成一行, 就要zhi用到做浮动dao和有浮动, 至于左右 不用我解释了把?inherit是缺省值,自动继承父div.clear简单的说比如A和B同行float:left了,这时候有个C不想float:left 和AB同一行, 就可以给C来个clear:left,这样C就可以在另一行了 right同理.both是清除两者. 嗯...也许clear这个不能举例说,还是说实际的布局吧. 在我们写div的时候要经常用到float那么没有加float属性的div很容易受到已经加了float样式的div影响 而导致我们常说的窜位,那么这个时候我们就要用到clear来清除浮动的影响,来让这个div显示在我们想要的位置上.不知LZ懂了没有
清除浮动有四种方法
- 添加以clear命名的class
- 在父容器里添加overflow:hidden的样式
- 在父容器里添加overflow:auto的样式
- 添加以伪元素after(clearfix)命名的class
其中我对2、3点理解得比比较深。可以想象一下,有一杯装满的水,然后有一个固体要放入水中,水自然就会溢出来。如果我们不想让水溢出来,那只能将杯子加大。overflow:hidden/auto的意义正在于此。一个具有浮动属性的元素就像漂浮在盛满水中的杯子中的固体,假如没有设置overflow:hidden/auto,那么当固体放进去的时候,水只会溢出,容器体积该有多大还是有多大。但如果设置了overflow:hidden/auto,那么水就不会溢出,而是将容器撑大。
遇到不会的内容:
在Dao层的Mapper接口里面,我很纠结用@Repository还是@Mapper,于是查了一下他们之间的区别
@Repository需要在Spring中配置扫描地址,然后生成Dao层的Bean才能被注入到Service层中。
@Mapper不需要配置扫描地址,通过xml里面的namespace里面的接口地址,生成了Bean后注入到Service层中。
@Repository无法注入到Service层,结果发现是忘了配置ContextLoaderListener!!
配置了ContextLoaderListener才能加载到applicationContext.xml

最终结果:

项目中给数据库增加一条数据的要领是通过JSP给Controller发送数据,然后Controller再调用service,service再调用dao来完成插入。
那么关键点就是JSP给Controller发送数据的过程。首先Controller要有一个pojo类型的参数用于接收JSP发送过来的对象,然后JSP的表单的<input>标签里面要有name属性,JSP给Controller发送数据是通过name属性封装到对象里面去的。所以name属性必须和Controller的pojo对象的参数一一对应上。这样一个发送一个接收相等了,才能完美对接发送。
总结:
- 在注解、扫描包都配置好的情况下,组件还是无法给ioc容器生成对象,那么这个时候就要考虑是不是没有配listener。
- 不要用maven将bootstrap导进来,最好用在线的形式或者是官网下载到本地的形式。
- 给Controller发送数据是通过JSP的表单输入标签的name属性。
删除数据
点击查询页面的“删除”按钮,发现该删除按钮所在记录被删除。
实现流程:点击删除按钮,请求controller,controller调用service层,service层调用dao完成删除,最后返回查询页面再次查询,此时记录就不存在啦。
总结:
- 删除比较简单,用的都是修改、增加部分的知识。
Github地址:
zjjackyyue/SSM-01-SimpleSSMgithub.com