@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);
    }
}

测试结果

  

  

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. C++常函数

    常函数即在类的成员函数参数列表后放置const的函数,常函数的作用是限制函数体对成员变量的修改,此外,常函数也不能调用非 常函数. #include <iostream> using na ...

  2. linux 无外网情况下安装 mysql

    由于工作需要,需要在一台装有 CentOS 系统的测试服务器上安装 MySQL ,由于该服务器上存有其他比较重要的测试数据,所以不能连接外网.由于之前安装 MySQL 一直都是使用 yum 命令一键搞 ...

  3. java读properties文件 乱码

    java读properties文件,包含中文字符的主要有两种: 1.key中包含中文字符的(value中也有可能包含) 2.key中不包含中文字符的(value中有可能包含) 1.key中包含中文字符 ...

  4. Unity3D 5.0版本+注册工具分享

    Unity3D引擎5.0正式版本发布也有一段时间了.笔者今天下载了新版本顺便分享一下资源. 主要有两个资源,一个是5.0f4的官方客户端,另外一个是vs的调试插件.有需要的盆友就拿去.都在下面的连接地 ...

  5. oozie调度hive脚本demo

    1. 环境配置 2. 脚本配置 3. 执行job 4. 查看结果 待发布 ..

  6. DRBD(Distributed Replicated Block Device) 分布式块设备复制 进行集群高可用方案

    DRBD是一个用软件实现的.无共享的.服务器之间镜像块设备内容的存储复制解决方案. 外文名 DRBD drbdadm 高级管理工具 drbdsetup 置装载进kernel的DRBD模块 drbdme ...

  7. 设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为)

     设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决.不能解决就 ...

  8. php 的rabbitmq 扩展模块amqp安装

    php 的rabbitmq 扩展模块amqp安装 2017年10月08日 10:34:22 阅读数:240 使用PHP开发,要使用中间队列rabbitmq, 必须要安装PHP的扩展模块amqp, 服务 ...

  9. myeclipse工程重名后怎么更改deploy location?

    http://zhidao.baidu.com/link?url=I9E16OYfxovPHqBrRWhYCI9TYNG_X-Whg_X7QrJiOBXBGEwi-6WYsC-Zi4Jcg9zd3ye ...

  10. hdu 2234(IDA*)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2234 思路:IDA*可以搞,借鉴的是大牛的启发式函数h(): 可以考虑把每一行上的数转化成相同的,或者 ...