Spring Data JPA存储过程的使用

我们在数据库中进行复杂的操作时会用到存储过程,在数据库中存储过程是可被外部挪用的一种数据对象,可以用来封装复杂的sql逻辑,那么我们在Spring Data JPA中是若何挪用存储过程的呢?这就需要我们今天要讲的@Procedure注解了。

东西/原料

  • IntelliJ IDEA
  • mysql

方式/步调

  1. 1

    起首我们来看一下@Procedure注解的源码,经由过程源码可以进修JPA对存储过程的撑持。下图中value暗示数据库里面存储过程的名称,procedureName也是数据库里面存储过程的名称。

  2. 2

    接下来我们在数据库中建立一个存储过程,这个存储过程有两个参数,别离是输入和输出。

    CREATE DEFINER=`root`@`localhost` PROCEDURE `pluslinout`(IN arg int, OUT res int)

    BEGIN

    SELECT(arg + 10) into res;

    END


    我们还可以建立有一个只有输入的存储过程,如下所示:

    CREATE DEFINER=`root`@`localhost` PROCEDURE `pluslin`(IN arg int)

    BEGIN

    SELECT(arg + 10) into arg;

    END

  3. 3

    存储过程的挪用,在UserRepository中,利用@Procedure(name="pluslin")和@Procedure(name="pluslinout")去挪用存储过程。

  4. 4

    在User实体类中存储过程需要利用@NamedStoredProcedureQueries注解,将存储过程绑心猿意马到JPA的数据库表中,procedureName是存储过程的名字,name是JPA中存储过程的名字,写当作一致即可。@StoredProcedureParameter注解指心猿意马存储过程中利用的IN/OUT参数。

    @NamedStoredProcedureQueries({
           @NamedStoredProcedureQuery(name = "pluslin", procedureName = "pluslin", parameters = {
                   @StoredProcedureParameter(mode = ParameterMode.IN, name = "arg", type = Integer.class) }),
           @NamedStoredProcedureQuery(name = "pluslinout", procedureName = "pluslinout", parameters = {
                   @StoredProcedureParameter(mode = ParameterMode.IN, name = "arg", type = Integer.class),
                   @StoredProcedureParameter(mode = ParameterMode.OUT, name = "res", type = Integer.class) }) })

  5. 5

    最后在单位测试中测试这两个挪用存储过程的方式,测试的方式如下图所示,测试的成果不再展示了,可以自行操练。

注重事项

  • 注重实体类中需要指心猿意马存储过程到数据库的绑心猿意马关系。
  • 发表于 2019-07-02 17:02
  • 阅读 ( 736 )
  • 分类:其他类型

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
admin
admin

0 篇文章

作家榜 »

  1. xiaonan123 189 文章
  2. 汤依妹儿 97 文章
  3. luogf229 46 文章
  4. jy02406749 45 文章
  5. 小凡 34 文章
  6. Daisy萌 32 文章
  7. 我的QQ3117863681 24 文章
  8. 华志健 23 文章

推荐文章

联系我们:uytrv@hotmail.com 问答工具