通过 @Modifying 注解可以完成修改(UPDATE或者DELETE)操作(注意:不支持新增)
- SpringDataJpa——JpaRepository增删改查(请参考):http://blog.csdn.net/fly/article/details/
示例
package com.newcapec.dao.repository.pay;import com.newcapec.dao.domain.UserEnroll;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.JpaSpecificationExecutor;import org.springframework.data.jpa.repository.Modifying;import org.springframework.data.jpa.repository.Query;import org.springframework.data.repository.query.Param;import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Transactional;import java.util.Date;import java.util.List;/* @Title: 用户报名缴费信息--DAO* @ClassName: com.newcapec.dao.repository.pay.PayRepository.java* @Description:** @Copyright 2016-2017 - Powered By 研发中心* @author: FLY* @date: 2017-12-16 12:35* @version V1.0*/@Repositorypublic interface PayRepository extends JpaRepository<UserEnroll, Long>,JpaSpecificationExecutor<UserEnroll> {- /
* @Title: 更新用户报名缴费信息,为支付成功* @methodName: updateUserEnrollPaySuccess* @param paytime* @param orderno* @param localOrderno* @return int* @Description:** @author:FLY* @date: 2017-12-18 8:41*/@Transactional(rollbackFor = Exception.class)@Modifying@Query("UPDATE UserEnroll SET payflag = 2 , paytime = :paytime , orderno = :orderno WHERE localOrderno = :localOrderno")int updateUserEnrollPaySuccess(@Param("paytime")Date paytime, @Param("orderno")String orderno , @Param("localOrderno")String localOrderno);}
package com.newcapec.dao;import com.newcapec.dao.domain.UserEnroll;import com.newcapec.dao.repository.pay.PayRepository;import org.junit.Assert;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import java.util.Date;import java.util.List;/* @Title: 用户报名缴费信息--DAO测试* @ClassName: com.newcapec.dao.PayRepositoryTest.java* @Description:** @Copyright 2016-2017 - Powered By 研发中心* @author: FLY* @date: 2017-12-16 13:29* @version V1.0*/@RunWith(SpringRunner.class)@SpringBootTestpublic class PayRepositoryTest {@AutowiredPayRepository payRepository;/* @Title: 更新用户报名缴费信息,为支付成功* @methodName: testUpdateUserEnrollPaySuccess* @param* @return void* @Description:** @author: 王延飞* @date: 2017-12-18 8:21*/@Testpublic void testUpdateUserEnrollPaySuccess() {int i = payRepository.updateUserEnrollPaySuccess(new Date(), "45689", "45689");UserEnroll userEnroll = payRepository.findByLocalOrderno("45689");System.out.println("更新条数:"+i);Assert.assertEquals("45689", userEnroll.getOrderno());}}
(1)可以通过自定义的 JPQL 完成 UPDATE 和 DELETE 操作。 注意: JPQL 不支持使用 INSERT;
(2)在 @Query 注解中编写 JPQL 语句, 但必须使用 @Modifying 进行修饰. 以通知 SpringData, 这是一个 UPDATE 或 DELETE 操作
(3)UPDATE 或 DELETE 操作需要使用事务,此时需要定义 Service 层,在 Service 层的方法上添加事务操作;
JPA实现的dao接口在写testcase时 需要加事务的注解,如上;
但正是环境,事务一般是加在service层;
(4)默认情况下, SpringData 的每个方法上有事务, 但都是一个只读事务。 他们不能完成修改操作。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232839.html原文链接:https://javaforall.net
