Spring Data JPA使用@Query与@Modifying注解自定义修改和删除操作

JPQL是面向对象进行查询的语言,还可以通过自定义的JPQL完成UPDATE和DELETE操作。

JPQL操作注意事项:

(1)JPQL不支持使用 INSERT 操作。

(2)UPDATE 或 DELETE 操作,必须使用@Query与@Modifying注解进行修饰。

(3)UPDATE 或 DELETE 操作需要使用事务,需要在定义的业务逻辑层(Service层),在方法上使用@Transactional注解管理事务。

【示例】通过自定义的JPQL完成UPDATE和DELETE操作。

(1)数据库访问层(Dao层)

在数据库访问层(Dao层)中,创建UserDao.java(用户信息数据库访问接口),并继承JpaRepository接口。自定义UPDATE 和 DELETE 操作方法。

package com.pjb.jpauserdemo.dao;import com.pjb.jpauserdemo.entity.User;
import com.pjb.jpauserdemo.entity.UserInfo;
import org.springframework.data.jpa.repository.JpaRepository;
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;/*** 用户信息数据库访问接口* @author pan_junbiao**/
@Repository
public interface UserDao extends JpaRepository
{/*** 修改用户*/@Modifying@Query("UPDATE UserInfo u SET u.userName = :name WHERE u.userId = :id")public int updateUser(@Param("id")int userId, @Param("name")String userName);/*** 删除用户*/@Modifying@Query("DELETE FROM UserInfo u WHERE u.userId = :id")public int deleteUser(@Param("id")int userId);
}

注意:在数据库访问层(Dao层)中,需要使用@Query与@Modifying这两个注解一起声明,定义个性化更新和删除操作。

(2)业务逻辑层(Service层)

在业务逻辑层(Service层)中,创建UserService.java(用户业务逻辑接口)。

package com.pjb.jpauserdemo.service;/*** 用户业务逻辑接口* @author pan_junbiao**/
public interface UserService
{/*** 修改用户*/public int updateUser(int userId, String userName);/*** 删除用户*/public int deleteUser(int userId);
}

业务逻辑层(Service层)下,创建 impl 目录,在该目录下创建UserServiceImpl.java(用户业务逻辑类)。

package com.pjb.jpauserdemo.service.impl;import com.pjb.jpauserdemo.dao.UserDao;
import com.pjb.jpauserdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;/*** 用户业务逻辑类* @author pan_junbiao**/
@Service
public class UserServiceImpl implements UserService
{@Autowiredprivate UserDao userDao;/*** 修改用户*/@Transactionalpublic int updateUser(int userId, String userName){return userDao.updateUser(userId,userName);}/*** 删除用户*/@Transactionalpublic int deleteUser(int userId){return userDao.deleteUser(userId);}
}

注意:在业务逻辑层(Service层)中实现方法,必须使用@Transactional注解管理事务。

(3)测试层(Test层)

在测试层(Test层)中,创建UserServiceTest.java (用户信息测试类)。

package com.pjb.jpauserdemo.service.impl;import com.pjb.jpauserdemo.service.UserService;
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;/*** 用户信息测试类* @author pan_junbiao**/
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserServiceTest
{@Autowiredprivate UserService userService;/*** 测试:修改用户*/@Testpublic void updateUser(){userService.updateUser(1,"pan_junbiao的博客");}/*** 测试:删除用户*/@Testpublic void deleteUser(){userService.deleteUser(1);}
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部