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>
相关推荐
strongwyy20 分钟前
9、nRF52xx蓝牙学习(pca10056.h学习)
单片机·嵌入式硬件·学习
每天题库22 分钟前
2025 年江苏保安员职业资格考试经验分享
学习·安全·考试·题库·考证
viperrrrrrrrrr76 小时前
大数据学习(105)-Hbase
大数据·学习·hbase
行思理8 小时前
go语言应该如何学习
开发语言·学习·golang
oceanweave9 小时前
【k8s学习之CSI】理解 LVM 存储概念和相关操作
学习·容器·kubernetes
吴梓穆11 小时前
UE5学习笔记 FPS游戏制作43 UI材质
笔记·学习·ue5
学会870上岸华师11 小时前
c语言学习16——内存函数
c语言·开发语言·学习
XYN6111 小时前
【嵌入式面试】
笔记·python·单片机·嵌入式硬件·学习
啊哈哈哈哈哈啊哈哈11 小时前
R3打卡——tensorflow实现RNN心脏病预测
人工智能·深度学习·学习
KangkangLoveNLP12 小时前
深度探索:策略学习与神经网络在强化学习中的应用
人工智能·深度学习·神经网络·学习·机器学习·自然语言处理