Spring Data 增删改查事务的使用(七)
2024-09-21 10:34:13
@Modifying 注解使用
@Modifying 结合 @Query注解进行更新操作
咱们单单的一个查询注解是没有办法完成事务的操作的
我们还要结合一点就是@Transaction 在springdata的使用
话不多说 我们开始
开始之前我先讲下上篇文章的 漏了一个 查询总记录数的 本来想给大家写个例子 今天在这里补上
还是在 EmployeeRepository.java 该类增加新的方法
//获取总记录数 //nativeQuery =true 表示支持本地sql查询 @Query(nativeQuery = true,value = "select count(*) from employee") public long getCount();
编写一个测试方法
@Test public void tesquerayParams(){ List<Employee> employees = employeeRepository.querayParams("wangwu",12); for (Employee employee: employees) { System.out.println("id:" + employee.getId() + " , name:" + employee.getName() + " ,age:" + employee.getAge()); } }
执行结果
进入正题 咱们讲下事务的操作
还是一样 通过例子给大家展示
还是在EmployeeRepository.java ---------->update方法
package org.springdata.repository; import org.springdata.domain.Employee; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.Repository; import org.springframework.data.repository.RepositoryDefinition; import org.springframework.data.repository.query.Param; import java.util.List; /*** * */ @RepositoryDefinition(domainClass = Employee.class, idClass = Integer.class) public interface EmployeeRepository /*extends Repository<Employee,Integer>*/ { /** * 根据名字找员工 * desc 大家可以发现 我只声明了一个方法 并没有写任何的实现类 哦了 就这样 咱们写个实现类 * @param name * @return */ public Employee findByName(String name); // name 根据模糊查询 并且 年龄<多少岁的员工 public List<Employee> findByNameIsStartingWithAndAgeLessThan(String name, Integer gae); // names in ('','','') 年龄小于多少 public List<Employee> findByNameInOrAgeLessThan(List<String> names,Integer age); //获取年龄最大的信息 @Query(" select o from Employee o where o.age=(select max(age) from Employee t1)") public Employee getEmployeeByAge(); //获取name包含 哪些 并且年龄等于多少岁 @Query("select o from Employee o where o.name like %?1% and o.age = ?2") public List<Employee> querayParams(String name,Integer age); //获取总记录数 //nativeQuery =true 表示支持本地sql查询 @Query(nativeQuery = true,value = "select count(*) from employee") public long getCount(); //根据id修改年龄 @Modifying //该注解表示允许修改 @Query("update Employee o set o.age=:age where o.id = :id") public void update(@Param("id")Integer id, @Param("age")Integer age); }
写完之后是不是可以马上测试呢? 不是的
咱们做过javaee开发的同学都知道 我们事务都是放在service 里面控制的 所以这次也是一样 咱们新建一个service包 见一个EmployeeService类
所以咱们新建一个EmployeeService.java 进行事务控制
编写一下代码:
package org.springdata.service; import org.springdata.repository.EmployeeRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.transaction.Transactional; /** * Employee 事务的控制 */ @Service public class EmployeeService { @Autowired private EmployeeRepository employeeRepository; @Transactional //事务注解 public void update(Integer id,Integer age){ employeeRepository.update(id,age); } }
编写测试类-----------testupdate
package org.springdata.service; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springdata.repository.EmployeeRepository; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** */ public class SpringDataTransaction { private ApplicationContext ctx = null; private EmployeeService employeeService = null; @Before public void setup(){ ctx = new ClassPathXmlApplicationContext("beans_news.xml"); employeeService = ctx.getBean(EmployeeService.class); System.out.println("setup"); } @After public void tearDown(){ ctx = null; System.out.println("tearDown"); } @Test public void testUpdate(){ employeeService.update(1,52); } }
测试结果
最新文章
- 2016年12月31日 星期六 --出埃及记 Exodus 21:26
- BulkSqlCopy 批量导入数据(Ef支持)
- Android -- EditText方法
- ftp客户端命令使用简记
- pthread_key_t和pthread_key_create()详解
- 在Silverlight中的DispatcherTimer的Tick中使用基于事件的异步请求
- apache开源项目--Apache Commons Imaging
- Android数据存储(1)少量数据保存之SharedPreferences接口实例
- Deep Learning(深度学习)学习笔记整理系列之(四)
- BZOJ 1801 AHOI2009 中国象棋 递归
- 1.2 如何使用LINQ
- 定时且周期性的任务研究II--ScheduledThreadPoolExecutor
- bootstrap 基础表单 内联表单 横向表单
- 杭电2000——ASCII码排序
- 精通CSS+DIV网页样式与布局--CSS段落效果
- Errors running builder &#39;Integrated External Tool Builder&#39; on project xxx
- win下开机不登陆系统自动运行程序的解决方案
- [Swift]LeetCode462. 最少移动次数使数组元素相等 II | Minimum Moves to Equal Array Elements II
- 一篇文让你看懂NB-IoT、LoRa、eMTC、Sigfox及ZigBee的应用场景【转】
- 微服务之:从零搭建ocelot网关和consul集群