目录
一、环境搭建/准备
1、前端、后端、数据库关系认识
根据目前的学习经验来看,要开发一个基础的具有增删改查的功能软件,要有前端界面的配置、后端响应处理代码的准备以及数据库的连接,前后端要指定的配备规格,才能实现前后端连接。而就JavaWeb来看,要实现的就是后端代码逻辑的实现以及数据库的操作。
上图是黑马视频中实现员工信息处理的后端代码的前置准备条件,第一、二点就不必多说,使用IDEA进行代码构建环境搭建是必备的,第三点是添加设置,比如经典的数据库连接四要素,第四点就是考虑代码层的设计,分为Mapper、Service、Controller三个部分,能清晰处理代码关系,在以后的开发过程中,都要遵循。
2、前端、后端规范开发
我们通过了解提高的成品原型设计后,就要开始着手开发,前端和后端所使用的技术都是新式的,而要实现前后端关联,在这就要提到接口文档这一事物了,而它的作用是约束前后端的协同开发、规范项目内容。
注:接口文档包含接口参数、返回类型以及服务器连接规则,是我们后端开发时必备的要点。
3、开发流程总结
二、三层架构认识
首先来介绍三层架构的含义
三层架构的含义
1、Controller: 控制层,接收前端发送的请求,对请求进行处理,并响应数据。
2、Service:业务逻辑层,处理具体的业务逻辑。
3、Dao(Data Access Object): 数据访问层(持久层),负责数据访问操作,包括数据的增、删、改、查。
注:这里的dao层就是上面说的Mapper层。
然后我们来看看黑马在介绍项目开发时所考虑的三层架构内容,它们分别是查询、单个删除、添加、分页查询、条件查询、多个删除:
下面是我以完成的部分代码,可以进行参考:
// 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();
}
}
// 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);
}
// 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 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>