SpringBoot Service和Dao的编写详解

yizhihongxing

针对 “SpringBoot Service 和 Dao 的编写详解” ,下面是完整的攻略:

1. 什么是 SpringBoot Service 和 Dao

在开发 Web 应用程序时,我们通常会遵循 MVC 的设计模式。其中 Service 和 Dao 层属于模型层的一部分,分别负责业务处理和数据访问。

SpringBoot Service 层主要负责业务逻辑的处理。它通常会调用 Dao 层提供的数据访问方法,并将查询到的数据进行处理后再返回给 Controller 层或其他调用方。

SpringBoot Dao 层则负责与数据库交互,提供数据访问的方法给 Service 层,同时也提供持久层对象(PO)和映射文件(Mapper.xml)的编写。

2. 如何编写 SpringBoot Service 和 Dao

2.1 编写 Dao 层

编写 Dao 层主要有以下步骤:

  • 建立数据源

首先要在 application.properties 文件中配置数据库相关的信息,如 spring.datasource.urlspring.datasource.usernamespring.datasource.password 等。

  • 创建实体类

根据数据库的表结构,创建 PO(持久层对象)类,该类对应一张数据表,并对表中的每一列使用属性进行映射。通常采用 JPA 或其它的 ORM 技术,避免手动创建 SQL 语句。

  • 创建 Dao 接口

com.example.demo.dao 包下新建相关业务的 Dao 层接口,并继承 JpaRepository 类。在该接口中定义增删改查等数据操作方法。例如:

public interface UserDao extends JpaRepository<User, Long> {

    List<User> findByName(String name);

    User findByEmail(String email);
}

这里以用户信息查询为例,通过 name 查询得到多个用户,通过 email 查询得到一个用户。

2.2 编写 Service 层

  • 创建 Service 接口

com.example.demo.service 包下新建相关业务的 Service 层接口,定义业务方法。例如:

public interface UserService {

    User getUserByName(String name);

    User getUserByEmail(String email);

    List<User> getAllUsers();
}
  • 实现 Service 接口

com.example.demo.service.impl 包下新建相关业务的 Service 实现类,并实现 Service 接口中的所有方法。

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public User getUserByName(String name) {
        List<User> userList = userDao.findByName(name);
        return CollectionUtils.isNotEmpty(userList) ? userList.get(0) : null;
    }

    @Override
    public User getUserByEmail(String email) {
        return userDao.findByEmail(email);
    }

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

在 Service 实现类中注入 Dao 对象,并实现 Service 接口中定义的方法。例如,getUserByName() 方法中调用 UserDao 的 findByName() 方法查询用户,返回查询到的第一条记录。

2.3 编写 Controller 层

最后,在 com.example.demo.controller 包下编写 Controller 层控制器的代码,实现接口请求和业务处理的分离。

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/byname")
    public User getUserByName(@RequestParam String name) {
        return userService.getUserByName(name);
    }

    @GetMapping("/byemail")
    public User getUserByEmail(@RequestParam String email) {
        return userService.getUserByEmail(email);
    }

    @GetMapping("/all")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
}

在 Controller 层中注入 Service 对象,定义对外提供接口,并调用 Service 层的方法实现业务处理。

3. 实战示例

为了更好的理解上述流程,以下是两个关于用户信息的使用示例:

3.1 查询所有用户

在 Dao 层中添加新的方法:

public interface UserDao extends JpaRepository<User, Long> {

    List<User> findAllUserDesc();
}

在 Service 层添加新的方法:

public List<User> getAllUsersDesc() {
    return userDao.findAllUserDesc();
}

在 Controller 层添加新的请求接口:

@PostMapping("/all_desc")
public List<User> getAllUsersDesc() {
    return userService.getAllUsersDesc();
}

3.2 添加一个新用户

需要通过 POST 请求方式提交用户信息,在 Dao 层添加方法:

public interface UserDao extends JpaRepository<User, Long> {

    @Modifying
    @Transactional(rollbackFor = Exception.class)
    @Query(value = "insert into t_user(name, email, age) values(?1, ?2, ?3)", nativeQuery = true)
    int insertUser(String name, String email, int age);
}

在 Service 层添加新的方法:

public boolean insertUser(String name, String email, int age) {
    return userDao.insertUser(name, email, age) > 0;
}

在 Controller 层添加新的请求接口:

@PostMapping("/add")
public boolean addUser(@RequestParam String name, @RequestParam String email, @RequestParam int age) {
    return userService.insertUser(name, email, age);
}

有了 Dao 层、Service 层和 Controller 层对应的代码,即可实现对用户信息的查询和添加。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot Service和Dao的编写详解 - Python技术站

(1)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • Java 实现word模板转为pdf

    关于Java实现Word模板转为PDF的攻略,主要分为以下几个步骤: 使用Java读取Word模板文件,可以使用Apache POI库或者JACOB库来实现 使用FreeMarker或者Velocity模板引擎,将Word模板中的内容填充到模板文件中,生成新的Word文档文件 使用Itext或者Apache PDFBox库,将生成的新Word文档转换为PDF…

    Java 2023年6月15日
    00
  • java实现文件上传下载和图片压缩代码示例

    Java实现文件上传 1. 准备工作 在进行文件上传前,需要在服务器上建立一个存储上传文件的目录,并且需要在前端用HTML5的file标签来设置文件选择框。 2. 前端代码 前端代码使用HTML5的form表单和一个file选择框,具体如下: <!DOCTYPE html> <html lang="en"> &lt…

    Java 2023年5月20日
    00
  • 标记-整理算法的作用是什么?

    以下是关于标记-整理算法的详细讲解: 什么是标记-整理算法? 标记-整理算法是一种常见的垃圾回收算法。其原理将内存空间分个区域,一部分为活动区,一部分为闲置区。在程序运行过程中,标记所有不再使用的内存间,然后将所有活动区的对象移动到置区,最后清空活动区,从而回收内存空间。记-整算法分为两个阶段:标记阶段整理阶段。 标记阶段 在标记阶段,垃圾收集器会遍所有的对…

    Java 2023年5月12日
    00
  • Mybatis实现SQL存储流程详解

    下面是对“Mybatis实现SQL存储流程详解”的完整攻略: Mybatis 实现 SQL 存储流程 配置 Mybatis 使用 Mybatis,首先需要配置 Mybatis。Mybatis 的配置可以是 XML 文件形式,也可以是 Java 类形式。 以下是一个示例 Mybatis 配置文件,“config.xml”: <?xml version=&…

    Java 2023年5月19日
    00
  • java中封装的实现方法详解

    Java中封装的实现方法详解 1. 什么是Java中的封装 封装是面向对象编程的三大特征之一,它指的是将数据和方法封装在一个类中,隐藏类的具体实现细节,只向外部暴露必要的接口,来保证程序的安全性、健壮性和可维护性。封装的实现可以通过访问控制修饰符、Getter/Setter方法等方式来进行。 2. Java中使用访问控制修饰符实现封装 访问控制修饰符包括pu…

    Java 2023年5月18日
    00
  • Java异常Exception详细讲解

    Java异常Exception详细讲解 什么是Java异常Exception? 在Java中,异常(Exception)是指程序在运行时遇到的错误或意外情况。当Java程序出现异常时,会抛出一个异常对象,可以通过捕获和处理这个异常来防止程序崩溃。Java中的异常分为三种类型:Checked Exception(受检异常)、Runtime Exception(…

    Java 2023年5月27日
    00
  • 一文带你深入了解Java8 Stream流式编程

    一文带你深入了解Java8 Stream流式编程 什么是Java 8 Stream Java 8中引入了Stream API,通过Stream API,处理集合数据更加简单,更加高效。Stream API就如同一个迭代器(Iterator)一样,单向处理数据流并生成处理结果。 Stream接口可以让我们完成下面的任务: 集合类型,比如 List,Set,甚至…

    Java 2023年5月26日
    00
  • JDBC数据库连接步骤解析

    JDBC是Java Database Connectivity的缩写,用于Java语言访问关系型数据库的API。下面就来详细讲解JDBC数据库连接步骤解析。 JDBC数据库连接步骤 加载数据库驱动:通过Class.forName()方法加载数据库驱动,例如加载mysql数据库驱动可以使用以下代码: Class.forName(“com.mysql.jdbc.…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部