JavaWeb学习——黑马视频练习总结

目录

一、环境搭建/准备

1、前端、后端、数据库关系认识

2、前端、后端规范开发

3、开发流程总结

二、三层架构认识


一、环境搭建/准备

1、前端、后端、数据库关系认识

根据目前的学习经验来看,要开发一个基础的具有增删改查的功能软件,要有前端界面的配置、后端响应处理代码的准备以及数据库的连接,前后端要指定的配备规格,才能实现前后端连接。而就JavaWeb来看,要实现的就是后端代码逻辑的实现以及数据库的操作。

上图是黑马视频中实现员工信息处理的后端代码的前置准备条件,第一、二点就不必多说,使用IDEA进行代码构建环境搭建是必备的,第三点是添加设置,比如经典的数据库连接四要素,第四点就是考虑代码层的设计,分为Mapper、Service、Controller三个部分,能清晰处理代码关系,在以后的开发过程中,都要遵循。

2、前端、后端规范开发

我们通过了解提高的成品原型设计后,就要开始着手开发,前端和后端所使用的技术都是新式的,而要实现前后端关联,在这就要提到接口文档这一事物了,而它的作用是约束前后端的协同开发、规范项目内容。

注:接口文档包含接口参数、返回类型以及服务器连接规则,是我们后端开发时必备的要点。

3、开发流程总结

二、三层架构认识

首先来介绍三层架构的含义

三层架构的含义

1、Controller: 控制层,接收前端发送的请求,对请求进行处理,并响应数据。

2、Service:业务逻辑层,处理具体的业务逻辑。

3、Dao(Data Access Object): 数据访问层(持久层),负责数据访问操作,包括数据的增、删、改、查。

注:这里的dao层就是上面说的Mapper层。

然后我们来看看黑马在介绍项目开发时所考虑的三层架构内容,它们分别是查询、单个删除、添加、分页查询、条件查询、多个删除:

下面是我以完成的部分代码,可以进行参考:

java 复制代码
// Controller层
package com.sunny.controller;

import com.sunny.pojo.Dept;
import com.sunny.pojo.Result;
import com.sunny.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RestController
@RequestMapping("/depts")
public class DeptController {
    //显示日志
//    private static Log logger= LogFactory.getLog(DeptController.class);

    //@RequestMapping(value = "/depts",method = RequestMethod.GET)//指定请求方式为GET

    @Autowired
    private DeptService deptService;

    @GetMapping//简化GET指定
    public Result list(){
        //显示接收日志
        log.info("查询全部部门数据");

        //调用Service查询部门数据
        List<Dept> deptList=deptService.list();

        return Result.success(deptList);
    }

    //删除部门
    @DeleteMapping("{id}")
    public Result delete(@PathVariable Integer id){
        log.info("删除部门的id为:{}",id);
        deptService.delete(id);
        return Result.success();
    }

    @PostMapping
    public Result add(@RequestBody Dept dept){
        log.info("新增部门:{}",dept);
        deptService.add(dept);
        return Result.success();
    }
}

package com.sunny.controller;

import com.sunny.pojo.PageBean;
import com.sunny.pojo.Result;
import com.sunny.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;

@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {

    @Autowired
    private EmpService empService;

    @GetMapping
    public Result page(@RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer pageSize,
                       String name, Short gender,
                       @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                       @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){
        log.info("分页查询,参数:{},{},{},{},{},{}",page,pageSize,name,gender,begin,end);
        PageBean pageBean=empService.page(page,pageSize,name,gender,begin,end);
        return Result.success(pageBean);
    }

    @DeleteMapping("/{ids}")
    public Result delete(@PathVariable List<Integer> ids){
        log.info("批量删除,ids:{}",ids);
        empService.delete(ids);
        return Result.success();
    }
}
java 复制代码
// Mapper层
package com.sunny.mapper;

import com.sunny.pojo.Dept;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 部门管理
 */
@Mapper
public interface DeptMapper {
    /**
     * 查询全部部门数据
     * @return
     */
    @Select("select * from dept")
    List<Dept> list();

    @Delete("delete from dept where id=#{id}")
    void deleteById(Integer id);

    @Insert("insert into dept (name, create_time, update_time) values (#{name},#{createTime},#{updateTime})")
    void insert(Dept dept);
}


package com.sunny.mapper;

import com.sunny.pojo.Emp;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDate;
import java.util.List;

/**
 * 员工管理
 */
@Mapper
public interface EmpMapper {

//    @Select("select count(*) from emp")//查询总记录数
//    public Long count();
//
//    //分页查询,获取列表数据
//    @Select("select * from emp limit #{start},#{pageSize}")
//    public List<Emp> page(Integer start,Integer pageSize);

    //使用pagehelper来进行分页查询
    //@Select("select * from emp")

    public List<Emp> list(String name, Short gender, LocalDate begin,LocalDate end);

    void delete(List<Integer> ids);
}
java 复制代码
// Service层
package com.sunny.service.impl;

import com.sunny.mapper.DeptMapper;
import com.sunny.pojo.Dept;
import com.sunny.service.DeptService;
import org.apache.ibatis.annotations.Insert;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Service
public class DeptServiceImpl implements DeptService {

    @Autowired
    private DeptMapper deptMapper;

    @Override
    public List<Dept> list() {
        return deptMapper.list();
    }

    @Override
    public void delete(Integer id) {
        deptMapper.deleteById(id);
    }

    @Override
    public void add(Dept dept) {
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());

        deptMapper.insert(dept);
    }
}



package com.sunny.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.sunny.mapper.EmpMapper;
import com.sunny.pojo.Emp;
import com.sunny.pojo.PageBean;
import com.sunny.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.util.List;

@Service
public class EmpServiceImpl implements EmpService {

    @Autowired
    private EmpMapper empMapper;

//    @Override
//    public PageBean page(Integer page, Integer pageSize) {
//        Long count=empMapper.count();
//
//        Integer start=(page-1)*pageSize;
//        List<Emp> empList=empMapper.page(start,pageSize);
//
//        PageBean pageBean=new PageBean(count,empList);
//        return pageBean;
//    }

    @Override
    public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {

        PageHelper.startPage(page,pageSize);

        List<Emp> empList=empMapper.list(name, gender, begin, end);
        Page<Emp> p=(Page<Emp>) empList;

        PageBean pageBean=new PageBean(p.getTotal(),p.getResult());
        return pageBean;
    }

    @Override
    public void delete(List<Integer> ids) {
        empMapper.delete(ids);
    }
}



package com.sunny.service;

import com.sunny.pojo.Dept;

import java.util.List;

public interface DeptService {
    /**
     * 查询全部部门数据
     * @return
     */
    List<Dept> list();

    void delete(Integer id);

    void add(Dept dept);
}

package com.sunny.service;

import com.sunny.pojo.PageBean;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDate;
import java.util.List;

public interface EmpService {
    PageBean page(Integer page, Integer pageSize,String name, Short gender, LocalDate begin, LocalDate end);

    void delete(List<Integer> ids);
}
XML 复制代码
// XML使用
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sunny.mapper.EmpMapper">

    <delete id="delete">
        delete
        from emp
        where id in
        <foreach collection="ids" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>
    </delete>

    <!--条件查询-->
    <select id="list" resultType="com.sunny.pojo.Emp">
        select *
        from emp
        <where>
            <if test=" name!=null and name!='' ">
                name like concat('%',#{name},'%')
            </if>
            <if test="gender!=null">
                and gender=#{gender}
            </if>
            <if test="begin!=null and end!=null">
                and entrydate between #{begin} and #{end}
            </if>
        </where>
        order by update_time desc
    </select>

</mapper>
相关推荐
知识分享小能手6 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
茯苓gao9 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾9 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT10 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa10 小时前
HTML和CSS学习
前端·css·学习·html
看海天一色听风起雨落11 小时前
Python学习之装饰器
开发语言·python·学习
speop12 小时前
llm的一点学习笔记
笔记·学习
非凡ghost12 小时前
FxSound:提升音频体验,让音乐更动听
前端·学习·音视频·生活·软件需求
ue星空12 小时前
月2期学习笔记
学习·游戏·ue5
萧邀人12 小时前
第二课、熟悉Cocos Creator 编辑器界面
学习