SpringBoot Service和Dao的编写详解

针对 “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中的Gradle与Groovy的区别及存在的关系

    Java中的Gradle与Groovy的区别及存在的关系 Gradle和Groovy是Java生态圈中的两个重要工具,Gradle作为一款构建工具,而Groovy则是一种脚本语言。它们之间有着密切的关系,在Java项目中都存在重要的作用。 Gradle是一款基于Groovy的自动化构建工具。它不仅支持Java开发,还支持其他语言的项目构建。Gradle支持使…

    Java 2023年5月20日
    00
  • Java this关键字的引用详解

    Java this关键字的引用详解 在Java开发中,this是一个非常常用的关键字,它用于引用当前对象。在本篇攻略中,我将为大家详细讲解this的使用方法和注意事项。 什么是this关键字 在Java中,每个对象都有自己的属性和方法。当我们在方法内部使用一个属性时,有可能会和方法中的参数或局部变量同名,这时候我们需要使用this关键字来区分它们。 this…

    Java 2023年5月26日
    00
  • java String到底有多长?String超出长度该如何解决

    Java中的String类型是一种特殊的引用类型,用于表示字符串。在Java中,字符串是不可变的,也就是说一旦创建就不能再修改了,所以内存中的字符串是一个长度固定的字符数组,但是这个长度是不确定的。 Java中的String类型的长度并不是固定的,而是动态分配的,具体大小取决于String对象中存储的字符数量。当创建一个新的String对象时,Java会根据…

    Java 2023年5月27日
    00
  • Spring Security配置保姆级教程

    针对“Spring Security配置保姆级教程”的完整攻略,以下是详细的讲解: 前言 Spring Security 是一个基于 Spring 框架的安全模块,为Spring应用提供了声明式的安全访问控制。本文将详细讲解 Spring Security 的配置,帮助初学者掌握 Spring Security 的使用方法。 基本概念 在使用 Spring …

    Java 2023年5月20日
    00
  • Java tomcat手动配置servlet详解

    Java Tomcat是一个广泛使用的Web容器,它可以让我们轻松地构建和部署Java Servlet应用程序。在这篇文章中,我们将详细介绍如何手动配置Servlet应用程序并将其部署到Tomcat Web服务器上。 准备工作 在开始配置Servlet之前,我们需要确保已经安装了Tomcat Web服务器,并已经将其正确配置。如果您还没有安装Tomcat,请…

    Java 2023年6月2日
    00
  • Java多线程——基础概念

    Java多线程——基础概念 什么是进程和线程 在操作系统中,一个正在运行的程序称为进程(process),进程可以拥有多个相互独立执行流程,称为线程(thread)。一个进程中至少有一个主线程。 为什么需要使用多线程 多线程的主要目的是提高程序的效率,特别是在当程序需要同时执行多个耗时操作时,可以通过多线程将这些操作并发地执行,提高整个程序的执行效率。同时,…

    Java 2023年5月19日
    00
  • 实例讲解Java读取一般文本文件和word文档的方法

    让我来为大家详细讲解一下实例讲解Java读取一般文本文件和word文档的方法。 1. 读取一般文本文件 Java读取一般文本文件的方式很简单,可以使用File类和Scanner类。 1.1 使用File类读取文本文件 参照以下代码: import java.io.BufferedReader; import java.io.FileReader; impor…

    Java 2023年5月19日
    00
  • 创建一个Java的不可变对象

    创建一个Java的不可变对象,需要经过以下步骤: 1. 声明类为final 为了防止子类继承和重写类中的方法,将类声明为final。 2. 声明所有的属性为私有的final类型 使用final类型声明属性,并且将其设为私有属性,这样无法修改。 public final class ImmutableObject { private final int age…

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