day01 查增删改功能的实现
环境准备
1.创建spring boot项目,引入4依赖
(lombook、web、springWeb、MyBatisFramework、MySQL Driver)
2.三层架构+实体类
controller、service(serviceImpl实现类和service接口)、mapper、pojo(dept部门类和Result规范类)
3.配置数据库链接
需要注意记住三个点
/**
* 后端统一返回结果
*/
@Data
public class Result {
private Integer code; //编码:1成功,0为失败
private String msg; //错误信息
private Object data; //数据
public static Result success() {
Result result = new Result();
result.code = 1;
result.msg = "success";
return result;
}
public static Result success(Object object) {
Result result = new Result();
result.data = object;
result.code = 1;
result.msg = "success";
return result;
}
public static Result error(String msg) {
Result result = new Result();
result.msg = msg;
result.code = 0;
return result;
}
/**
* 这段代码通过封装返回结果,提供了一种统一的方式来处理后端与前端之间的数据交互,使得代码更加简洁和易于维护。
* 使用静态方法可以方便地创建不同状态的返回结果对象。
*/
}
application.yml数据库配置文件(!!!不要写错)
# 应用服务 WEB 访问端口
server:
port: 8080
#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis:
mapper-locations: classpath:mappers/*xml
type-aliases-package: com.itheima.mybatis.entity #指定Mybatis的实体目录
#mybatis
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#开启驼峰命名映射开关
map-underscore-to-camel-case: true
# 配置数据库的链接信息
spring:
datasource:
url: jdbc:mysql://localhost:3306/tlias
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 1234
记得获取对象
//获取业务层对象
@Autowired //从ioc 容器中找DeptService类型的bean对象
private DeptService deptService;
功能1:查询所有部门数据
controller层
/**
* 处理请求:
* @return depts
*/
@GetMapping
public Result selectDept() {
//后端接到前端请求查询所有的部门,后端返回给前端的是装有部门对象的集合 List<Dept>
//控制层向业务层要返回的对象集合 List<Dept>,然后把对象集合返回给前端
List<Dept> depts = deptService.selectDept();
/**
* 返回的是一个Result类型的对象(设置Result实体类的目的: 就是要规范接口文档中统一的返回格式,方便管理)
*
* 当前类中存在一个注解@RestController
* @RestController 注解中包含了@Controller和@ResponseBody
* @ResponseBody作用: 将返回的对象或者集合自动转为json数据
*/
return Result.success(depts);
}
//service层
接口
/**
* 业务: 查询所有数据
* @return 返回List<Dept>对象集合
*/
List<Dept> selectDept();
接口实现类
/**
* 业务: 查询所有数据
*
* @return 返回List<Dept>对象集合
*/
@Override
public List<Dept> selectDept() {
//业务层向持久层要返回的对象集合 List<Dept>,然后把对象集合返回给控制层
List<Dept> depts = deptMapper.selectDept();
return depts;
}
//mapper层
/**
* @Mapper 是 MyBatis 框架中用于标记接口为 MyBatis 映射器的标签
* 使 Spring 能自动扫描并将该接口注册为 Bean,以便使用其定义的方法进行数据库操作。
*/
@Mapper
public interface DeptMapper {
/**
* 通过sql语句查询所有部门
* @return List<Dept>部门集合
*/
@Select("select * from dept")
List<Dept> selectDept();
功能2:根据id删除对应部门的数据
controller层
/**
* 删除部门数据请求
* @param id
* @return
*/
@DeleteMapping //除了查询有,增删改都没有返回值,返回执行成功的Success信息即可
public Result deleteDept(Integer id) { //根据id删除对应数据,需要有参数id
deptService.deleteDept(id);
return Result.success();
}
//service层
接口
/**
* 业务: 根据id删除对应的数据
* @param id
*/
void deleteDept(Integer id);
接口实现类
/**
* 业务: 根据id删除对应的数据
* @param id
*/
@Override
public void deleteDept(Integer id) {
deptMapper.deleteDept(id);
}
//mapper层
/**
* 通过sql语句根据id删除对应部门
* @Delete("") 删除注解,
* 注意:
* 1. !!! 字段 = #{成员变量}
* 2.!!! @Param("")
* 需要向 SQL 映射语句传递多个参数时容易出错,
* @Param 注解可以为每个参数指定一个有意义的名称,使 SQL 映射文件中的参数引用更加清晰。
*/
@Delete("delete from dept where id = #{id}")
void deleteDept(@Param("id") Integer id);
功能3:增加部门数据
controller层
/**
* 新增部门数据
* @param dept
*/
@PostMapping //@RestController不是已经包含了@RequestBody吗?为什么加
public Result insertDept(@RequestBody Dept dept) {
deptService.insertDept(dept);
return Result.success();
}
//service层
接口
/**
* 业务: 新增部门数据
* @param dept
*/
void insertDept(Dept dept);
接口实现类
/**
* 业务: 新增部门数据
* @param dept
*/
@Override
public void insertDept(Dept dept) {
//给对象补全属性 为什么给对象补全?只有名字吗
dept.setCreateTime(LocalDateTime.now());
dept.setUpdateTime(LocalDateTime.now());
deptMapper.insertDept(dept);
}
//mapper层
/**
* 通过sql语句新增部门
* @param dept
*/
@Insert("insert into dept (name,create_time,update_time) value(#{name},#{createTime},#{updateTime})")
void insertDept(Dept dept);
功能4:根据id回显部门,并修改对应的部门
controller层
/**
* 根据id查询部门
* 数据回显请求
* @return dept
*/
//再看一遍@PathVariable 注解用于将 URL 中的路径变量绑定到控制器方法的参数上,方便从请求 URL 里提取动态数 @GetMapping("/{id}") 据以进行后续处理。
public Result selectDeptById(@PathVariable Integer id) {
Dept dept = deptService.selectDeptById(id);
return Result.success(dept);
}
/**
* 修改数据
* @param dept
* @return
*/
@PutMapping
public Result updateDept(@RequestBody Dept dept) {
deptService.updateDept(dept);
return Result.success();
}
//service层
接口
/**
* 业务: 根据id查询部门(数据回显)业务
* @param id
* @return
*/
Dept selectDeptById(Integer id);
/**
* 业务: 根据修改部门业务
* @param dept
*/
void updateDept(Dept dept);
接口实现类
/**
* 业务: 根据id查询部门(数据回显)业务
* @param id
* @return
*/
@Override
public Dept selectDeptById(Integer id) {
Dept dept = deptMapper.selectDeptById(id);
return dept;
}
/**
* 业务: 根据修改部门业务
* @param dept
*/
@Override
public void updateDept(Dept dept) {
//给对象补全属性
dept.setUpdateTime(LocalDateTime.now());
deptMapper.updateDept(dept);
}
//mapper层
/**
* 通过sql语句根据ID查询部门回显和修改部门
* @param id
* @return
*/
@Select("select * from dept where id = #{id}")
Dept selectDeptById(@Param("id") Integer id);
@Update("update dept set name = #{name},update_time = #{updateTime} where id = #{id}")
void updateDept(Dept dept);
推荐阅读:
文章有(0)条网友点评