记录学习
1,先写的小存储过程
CREATE DEFINER PROCEDURE `test`(IN ARG INT, OUT res INT)
BEGIN
SET res = ARG + 1;
END
in 为传参 out为返回值
mysql 调用方式为 call 过程名(param1,@res)。
2
@Autowired
@Qualifier("entityManagerFactoryIdp")
private EntityManager entityManager;
void syncIdpUser(){
StoredProcedureQuery query = entityManager.createStoredProcedureQuery("PersonToIdp"); //这个对应数据可存储过程的名字
//Declare the parameters in the same order
//这个对应参数有三种类型 in out 和inout
query.registerStoredProcedureParameter(1, String.class, ParameterMode.IN);
query.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);
query.registerStoredProcedureParameter(3, String.class, ParameterMode.IN);
query.registerStoredProcedureParameter(4, String.class, ParameterMode.IN);
query.registerStoredProcedureParameter(5, String.class, ParameterMode.IN);
query.registerStoredProcedureParameter(6, String.class, ParameterMode.IN);
query.registerStoredProcedureParameter(7, String.class, ParameterMode.OUT);
query.registerStoredProcedureParameter(8, String.class, ParameterMode.OUT);
//调用是传递的值
//Pass the parameter values
query.setParameter(1, "test2");
query.setParameter(2, "AIMI");
query.setParameter(3, "2");
query.setParameter(4, "2");
query.setParameter(5, "2");
query.setParameter(6, "2");
//Execute query
//query.execute();
//获取执行的返回结果
//Get output parameters
String outMessage = (String) query.getOutputParameterValue(7);
String outMessage2 = (String) query.getOutputParameterValue(8);
1因为这里我配置了多数据源,所以使用qualifier来指定获取那个数据源的实体bean
2获去返回结果的代码包含了,执行函数的方法,如果不注释上面的execut,会导致重复执行,引起连接池的报错。
这是不用修改数据库实体类的写法,配置相对简单,如果想使用注解实体类的方式可以搜一下,相关的还是蛮多的
如有错误欢迎指正。