前言
有的时候我们在后台管理系统中只需要修改一列的数据时,JPA的操作死对所有字段进行修改,这样就不太方便,而且SpringDataJpa的框架没有线程的更新方法,只能调用save()方法实行保存修改的数据。
如果不想把其中一列的数据修改的话,那么JPA就会自动把这一列不想修改的数据默认null,并且清空。况且只更新一处的话,这个也不太适用。所以楼主尝试着自定义sql语句来写。
。
启发与cnblogs_博客:
https://www.cnblogs.com/super-hu/p/11982384.html
操作步骤
一、DAO层/Mapper层
public interface OrdersDao extends JpaRepository<Orders,String>,JpaSpecificationExecutor<Orders>{
@Modifying//增删改操作必须要有这个注解
@Transactional // 事务的注解
@Query(value = "UPDATE orders SET `status`='1' WHERE id = ? ",nativeQuery = true) // nativeQuery 表示自然的sql数据库语句,
// 更新语句的意思是根据id 去更新 状态列,把status改为1.
void updateStatus(String id); // 定义更新状态的方法,根据id去更新,没有返回值。
List<Orders> findByUserid(String userId);
}
二、Service业务处理层
代码如下(示例):
@Service
public class OrdersService {
@Autowired
private OrdersDao ordersDao;
public void updateStatus(String status) {
ordersDao.updateStatus(status);
}
}
三、Controller控制层
代码如下(示例):
@Autowired
private OrdersService ordersService;
/**
* 修改
* @param
*/
@ResponseBody
@RequestMapping(value="/{id}",method= RequestMethod.PUT)
public Result update(@PathVariable String id){
System.out.println(id);
ordersService.updateStatus(id);
return new Result(true,StatusCode.OK,"修改成功");
}
总结
Dao层自定义sql语句,服务层编写方法调用dao层方法,最后控制层调用服务层方法。