@Modifying 注解使用

@Modifying 结合 @Query注解进行更新操作

咱们单单的一个查询注解是没有办法完成事务的操作的

我们还要结合一点就是@Transaction 在springdata的使用

话不多说 我们开始

  开始之前我先讲下上篇文章的 漏了一个 查询总记录数的  本来想给大家写个例子   今天在这里补上

  还是在 EmployeeRepository.java 该类增加新的方法

  1. //获取总记录数
  2. //nativeQuery =true 表示支持本地sql查询
  3. @Query(nativeQuery = true,value = "select count(*) from employee")
  4. public long getCount();

编写一个测试方法

  1. @Test
  2. public void tesquerayParams(){
  3. List<Employee> employees = employeeRepository.querayParams("wangwu",12);
  4. for (Employee employee: employees) {
  5. System.out.println("id:" + employee.getId()
  6. + " , name:" + employee.getName()
  7. + " ,age:" + employee.getAge());
  8. }
  9. }

执行结果

  

进入正题  咱们讲下事务的操作

  还是一样 通过例子给大家展示

  还是在EmployeeRepository.java  ---------->update方法

  

  1. package org.springdata.repository;
  2.  
  3. import org.springdata.domain.Employee;
  4. import org.springframework.data.jpa.repository.Modifying;
  5. import org.springframework.data.jpa.repository.Query;
  6. import org.springframework.data.repository.Repository;
  7. import org.springframework.data.repository.RepositoryDefinition;
  8. import org.springframework.data.repository.query.Param;
  9.  
  10. import java.util.List;
  11.  
  12. /***
  13. *
  14. */
  15. @RepositoryDefinition(domainClass = Employee.class, idClass = Integer.class)
  16. public interface EmployeeRepository /*extends Repository<Employee,Integer>*/ {
  17. /**
  18. * 根据名字找员工
  19. * desc 大家可以发现 我只声明了一个方法 并没有写任何的实现类 哦了 就这样 咱们写个实现类
  20. * @param name
  21. * @return
  22. */
  23. public Employee findByName(String name);
  24.  
  25. // name 根据模糊查询 并且 年龄<多少岁的员工
  26. public List<Employee> findByNameIsStartingWithAndAgeLessThan(String name, Integer gae);
  27.  
  28. // names in ('','','') 年龄小于多少
  29. public List<Employee> findByNameInOrAgeLessThan(List<String> names,Integer age);
  30.  
  31. //获取年龄最大的信息
  32. @Query(" select o from Employee o where o.age=(select max(age) from Employee t1)")
  33. public Employee getEmployeeByAge();
  34.  
  35. //获取name包含 哪些 并且年龄等于多少岁
  36. @Query("select o from Employee o where o.name like %?1% and o.age = ?2")
  37. public List<Employee> querayParams(String name,Integer age);
  38.  
  39. //获取总记录数
  40. //nativeQuery =true 表示支持本地sql查询
  41. @Query(nativeQuery = true,value = "select count(*) from employee")
  42. public long getCount();
  43.  
  44. //根据id修改年龄
  45. @Modifying //该注解表示允许修改
  46. @Query("update Employee o set o.age=:age where o.id = :id")
  47. public void update(@Param("id")Integer id, @Param("age")Integer age);
  48. }

写完之后是不是可以马上测试呢?  不是的

  咱们做过javaee开发的同学都知道  我们事务都是放在service 里面控制的 所以这次也是一样  咱们新建一个service包  见一个EmployeeService类

所以咱们新建一个EmployeeService.java 进行事务控制

  

编写一下代码:

  1. package org.springdata.service;
  2.  
  3. import org.springdata.repository.EmployeeRepository;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6.  
  7. import javax.transaction.Transactional;
  8.  
  9. /**
  10. * Employee 事务的控制
  11. */
  12. @Service
  13. public class EmployeeService {
  14. @Autowired
  15. private EmployeeRepository employeeRepository;
  16.  
  17. @Transactional //事务注解
  18. public void update(Integer id,Integer age){
  19. employeeRepository.update(id,age);
  20. }
  21. }

编写测试类-----------testupdate

  

  1. package org.springdata.service;
  2.  
  3. import org.junit.After;
  4. import org.junit.Before;
  5. import org.junit.Test;
  6. import org.springdata.repository.EmployeeRepository;
  7. import org.springframework.context.ApplicationContext;
  8. import org.springframework.context.support.ClassPathXmlApplicationContext;
  9.  
  10. /**
  11. */
  12. public class SpringDataTransaction {
  13.  
  14. private ApplicationContext ctx = null;
  15.  
  16. private EmployeeService employeeService = null;
  17.  
  18. @Before
  19. public void setup(){
  20. ctx = new ClassPathXmlApplicationContext("beans_news.xml");
  21. employeeService = ctx.getBean(EmployeeService.class);
  22. System.out.println("setup");
  23. }
  24.  
  25. @After
  26. public void tearDown(){
  27. ctx = null;
  28. System.out.println("tearDown");
  29. }
  30.  
  31. @Test
  32. public void testUpdate(){
  33. employeeService.update(1,52);
  34. }
  35. }

测试结果

  

  

Spring Data 增删改查事务的使用(七)的更多相关文章

  1. sssp-springmvc+spring+spring-data-jpa增删改查

    环境:IDE:eclipse.jdk1.7.mysql5.7.maven 项目结构图 上面目录结构你可以自己创建 搭建框架 首先加入maven依赖包以及相关插件 <dependencies> ...

  2. vue.js+element ui Table+spring boot增删改查

    小白初学,不懂的还是太多了,找了好多资料才做出来的先记录一下 1.先用Spring boot创建一个包含了增删改查的项目 2.创建vue.js项目 3.安装Element UI (1)进入项目文件夹下 ...

  3. C# Dapper 基本使用 增删改查事务等

    using DapperTest.Models; using System.Collections.Generic; using System.Web.Http; using Dapper; usin ...

  4. C# Dapper 基本使用 增删改查事务

    来源:https://blog.csdn.net/Tomato2313/article/details/78880969 using DapperTest.Models; using System.C ...

  5. 4、Spring+MyBatis增删改查

    0.oracle数据库脚本 create table userinfo (id ), name ), password telephone ), isadmin )); --4.2 用户表序列 cre ...

  6. spring mongodb增删改查操作

    添加数据 School @Id @GeneratedValue private long id; @Indexed(unique = true) private String name; studen ...

  7. PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理

    相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析    PHPmysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理 介绍 PDO是一种PHP程序连接数据库的接口 ...

  8. 【php增删改查实例】第七节 - 部门管理模块(画一个datagrid表格)

    在easyui中,datagrid组件需要用一个table标签去渲染. <table id="grid0" title="部门管理" class=&quo ...

  9. Python 模拟SQL对文件进行增删改查

    #!/usr/bin/env python # _*_ coding:UTF-8 _*_ # __auth__: Dalhhin # Python 3.5.2,Pycharm 2016.3.2 # 2 ...

随机推荐

  1. JAVA第一个窗体小程序

    import java.awt.*;public class Day1015_Frame{    public static void main(String[] args)    {         ...

  2. 基于html5制作3D拳击游戏源码下载

    今天给大家分享一款基于HTML5实现的3d拳王游戏源码.这款实例适用浏览器:360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 不支持IE8及以下浏览器. 在线预览 ...

  3. JSON 文件格式解析

    JSON 文件大致说明 JSON 文件你可以理解为就是一个字典文件. 格式为 { 索引:数据, 索引:{ 索引:数据, 索引:{ 索引:数据, 索引:数据 } } } 自己写一个 my.json { ...

  4. ajax——优化0126(增删改查:添加查看详情,返回结果类型为JSON型,在窗口显示)

    效果: 鼠标点击查看详情时 数据库: 0126.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...

  5. Python高级编程之生成器(Generator)与coroutine(二):coroutine介绍

    原创作品,转载请注明出处:点我 上一篇文章Python高级编程之生成器(Generator)与coroutine(一):Generator中,我们介绍了什么是Generator,以及写了几个使用Gen ...

  6. CentOS 6.5 安装 php7 教程 包很重要使用lnmp1.4里面的包

    ./configure \ --prefix=/usr/local/php-7.0.1 \ --with-mysql=mysqlnd \ --with-pdo-mysql=mysqlnd \ --wi ...

  7. Hadoop源码分析之客户端向HDFS写数据

    转自:http://www.tuicool.com/articles/neUrmu 在上一篇博文中分析了客户端从HDFS读取数据的过程,下面来看看客户端是怎么样向HDFS写数据的,下面的代码将本地文件 ...

  8. 敏捷软件开发实践-Code Review Process(转)

    介绍: 在敏捷软件开发中,从代码的产生速度上来看,要比 传统Waterfall产生速度高很多.因为我们把时间安排的更加紧凑了.那么这么多的代码,如何能保证这些代码质量呢?很多人可能直接想到静态代码检测 ...

  9. 【vijos】1164 曹冲养猪(中国剩余定理)

    https://vijos.org/p/1164 好赞orz. 对于求一组线性同余方程 x=a[i](mod m[i]) 这里任意两个m[i]和m[j]都互质 那么可以用中国剩余定理来做. 对中国剩余 ...

  10. 《网络编程》非堵塞 I/O

    概述 在前面文章中,我们介绍了 I/O 的五种模型<I/O 模型>.从那里能够知道,非堵塞式的 I/O 是进程调用 I/O 操作时.若数据未准备就绪.则马上返回一个 EWOULDBLOCK ...