wake-up-neo.com

wie rufe ich die gespeicherte Prozedur von MySQL im Spring Boot mit Ruhezustand auf?

Ich habe in MySQL gespeicherte Prozeduren e geschrieben. Ich benutze spring boot mit hibernate . Ich habe eine Login-Prozedur mit IN OUT Parametern. Ich möchte die Nachricht von meinem Anmeldevorgang an den Benutzer weiterleiten. Aber ich weiß nicht, wie man gespeicherte Prozeduren in Spring Boot aufruft. Mein Code ist unten ..

  1. Meine Login-Prozedur ist

    CREATE PROCEDURE login(IN  in_user_id    varchar(100),
                               IN  in_password   varchar(100),
                               OUT out_code      INT,
                               OUT out_message   varchar(100))
     BEGIN
        IF in_user_id IS NULL OR in_user_id = ''
         THEN
         SET out_code = 1;
         SET out_message = 'Please Enter Your First Name.';
       END IF;
     /*Logi Here*/
    
     END;
    
  2. Ich habe Entity-Klasse wie verwendet 

    @Entity
    @Table(name = "user")
     @NamedStoredProcedureQueries({
       @NamedStoredProcedureQuery(
       name = "do_login", 
       procedureName = "login", 
       resultClasses = { LoginModel.class },    
       parameters = { 
          @StoredProcedureParameter( name = " in_user_id",  type = String.class,  mode = ParameterMode.IN),
          @StoredProcedureParameter( name = "in_password",  type = String.class,  mode = ParameterMode.IN),
          @StoredProcedureParameter( name = "out_code",  type = Integer.class,  mode = ParameterMode.OUT), 
          @StoredProcedureParameter( name = "out_message",  type = String.class,  mode = ParameterMode.OUT)
    
         }),
    
     })
    
     public class LoginModel implements Serializable {
    
       @NotEmpty
       private String userid;
    
       @NotEmpty
       private String password;
    
      //Here is getter setter
      }
    
  3. In Mein Login-Controller möchte ich meine Prozedur aufrufen, damit ich meinen Benutzer an das Dashboard weiterleiten kann. Wenn der Benutzer eine falsche Benutzer-ID oder ein falsches Passwort eingibt, möchte ich eine Nachricht von der Prozedur anzeigen. Ich habe in meinem Login-Controller den folgenden Code verwendet

    @RequestMapping(value = "/login", method = RequestMethod.POST)
     public String doLogin(@ModelAttribute("webLoginForm") @Valid LoginModel registrationModel,
        BindingResult bindingResult, Model model, Errors error) {
         if(error.hasErrors()) {
             return "login";
         }
    
       // Here I want to check My Procedure result & redirect to welcome page
       //return "redirect:/welcome";
    
      return "login";
    }
    
  4. Ich habe Repository verwendet, aber hier wurde nichts geschrieben. Ich habe Repository wie unten verwendet ..

       public interface LoginRepository  extends CrudRepository<LoginModel, Integer>{
    
    
     }
    
3
Enamul Haque

Sie können eine gespeicherte Prozedur mit javax.persistence.StoredProcedureQuery aufrufen. Sie müssen nicht einmal etwas über Ihre Entität deklarieren.
Ich würde vorschlagen, die Prozeduraufruflogik in einen Dienst zu verschieben und dann die Dienstmethode von Ihrem Controller aus aufzurufen.

Zum Beispiel:

@Service
public class LoginServiceImpl implements LoginService {

    @PersistenceContext
    private EntityManager entityManager;

    public Boolean checkUsernameAndPassword(String username, String password) {

        //"login" this is the name of your procedure
        StoredProcedureQuery query = entityManager.createStoredProcedureQuery("login"); 

        //Declare the parameters in the same order
        query.registerStoredProcedureParameter(1, String.class, ParameterMode.IN);
        query.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);
        query.registerStoredProcedureParameter(3, Integer.class, ParameterMode.OUT);
        query.registerStoredProcedureParameter(4, String.class, ParameterMode.OUT);

        //Pass the parameter values
        query.setParameter(1, username);
        query.setParameter(2, password);

        //Execute query
        query.execute();

        //Get output parameters
        Integer outCode = (Integer) query.getOutputParameterValue(3);
        String outMessage = (String) query.getOutputParameterValue(4);

        return true; //enter your condition
    }
}

Anschließend können Sie diese Methode von Ihrem Controller aus aufrufen, nachdem Sie Ihre LoginService eingefügt haben.

7
lzagkaretos

Mit dieser Methode können Sie eine Prozedur von Spring aus aufrufen

import Java.util.HashMap;
import Java.util.Map;
import Oracle.jdbc.driver.OracleTypes;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;

public class MainApplicationMethod 

{

public static void main(String[] args) throws Exception {

    JdbcTemplate jdbcTemplate = new JdbcTemplate();

    SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName("procedureName");
    jdbcCall.addDeclaredParameter(new SqlParameter("parameter1", OracleTypes.VARCHAR));
    jdbcCall.addDeclaredParameter(new SqlOutParameter("outParam1",OracleTypes.VARCHAR));
    String value=null;
    Map<String, String> callParams = new HashMap<String, String>();
    callParams.put("parameter1", value);

    Map<String, Object> outputMap = jdbcCall.execute(callParams);
}

}

0
ashish singla