拉勾教育第五阶段Maven项目后台开发

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


Java API
Java Object
Java 异常,IO流,多线程,网络编程,反射机制
Java新特性和项目
java 数据库

一、前后端分离架构介绍

前后端分离已成为互联网项目开发的业界标准使用方式,将前端和后端的开发进行解耦。并且前后端分离会为以后的大型分布式架构、微服务架构、多端化服务(各种客户端,比如浏览器、车载终端、安卓、IOS等)打下坚实的基础。
前后端分离的核心思想就是前端HTML页面通过AJAX调用后端的API接口,并通过JSON数据进行交互。

二、技术选型

在这里插入图片描述

在这里插入图片描述

三、注意事项

3.1 数据库

1对多的关系时,在1那一方可建立list集合

//course_section章节 和 course_lesson课时 是一对多关系
 //添加一个list集合 泛型course_lesson
  List<Course_Lesson> LessonList = new ArrayList<>();

在实现数据处理时就可以进行封装

 //4.根据章节ID查询课时信息
            for (Course_Section section : sectionList) {

                //调用方法 获取章节对应的课时
                List<Course_Lesson> lessonList = findLessonBySectionId(section.getId());

                //将课时数据封装到 章节对象中
                section.setLessonList(lessonList);
            }

编写sql语句

编写SQL减少使用连接 JOIN,提高可维护性
编写SQL 当前的查询为多条件不定项查询
创建StringBuffer 对象,将SQL字符串 添加进缓冲区
1=1 查询条件不固定时 可用

  StringBuffer sb = new StringBuffer
  ("SELECT id,course_name,price,sort_num,STATUS FROM course WHERE 1=1 and is_del = ? ")
 //-----------------------------------------------------
            //2.3 判断传入的参数是否为空
            if(courseName != null && courseName != ""){
                sb.append(" AND course_name LIKE ?");
                //like查询 需要拼接 %
                courseName = "%"+courseName+"%";
                //将条件放进list集合
                list.add(courseName);
            }

            if(status != null && status != ""){
                sb.append("AND STATUS = ?");
                //将status 转换为 int
                int i = Integer.parseInt(status);
                list.add(i);
            }

3.2 Service层

根据需求文档,接口文档决定返回类型

		//1.补全章节信息
        section.setStatus(2);//状态 0 隐藏,1 待更新,2 已发布
        String date = DateUtils.getDateFormart();
        section.setCreate_time(date);
        section.setUpdate_time(date);

        //2.调用dao
        int row = contentDao.saveSection(section);

        //3.根据是否插入成功,封装对应信息
        if(row > 0){
            //保存成功
            String result = StatusCode.SUCCESS.toString();
            return result;
        }else{
            String result = StatusCode.FAIL.toString();
            return result;
        }

3.3 Servlet层

Servlet太多了,不好管理, 而且Servlet越多 服务器运行就越慢,资源消耗就越多.
建立通用的servlet, 根据请求功能的不同,调用对应的方法。根据接口文档规定的传递参数
然后功能servlet可以继承通用的servlet
在通用servlet里完成如参数的接收,JSON格式转换等

3.4 文件上传

文件上传三要素:
    1.表单提交方式必须是 post
    2.表单的enctype属性必须是 multipart/from-data
    3.表单中必须有文件上传项

根据前端得到的文件进行解析

			//1.创建磁盘文件工厂对象
            DiskFileItemFactory factory = new DiskFileItemFactory();
            //2.创建文件上传核心类
            ServletFileUpload upload = new ServletFileUpload(factory);
            //2.1设置上传文件的编码
            upload.setHeaderEncoding("utf-8");
            //2.2判断表单是否 文件上传表单
            boolean multipartContent = upload.isMultipartContent(req);

FileItem item
判断是普通的表单项,还是文件上传项:boolean formField = item.isFormField();
true 就是普通表单项,item.getFieldName(); 获取文件名
文件上传 item.getName(); 获取文件名
最后就是输入输出流对文件的复制保存

3.5 代码的维护性

简单来说就是每个功能实现独立的作用

if-else,反射优化

 if("addCourse".equals(methodName)){
            addCourse(req,resp);
        }else if("findByName".equals(methodName)){
            findByName(req,resp);
        }else if("findByStatus".equals(methodName)){
            findByStatus(req,resp);
        }else {
            System.out.println("请求功能不存在");
        }

上面的代码就是后判断接收参数的名字,再实现每个功能
下面的代码时利用反射优化上面的代码

 //2.判断 执行对应的方法
        if(methodName != null){
            //通过反射优化代码 提升代码的可维护性

            try {
                //1.获取字节码文件对象
                Class c = this.getClass();

                //2.根据传入的方法名,获取对应的方法对象  findByName
                Method method = c.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);

                //3.调用method对象的 invoke方法,执行对应的功能
                method.invoke(this,req,resp);

            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("请求的功能不存在!!");
            }
        }

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值