MySql存储过程(Java 端 Hiberante 和 JPA 简单实现)

1.创建1个存储过程

# 用工具直接创建,创建好以后就是下列这样,编写sql即可,最后使用java调用
# 需要注意参数命名问题,否则无法识别会报错
CREATE DEFINER=`root`@`%` PROCEDURE `user`(IN `int_1` INT, OUT `num` INT)
BEGIN
	SET num = 1233;
	SELECT * FROM user_namex;
END

2.新建实体,首先把我们需要返回的结果集的实体字段定义好,然后加上@NamedStoredProcedureQueries 注解绑定存储过程

注意部分类型问题:java代码中Boolean布尔类型,存储过程类型为bit,java金额BigDecimal,存储过程money(自己记一下)

# 在需要返回的实体类上面使用下列注解,类型定义为本类类型即可

@Table(name = "user_namex")
@NamedStoredProcedureQueries({
       @NamedStoredProcedureQuery(
                name = "getUser",                   # 调用存储过程时的名字
                procedureName = "user",             # 存储过程在数据库里面的函数名字
                resultClasses = {UserNamex.class},  # 返回结果集绑定的实体名称
                parameters = {                      # 存储过程的参数数组
                        @StoredProcedureParameter(mode = ParameterMode.IN, name = "int_1", type = String.class),
                        @StoredProcedureParameter(mode = ParameterMode.OUT, name = "num", type = Integer.class)  
                }),
       @NamedStoredProcedureQuery(                  # 可写多个存储过程,使用“,”隔开;
                name = "getUser",
                procedureName = "user",
                resultClasses = {UserNamex.class},
                parameters = {
                        @StoredProcedureParameter(mode = ParameterMode.IN, name = "int_1", type = String.class),
                        @StoredProcedureParameter(mode = ParameterMode.OUT, name = "num", type = Integer.class)  // 记录满足条件的总条数
                }),
})
public class UserNamex implements Serializable {

    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    @Column(name = "user_id")
    private Integer id;

    @Column(name = "user_name")
    private String userName;

    @Column(name = "user_int")
    private Integer userInt;



@NamedStoredProcedureQuery元素简介:

 @NamedStoredProcedureQuery注释元素

注释元素描述默认

name

(必需)引用此存储过程查询的唯一名称。

 

procedureName

(必需)存储过程的名称

 

callByIndex

(可选)指定是否应按名称调用存储过程。

  • 如果为true,则必须按照与数据库上的过程相同的顺序定义StoredProcedureParameters

  • 如果为false,则数据库平台必须支持命名过程参数

false

hints

(可选)查询提示数组。

 

multipleResultSets

(可选)指定存储过程是否返回多个结果集。

这仅适用于支持存储过程中多个结果集的数据库。

false

parameters

(可选)存储过程的参数数组

 

resultClass

(可选)结果的类别

void.class

resultSetMapping

(可选)名称 SQLResultMapping

 

returnsResultSet

(可选)指定存储过程是否保留结果集

这仅适用于支持存储过程结果集的数据库。

false

3.获取结果集

@Autowired
    private EntityManager entityManager;

    public void ceshi3() {
        StoredProcedureQuery user = entityManager.createNamedStoredProcedureQuery("getUser")
                .setParameter("int_1", 999);
        System.out.println(user.getResultList());
        System.out.println(user.getOutputParameterValue("num"));
    }

entityManager.createNamedStoredProcedureQuery调用实体类创建的存储过程自己取的别名

setParameter给定义传入的参数赋值

getOutputParameterValue通过定义的输出的参数名获取值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值