springboot_Springdata-jpa@Procedure呼び出しストアド・プロシージャ・クエリー・メソッド
プロジェクトのアドレス:https://github.com/heng1234/springdata-jpa
1、mysqlデータ作成テーブルとストレージプロセス
2、springbootプロジェクトでUser Entityを作成する
Controller
1、mysqlデータ作成テーブルとストレージプロセス
CREATE TABLE `user` (
`id` INT (11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR (50) NOT NULL,
`email` VARCHAR (200) NOT NULL,
PRIMARY KEY (`id`)
)
--
create procedure pluslinout(IN arg int, OUT res int)
BEGIN
select (arg+10) into res;
END
2、springbootプロジェクトでUser Entityを作成する
package com.hvly.springjp_1.com.hlvy.entity;
import lombok.Data;
import javax.persistence.*;
/**
* User
*
* @author heng
**/
//@Data//lombok
@Entity(name = "User")
/**
* @Procedure
*
* name: EntityManager NamedStoredProcedureQuery
* procedureName:
* parameters: IN/OUT
*
* @NamedStoredProcedureQuery JPA 。
* procedureName
* name JPA
* @StoredProcedureParameter IN/OU
*/
@NamedStoredProcedureQuery(name = "User.plusl",procedureName = "pluslinout",parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN,name = "arg",type=Integer.class),
@StoredProcedureParameter(mode = ParameterMode.OUT,name="res",type = Integer.class)
})
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)//
private Long id;
private String name;
private String email;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
JpaRepository
package com.hvly.springjp_1.com.hlvy.repository;
import com.hvly.springjp_1.com.hlvy.entity.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.*;
import org.springframework.data.jpa.repository.query.Procedure;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.QueryHint;
import java.util.List;
/**
* UserRepository
*
* @author heng
**/
public interface UserJpaRepository extends JpaRepository , JpaSpecificationExecutor {
/**
*
* pluslinout
* @param arg
* @return
*/
@Procedure("pluslinout")
Integer explicitlyNamedPluslinout(Integer arg);
/**
*
* pluslinout
* @param arg
* @return
*/
@Procedure(procedureName = "pluslinout")
Integer pluslinout(Integer arg);
/**
* User.pluslIO
* @param arg
* @return
*/
@Procedure(name = "User.plusl")
Integer entityAnnotatedCustomNamedProcedurePluslIO(@Param("arg") Integer arg);
}
Controller
package com.hvly.springjp_1.com.hlvy.controller;
import com.hvly.springjp_1.com.hlvy.entity.SeLPUser;
import com.hvly.springjp_1.com.hlvy.entity.User;
import com.hvly.springjp_1.com.hlvy.repository.SpELUserRepository;
import com.hvly.springjp_1.com.hlvy.repository.UserAtRepository;
import com.hvly.springjp_1.com.hlvy.repository.UserJpaRepository;
import com.hvly.springjp_1.com.hlvy.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.JpaSort;
import org.springframework.web.bind.annotation.*;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.List;
/**
* UserController
*
* @author heng
**/
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private UserJpaRepository userJpaRepository;
/**
* @Procedure
*
*/
@RequestMapping("explicitlyNamedPluslinout")
public Integer explicitlyNamedPluslinout(int arg){
// return userJpaRepository.explicitlyNamedPluslinout(arg);//
// return userJpaRepository.pluslinout(arg);//
return userJpaRepository.entityAnnotatedCustomNamedProcedurePluslIO(arg);//
}
}