spring-data-jpa使用jpql自定义更新方法

共分四步:

1,在dao层接口方法上使用@Query注解编写jpql语句。
2,在dao层接口方法上使用@Modifying,表示该方法为更新方法
package com.wn.dao;

import com.wn.domain.Customer;
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;

public interface CustomerRepository extends JpaRepository<Customer, Long>, JpaSpecificationExecutor<Customer> {

    @Query("update Customer set custName = ?2 where custId = ?1 ")
    @Modifying // 标志为修改方法
    void updateNameById(Long id, String name);
}
3,在测试方法上添加@Transactional,因为是自定义的方法所以需要被事务管理
4,在测试方法上添加@Rollback(value = false),默认事务会自定回滚,所以需要手动取消默认回滚
package com.wn.test;

import com.wn.dao.CustomerRepository;
import com.wn.domain.Customer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringDataJPQLTest {

    @Autowired
    CustomerRepository repository;
	 /**
     * 修改
     */
    @Test
    @Transactional // 自定义的jpql更新方法需要被事务管理
    @Rollback(value = false) // 设置默认回滚事务为false
    public void testUpdateNameById() {
        repository.updateNameById(2L, "司马懿");
    }
}

你可能感兴趣的:(spring-data-jpa使用jpql自定义更新方法)