网购商城项目开发日记(一)

1.经典JavaEE三层架构

原型开发:前端页面响应式设计,后端使用分层模式解耦——>经典的JavaEE三层架构图

Web层(视图层)-接收请求,调用服务,返回响应。

Service层(业务层)-对业务进行处理,调用Dao层,完成对数据库的操作。

Dao层(数据持久层)-curd,直接操作数据库。

2.需求分析与功能划分

需求分析-功能划分-具体功能的细致需求分析-实现思路分析-走代码实现-完成测试

3.功能划分(1)-用户注册与登录

大致思路分析(架子):

建库建表user表------DB(Mysql)

     ↓

对应的JavaBean类User-----Entity层

User类中提供有参无参构造器(后续反射会用到),表字段对应属性的set,get方法

     ↓

对应的BasicDAO类与UserDAO接口与UserDAOImpl实现类-----Dao层

UserDAO中需要去分析需要提供什么方法,sql语句从数据库中获取信息或者对数据库加以dml操作

     ↓

对应的UserService接口与UserServiceImpl实现类-----Service层

UserService中调用UserDAO中的方法实现具体的业务需求

     ↓

对应的UserServlet-----Web层

从前端的表单获取信息并对UserService的方法进行使用,估计业务需求进行信息返回/请求转发/重定向等等

     ↓

 前端页面,对应的表单提交数据

4.功能实现中的小收获

4.1想在登录界面放一个小的提示框,提示输入校验结果

在from之前放一个span

 

 

 然后可以在Servlet中设置好

if  xxxxx{
request.setAttribute("msg","登录信息错误xxx");}

而后根据msg在需要的地方放置span,使用EL表达式${requestScope.msg}将信息显示出来

或者

前端jsp文件中进行设置,同样需要span,给它一个class=errorMsg

之后使用jquery的选择器$("#span.errorMsg").text("xxxxxxxxxx");

或者$("span[calss="errorMsg"]").text("xxxxxxxxxx");

4.2关于Service、Dao层的Impl与接口

使用接口-实现类的开发模式,便于拓展

同样的,如果下service中要使用Dao提供的方法时,我们在service中放一个dao的接口对象指向实现类的实例

4.3 IDEA快捷键-定位方法

Ctrl+B---查看编译类方法

Ctrl+At+B---查看实现类的方法

4.4 id设置为自增长,表中id却不连贯的问题

注册测试中发现数据库id设置为自增长后,一些失败的注册(前端正则校验没有通过)过后,在进行正常注册

会发现id不是连续的了,(123579)中间的id没有进入表但是被占用了

原因:猜测是被没有提交的事务占用了,(此外回滚也有可能占用)

4.5IDEA快捷键-撤销撤销

撤销与撤销撤销

Ctrl+z与Ctrl+shift+z

4.6 java三层架构-后续进阶

Web-Service-Dao

(web——SpringMVC)(Service-Dao——Spring)

4.7接口方法找实现类

在接口方法上Alt+Enter

4.8对域对象的一次使用

4.9合并登录注册的Servlet

设施一个隐藏域

<input type="hidden" name=action value="login"或者是"register"  />

将Servlet中的doPost方法与doGet方法抽象出一个抽象类:BasicServlet,让其他Servlet继承他

反射+模板设计模式(抽象类)+动态绑定机制实现

  //使用反射,获取当前对象的某个方法,方法名就是action的value
        try {
            Method declaredMethod = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
       //使用方法对象,进行反射调用
        declaredMethod.invoke(this,request,response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

4.10 Dao层sql语句一个坑

sql语句中,表名与Where之间需要有空格,否则sql语句不被正确识别,报错!

4.11 登录失败保留用户名信息

在jsp的from表单列中使用域对象

 <input type="text" name="username" value="${requestScope.username}"

同时在对应的Servlet中设置好属性即可

 

 4.12mysql建表int(11)什么意思

int(11),11代表宽度,例如输入int是123456,那么表中存放的是00000123456这个值宽度为11

4.13 decimal定点数

用来很好的处理price的类型,decimal(5,2)表示一共5位数字,小数点后俩位,eg:123.45,456.25

4.14 javaBean中如何对应表的decimal定点数

使用Bigdecimal类即可

4.15javaBean中对应表的int应该使用对应的包装类

使用包装类:Integer,why?包装类自动装箱,可以接收null,避免不必要的报错

4.16表中字段与pojo属性名不一致怎么办?

sql语句查不到了,怎么办---sql语句中起别名,对应字段名的别名取得和pojo属性名一致既可以了

4.17输入信息控制

使用正则表达式进行test,如果 正则表达式.test(待测数据)不成功则不通过

 

posted @ 2023-01-22 00:26  ZitWang  阅读(32)  评论(0编辑  收藏  举报