如何使用使用三层Mapper、Service、Controller对数据库进行增删改操作

首先了解一下,什么是DAO三层架构:

在Java架构中,通常采用MVC模型,其结构主要包括DAO(Mapper)、Service和Controller三层。

  1. Mapper(DAO)层:这是数据访问层,主要负责与数据库进行交互。具体来说,对某个表的增删改查等底层数据操作都在这一层实现。每个DAO通常与数据库的一张表对应,封装了针对该表的基本操作如增删改查等。为了保持结构清晰,建议DAO只做原子操作。在这一层,首先设计接口,然后在Spring配置文件中定义接口的实现类。这样,在模块中调用接口时,就不需要关心具体的实现类是哪个。

  2. Service层:这是服务层,用于处理业务逻辑。Service层会调用Mapper层的接口来执行具体的数据库操作。此外,Service层还负责处理一些与业务相关的任务,例如校验、计算和转换等。Service层的结构也包括接口文件和接口实现类文件两部分,接口文件中定义了在Controller层中需要调用的方法;接口实现类文件中则完成这些方法的具体实现。

  3. Controller层:这是控制器层,主要负责处理用户请求和响应。Controller层接收前端的请求,然后调用Service层的方法来处理业务逻辑。处理完成后,Controller层会返回一个视图给客户端,展示相应的数据。

数据库样式如下: 

 创建实体类对象:

/**
 * 部门实体类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept {
    private Integer id; //ID
    private String name; //部门名称
    private LocalDateTime createTime; //创建时间
    private LocalDateTime updateTime; //修改时间
}

 下面代码是为了,让控制统一的输出格式:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private Integer code;// 响应码: 1代表成功  0 代表失败
    private String mes; // 响应信息 描述字符串
    private Object date; // 返回的数据

    public static Result success(){
        return new Result(1, "success", null);
    }

    public static Result success(Object date){
        return new Result(1, "success", date);
    }

    public static Result error(String msg){
        return new Result(0, msg, null);
    }
}

 网络请求成功后,会返回一下代码,示例右图:

首先定义启动类Controller:

/**
 * 部门管理Controller
 */
@RequestMapping("/depts")
@Slf4j
@RestController
public class DeptController {

    @Autowired
    private DeptService deptService;

    @GetMapping()

    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);
        //调用service删除部门
        deptService.delete(id);
        return Result.success();
    }

    /**
     * 添加部门信息
     */
    @PostMapping()
    public Result add(@RequestBody Dept dept){
        log.info("添加部门:{}", dept);
        //调用service添加部门信息
        deptService.add(dept);
        return Result.success();
    }

    /**
     * 修改部门数据
     */
    @PutMapping()
    public Result update(@RequestBody Dept dept){
        log.info("修改部门名:{}", dept);
        //调用service修改部门信息
        deptService.update(dept);
        return Result.success();
    }
}

Service服务层接口:

public interface DeptService {
    //查询所有部门的数据
    List<Dept> list();

    //根据id删除部门信息
    void delete(Integer id);

    //添加部门信息
    void add(Dept dept);

    //修改部门信息
    void update(Dept dept);
}

 实现Service服务层接口:

@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.setUpdateTime(LocalDateTime.now());
        dept.setCreateTime(LocalDateTime.now());
        deptMapper.insert(dept);
    }

    @Override
    public void update(Dept dept) {
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.updateById(dept.getId(), dept.getName());
    }
}

定义Mapper,数据库的具体操作:

@Mapper
public interface DeptMapper {
    /**
     * 查询所有部门的数据
     */
    @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);

    //修改部门信息
    @Update("update dept set name = #{name} where id = #{id}")
    void updateById(Integer id ,String name);
}

配置文件连接数据库:


spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
spring.datasource.username=root
spring.datasource.password=xxxx
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis.configuration.map-underscore-to-camel-case=true

完成以上操作,便可以对数据库进行简单的增删改查操作了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值