11、springboot整合spring-data-jpa案例:写业务层、持久层、表现层(控制器)

目录

用户的业务层接口

用户的业务层实现类

用户的持久层接口

用户的控制器(表现层)


用户的业务层接口

Service层的作用

用途:Service层主要负责业务模块的逻辑应用设计

1.封装的具体业务实现方法,来提高业务复用性

2.负责将参与本次业务实现的Dao层中事务进行管理

package com.example.demo.service;

import com.example.demo.bean.User;
import java.util.List;

/**
 * 用户的业务层接口
 * @author yyh
 */
public interface IUserService {

    /**
     * 查询所有用户
     * @return
     */
    List<User> findAllUser();

}

用户的业务层实现类

业务实现:具体要调用到已经定义的DAO接口,封装Service层的业务逻辑有利于业务逻辑的独立性和重复利用性,程序显得简洁。

不过其实有一个很有疑问的点就是Service层是不是可有可无,其实作为我个人观点来说的话,小型项目,业务逻辑不复杂的情况下,不用Service层其实并没有什么关系,毕竟Dao层实现了和数据库的交互,Controller层则实现了与前端的交互,这样已经基本打通了前后端,但是遇到大型项目的前提下,还是需要Service层去进行逻辑处理的,确实是需要分情况而言。再退一步想,毕竟这是N多前辈一直延用至今的模式,如果真的没必要存在,那么早就被淘汰了。但是就我个人对Service层的理解:我觉得Service层最大的作用在于规范了代码的开发,实现了业务层与持久层的隔离开发,controller、service、dao每一层都应该有它的边界,来达到解耦的目的,方便代码的复用和扩展。不过我觉得,随着我工作经验和项目经验的累积,我对于MVC的架构分层,以后应该会有进一步的提升,到时候我会继续更文谈谈更深层次的理解。

package com.example.demo.service.impl;

import com.example.demo.bean.User;
import com.example.demo.dao.IUserDao;
import com.example.demo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

/**
 * 用户的业务层实现类
 * @author yyh
 */
@Service("userService")
public class UserServiceImpl implements IUserService {

    @Autowired
    private IUserDao userDao;

    @Override
    public List<User> findAllUser() {
        return userDao.findAll();
    }

}


用户的持久层接口

持久层:DAO层(Data Access Object)即数据访问对象(=Mapper层)

用途:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在该层。

  1. 设计DAO的接口
  2. 在Spring的配置文件中定义此接口的实现类
  3. 在模块中调用这个接口来进行数据业务的处理
  4. DAO层的数据源配置,以及有关的数据库连接的参数都在Spring的配置文件中进行配置。
  5. 现在用mybatis逆向工程生成的mapper层,其实就是dao层。对数据库进行数据持久化操作,它的方法语句是直接针对数据库操作的,而service层是针对我们controller,也就是针对我们使用者。service的impl是把mapper和service进行整合的文件。
package com.example.demo.dao;

import com.example.demo.bean.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;

/**
 * 用户的持久层接口
 * @author yyh
 *
 * JpaRepository<User,Long>:
 * 两个泛型是指 1、你要操作那个类 2、你的实体类主键的数据类型
 *
 * @Repository 没有持久层,持久层是继承的,所以加此注解即可
 */
@Repository("userDao")
public interface IUserDao extends JpaRepository<User,Long> {

    /**
     * 查询所有用户
     * 如果用的是spring data jpa,然后也不想写这些方法,
     * 这个时候我们可以选择,让spring data jpa来帮我们实现,
     * 我们可以继承 JpaRepository<User,Long>
     * @return
     */
    //public List<User> findAll();

}

用户的控制器(表现层)

表现层:Controller层

用途:Controller层主要负责具体的业务模块流程的控制

  1. 在该层中需要调用Service层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件中进行的,针对具体业务流程会有不同的控制器。
  2. controller通过接收前端传过来的参数进行业务操作,在返回一个指定的路径或者数据表。
  3. 在具体设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,可使得程序结构清晰,大大减少代码量。
package com.example.demo.web.controller;

import com.example.demo.bean.User;
import com.example.demo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

/**
 * 用户的控制器(表现层)
 * @author yyh
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private IUserService userService;


    //http://localhost:8080/user/findAll
    @RequestMapping("/findAll")
    public List<User> findAllUser(){

        return userService.findAllUser();//业务层调用持久层去查询
    }


}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被开发耽误的大厨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值