下面是Spring Boot实现软删除的完整攻略:
1. 理解软删除
首先需要了解软删除的概念和作用。软删除指的是不是真正删除数据,而是在数据库中新增一个状态字段,用于标记该数据是否被删除。这样可以保留数据完整性,同时又不会真正删除数据,方便数据恢复。
2. 实现示例1
我们以一个简单的用户信息管理为例进行讲解。首先创建一个用户实体类,包含id、用户名、密码和删除状态等属性。
@Entity
@Table(name = "tb_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
@Column(name = "is_deleted")
private Boolean deleted = false;
//getter and setter
}
在实体类中添加deleted字段,并使用@Column注解标记,表明对应于数据库中is_deleted字段。同时将deleted默认值设置为false。
接下来定义Repository接口,继承JpaRepository,并添加根据deleted字段查询的方法。
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findAllByDeletedFalse();
Optional<User> findByIdAndDeletedFalse(Long id);
}
在Controller层中添加删除用户的功能,使用软删除方式,即将删除状态设置为true,而不是真正删除用户信息。
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserRepository userRepository;
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
Optional<User> userOptional = userRepository.findByIdAndDeletedFalse(id);
if (!userOptional.isPresent()) {
return ResponseEntity.notFound().build();
}
User user = userOptional.get();
user.setDeleted(true);
userRepository.save(user);
return ResponseEntity.noContent().build();
}
}
其中,findByIdAndDeletedFalse方法根据id和deleted字段查询用户,如果删除状态为true,则返回not found响应。否则,更新用户删除状态为true,在数据库中进行软删除。最后返回no content响应。
3. 实现示例2
除了使用Repository定义查询方法外,我们也可以使用自定义实现的方式。
创建UserRepositoryCustom接口,定义根据deleted字段查询用户的方法。
public interface UserRepositoryCustom {
List<User> findAllByDeletedFalse();
}
创建UserRepositoryCustomImpl类实现UserRepositoryCustom接口,并在其中添加查询方法的实现代码。
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
@PersistenceContext
private EntityManager em;
@Override
public List<User> findAllByDeletedFalse() {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root<User> root = query.from(User.class);
query = query.select(root).where(cb.isFalse(root.get(User_.deleted)));
TypedQuery<User> typedQuery = em.createQuery(query);
return typedQuery.getResultList();
}
}
在Repository接口中添加自定义实现方法的声明。
public interface UserRepository extends JpaRepository<User, Long>, UserRepositoryCustom {
Optional<User> findByIdAndDeletedFalse(Long id);
}
最后,在Controller中使用自定义实现方法调用查询。
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping
public List<User> getAllUsers() {
return userRepository.findAllByDeletedFalse();
}
}
以上就是Spring Boot实现软删除的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot实现软删除的示例代码 - Python技术站