针对 “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.url
、spring.datasource.username
、spring.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技术站