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注释元素
注释元素 | 描述 | 默认 |
---|---|---|
| (必需)引用此存储过程查询的唯一名称。 | |
| (必需)存储过程的名称 | |
| (可选)指定是否应按名称调用存储过程。
|
|
| (可选)查询提示数组。 | |
| (可选)指定存储过程是否返回多个结果集。 这仅适用于支持存储过程中多个结果集的数据库。 |
|
| (可选)存储过程的参数数组 | |
| (可选)结果的类别 |
|
| (可选)名称 | |
| (可选)指定存储过程是否保留结果集 这仅适用于支持存储过程结果集的数据库。 |
|
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通过定义的输出的参数名获取值