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线程代码的实现方法

    下面是详细讲解“Java线程代码的实现方法”的完整攻略。 一、Java线程实现方法 Java中实现线程的方法主要有两种:继承Thread类和实现Runnable接口。两种方法各有优缺点,以下分别进行介绍。 1. 继承Thread类 继承Thread类是实现Java线程的较为简单的方法。继承Thread类后重写run()方法,将run()方法中需要线程执行的代…

    Java 2023年5月18日
    00
  • 关于maven的用法和几个常用的命令

    关于maven的用法和几个常用的命令,我来为您总结一下。 一、什么是Maven?Maven是一个Java项目管理工具,可以帮助我们自动化构建、管理和部署Java项目。Maven的目标是管理Java项目的构建、报告和文档,以简化软件开发过程。Maven通过提供统一的构建方式、标准化的项目结构和规范,大幅度简化Java项目的开发过程。 二、Maven的用法 安装…

    Java 2023年6月2日
    00
  • SpringBoot多数据源的两种实现方式实例

    下面我就为你详细讲解一下“SpringBoot多数据源的两种实现方式实例”的完整攻略。 SpringBoot多数据源的两种实现方式实例 为什么需要多数据源 在实际开发中,我们可能会遇到这样的情况:业务系统需要同时连接多个数据库进行数据操作。此时单数据源的方式已无法满足需求,必须使用多数据源来进行解决。 方案一:使用@Primary注解 1.添加多数据源配置项…

    Java 2023年5月20日
    00
  • java Long类型转为json后数据损失精度的处理方式

    标准的JSON格式对于整型数字的最大范围支持是64位的有符号数字的取值范围,而在Java中Long类型是一个64位的有符号整数,因此在转换为JSON格式时,理论上不会存在数据范围限制和数据精度丢失的问题。但是在Java程序中经常会使用第三方JSON组件将Java对象转换为JSON格式的字符串进行传输和存储。此时需要注意JSON组件的一些特殊处理和配置,避免数…

    Java 2023年5月26日
    00
  • Ajax通过XML异步提交的方法实现从数据库获取省份和城市信息实现二级联动(xml方法)

    创建数据库和数据表 首先,需要先创建一个数据库,可以取名为demo,然后在这个数据库中创建一张名为province的数据表,并插入一些数据。表结构如下: CREATE TABLE IF NOT EXISTS `province` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘省份ID’, `…

    Java 2023年6月15日
    00
  • 10种简单的Java性能优化

    10种简单的Java性能优化完整攻略 Java程序的性能优化是非常重要的,可以提高程序运行效率,改善用户体验。下面是10种简单的Java性能优化策略: 1. 使用局部变量代替成员变量 使用局部变量可以避免每次访问成员变量时都要访问内存中的数据,因为局部变量存放在栈中,访问速度更快。对于循环中需要多次访问的变量,使用局部变量可以提高程序的运行速度。 示例: p…

    Java 2023年5月30日
    00
  • java代码获取数据库表里数据的总数操作

    让我详细讲解一下关于“Java代码获取数据库表里数据的总数操作”的完整攻略。 1. 通过JDBC获取数据总数 1.1. JDBC连接数据库 首先,我们需要使用JDBC连接到数据库。具体步骤如下: // 加载MySQL JDBC Driver Class.forName("com.mysql.jdbc.Driver"); // 声明MySQ…

    Java 2023年5月20日
    00
  • Java实现员工管理系统

    Java实现员工管理系统攻略 实现员工管理系统的步骤如下: 第一步:确定需求 在开发一款软件之前,我们需要明确该软件需要满足哪些需求。对于员工管理系统,我们至少需要以下几个功能: 添加员工信息; 删除员工信息; 修改员工信息; 查询员工信息。 如果需要更多的功能,可以在需求分析阶段确定。 第二步:搭建开发环境 在确定了需求之后,我们需要搭建 Java 开发环…

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