Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何从Spring调用存储过程_Json_Spring_Spring Mvc_Spring Boot_Stored Procedures - Fatal编程技术网

Json 如何从Spring调用存储过程

Json 如何从Spring调用存储过程,json,spring,spring-mvc,spring-boot,stored-procedures,Json,Spring,Spring Mvc,Spring Boot,Stored Procedures,如何在spring中通过存储过程将数据插入表中 谁能举个例子吗。我的存储过程有一些自动生成的值 CREATE PROCEDURE [dbo].[usp_employee_insert] @full_name varchar(75),@gender varchar(6), @department varchar(25), _ @position varchar(50),@salary float AS BEGIN INSERT INTO employees (full_na

如何在spring中通过存储过程将数据插入表中

谁能举个例子吗。我的存储过程有一些自动生成的值

CREATE PROCEDURE [dbo].[usp_employee_insert]
    @full_name varchar(75),@gender varchar(6), @department varchar(25), _
    @position varchar(50),@salary float
AS
BEGIN
    INSERT INTO employees (full_name,gender,department,position,salary)
    VALUES  (@full_name,@gender,@department,@position,@salary)
END

应该是这样的:

public class UspEmployeeInsert extends StoredProcedure {

    private final String NAME = "usp_employee_insert";

    public UspEmployeeInsert(DataSource dataSource) {

        setDataSource(dataSource);
        setSql(NAME);

        declareParameter(new SqlParameter("full_name", Types.VARCHAR));
        declareParameter(new SqlParameter("gender", Types.VARCHAR));
        declareParameter(new SqlParameter("department", Types.DATE));
        declareParameter(new SqlParameter("position", Types.VARCHAR));
        declareParameter(new SqlParameter("salary", Types.FLOAT));

        compile();
    }

    public void execute(
        String fullName,
        String gender,
        Date deparment,
        String position,
        Float salary){

        final Map<String, Object> parameters = new HashMap<>(5);
        parameters.put("full_name", fullName);
        parameters.put("gender", gender);
        parameters.put("department", deparment);
        parameters.put("position", position);
        parameters.put("salary", salary);

        execute(parameters);
    }
}

首先,您应该添加一个
EntityManager
来访问数据库:

@PersistenceContext
private EntityManager entityManager;
此外,您还应该向类中添加
storedProcedureRequesty
接口,这样您就可以使用多种方法与存储过程进行交互,例如
registerStoredProcedureParameter
setParameter
execute

假设您有一个具有存储过程中提到的属性的
Person
实体,您可以将此代码片段作为示例:

import javax.persistence.EntityManager;
import javax.persistence.ParameterMode;
import javax.persistence.PersistenceContext;
import javax.persistence.StoredProcedureQuery;

import org.springframework.stereotype.Service;

import your.entity.package.Person;

@Service
public class StoredProcedureManagement {

    @PersistenceContext
    private EntityManager entityManager;

    public void callStoredProcedure(Person person) {

        // invoking your sp
        StoredProcedureQuery spInsert = entityManager.createStoredProcedureQuery("dbo.usp_employee_insert");

        // registring sp parameters
        spInsert.registerStoredProcedureParameter("full_name", String.class, ParameterMode.IN);
        spInsert.registerStoredProcedureParameter("gender", String.class, ParameterMode.IN);
        spInsert.registerStoredProcedureParameter("department", String.class, ParameterMode.IN);
        spInsert.registerStoredProcedureParameter("position", String.class, ParameterMode.IN);
        spInsert.registerStoredProcedureParameter("salary", Float.class, ParameterMode.IN);

        // setting the parameters
        spInsert.setParameter("full_name", person.getFullName());
        spInsert.setParameter("gender", person.getGender());
        spInsert.setParameter("department", person.getDepartment());
        spInsert.setParameter("position", person.getPosition());
        spInsert.setParameter("salary", person.getSalary());

        // executing the sp
        spInsert.execute();

    }
}
import javax.persistence.EntityManager;
import javax.persistence.ParameterMode;
import javax.persistence.PersistenceContext;
import javax.persistence.StoredProcedureQuery;

import org.springframework.stereotype.Service;

import your.entity.package.Person;

@Service
public class StoredProcedureManagement {

    @PersistenceContext
    private EntityManager entityManager;

    public void callStoredProcedure(Person person) {

        // invoking your sp
        StoredProcedureQuery spInsert = entityManager.createStoredProcedureQuery("dbo.usp_employee_insert");

        // registring sp parameters
        spInsert.registerStoredProcedureParameter("full_name", String.class, ParameterMode.IN);
        spInsert.registerStoredProcedureParameter("gender", String.class, ParameterMode.IN);
        spInsert.registerStoredProcedureParameter("department", String.class, ParameterMode.IN);
        spInsert.registerStoredProcedureParameter("position", String.class, ParameterMode.IN);
        spInsert.registerStoredProcedureParameter("salary", Float.class, ParameterMode.IN);

        // setting the parameters
        spInsert.setParameter("full_name", person.getFullName());
        spInsert.setParameter("gender", person.getGender());
        spInsert.setParameter("department", person.getDepartment());
        spInsert.setParameter("position", person.getPosition());
        spInsert.setParameter("salary", person.getSalary());

        // executing the sp
        spInsert.execute();

    }
}