天天看点

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

系列文章目录

文章目录

  • 系列文章目录
  • 前言
  • 一、添加Book&删除Book
    • 添加
    • 下面开始写dao、service、servlet层
    • 易错点,跳转
    • 添加功能 的小结与思考 —— 小白实际上手遇到的问题(上面都有答案)
    • 删除
    • 删除前的确认 —— 客户确定删除再删除
  • 总结

前言

接上一篇

一、添加Book&删除Book

添加

想一想,这个添加是直接请求servelet吗?

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

答案是,不可以直接请求servlet,为啥呢,是不是很费解,因为直接请求servlet没有数据啊,数据从哪来呢

回顾一下我们以前打的请求servlet的代码

如:图书管理

如:

发现我们这里不一样的地方了吗

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

先分析业务流程

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

分析完之后,后面就很简单了,我们可以直接写代码了

其实前面如果认真看了,并且会了,这里是大同小异的

分析完之后就开始撸代码了

因为bean(跟数据库保存一致)前面已经写好了,

下面开始写dao、service、servlet层

因为前面文章写过几遍了,虽然代码不同,但是模式是一模一样的,我们这里就不非常详细说了

dao层分为接口和实现类

接口(写抽象方法):

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

实现类(必须,实现这个抽象方法)

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

注意上面,因为 返回类型是 void 所以 方法体的最后不用返回 不用return

写完dao后测试一下

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

如果数据库中是非空的(事实上我们这里设计的也是如此)

非空的怎么办

给它一个默认值(非空)

复制这个

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

放到构造器中 这样就设置好默认值了

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

以后你在构造器中传不传值都无所谓了,

传null也是这个路径,传什么都是这个路径,写死了

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

接口没有问题了,那就开始写service了

也是两个

一个是接口:

跟dao层一样

一个是实现类:

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

接着是servlet

前端jsp先写一下

注意这里一定要加上 method=“post” 否则 如果默认是get 会覆盖掉我们提交的 上一个参数,导致无法识别我们的 addBook (方法)

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

servlet

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

跳转:还是应该跳转到book_manager页面

但是是直接跳转吗?

只能说最终是这个页面,

但是你不能直接跳过去

如果你直接跳过去就太天真了,根本没有更新的数据

易错点,跳转

解决办法:跳转之前重新查询一次

那怎么重新查询呢?

所以我们干脆再调一下之前写的查询方法就行了

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

但是在开发当中除了这种写法,我们还有另外一种写法

充电线里面加参数

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

实际上跟前面的直接调用是一回事

这三种方法都必须要会

然后测试就没有问题了

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

添加功能 的小结与思考 —— 小白实际上手遇到的问题(上面都有答案)

1、写完dao 之后还要不要写单元测试?如果要写,怎么写?很容易没有思路俗称短路

很简单,不要想得那么复杂,答案如下,明镜亦非台,本来无一物,何处惹尘埃

注意id列插null值就好

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结
javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

2、图书的路径,要怎么处理?添加图书的时候,并没有路径给你选择

3、类型转换,怎么转?

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

转换如下:

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

4、跳转之后没有刷新怎么解决?

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结
javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

尝试解决解决办法之一,不要使用转发,改为使用重定向,重定向会改变地址栏路径

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

结果失败,是刷新了,但是没有重新加载数据

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

如果设置成动态编译呢?试过也不行,那么解决办法到底是什么呢?

删除

删除是增删改查里面最简单的

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

为什么说是最简单的,想一想它需要跳转页面吗

不需要

如果我们做一个功能,特别是增删查改如果没有思路,说明基本功还不扎实,需要继续写代码来加强能力

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

怎么把ID带过去,这个可能是一个难点

怎么带?可以通过地址栏、隐藏域还可以通过什么方式呢?

不可以放隐藏域,因为隐藏域必须要有表单,表单提交才可以有效的使用隐藏域

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

后面的操作跟添加是一样的

三层逐步写完

dao层

(1)dao的接口

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结
javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

所以我们可以看出,数据库的兼容性比java(C#)更强,不用过于担心这些问题

所以我们可以在java代码里面也把id设置成字符串,有什么好处?

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

好处是我们底层就不用再做转换了

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

能兼容就不用转换了

(2)dao的实现类

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

service层

service的接口

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

service的实现类:

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

然后就到了servlet

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

至此完成添加和删除

下面开始测试,发现删除似乎少了什么,删除得太随意了,很容易勿删,对客户来说是非常不友好的

所以我们要加 删除前的确认

删除前的确认 —— 客户确定删除再删除

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

使用jquery

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

测试

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

持续优化,提示用户的时候,提示用于现在删除的是哪个,是否确定删除某某数据

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结
javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结
javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

最后测试

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

如果忘记了,可以看一下前面的文章,或者直接找jquery文档,看一下怎么写

第二种更简单的方式:

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结
javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

总结

1、

多敲几遍就会了

增删查改

会其中一个就基本会了,会其中增加和删除,后面的都可以举一反三自己完成了

2、

这里很好的把后端和前端关联了起来,比如前面学的jquery,不要以为没有用,用处有时候是很大的

3、注意中英文状态下问号也是不一样的

javaEE009.04 添加Book&删除Book、修改Book(未整合修改和添加功能)(添加之后重新调用一下查询的方法以更新数据)、数据库的兼容性比java更强、删除前的确认、、找子代后代系列文章目录前言一、添加Book&删除Book总结

继续阅读