ssm插入数据时候栈溢出_SSM简单增删查改,代码放在github,有需要可拿走

3e54ddecdd60cf0cfe7c11a0e6504984.png

本文前面是我开发过程的记录,分为删除、修改、增加三个篇章来描述。文章的末尾是github的地址。

修改数据

在展示所有数据的页面中,点击“修改”按钮,跳转到修改数据的页面,在修改页面点击提交完成数据的修改,跳转回到展示所有数据的页面。此时发现数据已被修改。

这个项目有几个关键点。

  1. 当点击浏览器的“修改按钮”时,如果可以把allAccount页面展示的数据送到修改页面中对用户来说是一件很方便的事情,因为节省了用户输入修改的参数的时间。

295881dca680e0c9f3bb3488b264fc03.png


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

ae98b0fce57d57c5dd4d414500a016f2.png


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

dd334187a92ae31b6d7a9c07cf22f8b7.png

allAccount页面

9cef7f4e887fce3726b4a8672a8224e3.png

通过controller把数据传递给updateAccount

5259308e850d856d6d5911f298657b7c.png

接着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}

总结:

  1. 在注解、扫描包都配置好的情况下,组件还是无法给ioc容器生成对象,那么这个时候就要考虑是不是没有配listener。
  2. 不要用maven将bootstrap导进来,最好用在线的形式或者是官网下载到本地的形式。
  3. 给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懂了没有

清除浮动有四种方法

  1. 添加以clear命名的class
  2. 在父容器里添加overflow:hidden的样式
  3. 在父容器里添加overflow:auto的样式
  4. 添加以伪元素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

fbda0ac9d25f738b4e2e8a16932d84ef.png

最终结果:

e3ea18f88f161239b0559805cf6c4b21.png

项目中给数据库增加一条数据的要领是通过JSP给Controller发送数据,然后Controller再调用service,service再调用dao来完成插入。

那么关键点就是JSP给Controller发送数据的过程。首先Controller要有一个pojo类型的参数用于接收JSP发送过来的对象,然后JSP的表单的<input>标签里面要有name属性,JSP给Controller发送数据是通过name属性封装到对象里面去的。所以name属性必须和Controller的pojo对象的参数一一对应上。这样一个发送一个接收相等了,才能完美对接发送。

总结:

  1. 在注解、扫描包都配置好的情况下,组件还是无法给ioc容器生成对象,那么这个时候就要考虑是不是没有配listener。
  2. 不要用maven将bootstrap导进来,最好用在线的形式或者是官网下载到本地的形式。
  3. 给Controller发送数据是通过JSP的表单输入标签的name属性。

删除数据

点击查询页面的“删除”按钮,发现该删除按钮所在记录被删除。

实现流程:点击删除按钮,请求controller,controller调用service层,service层调用dao完成删除,最后返回查询页面再次查询,此时记录就不存在啦。

总结:

  1. 删除比较简单,用的都是修改、增加部分的知识。

Github地址:

zjjackyyue/SSM-01-SimpleSSM​github.com
52968189d37ea67042d1250beb733ab9.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值