Springboot - Jpa运用MySQL的存储过程

一、什么是存储过程?

MySQL 5.0 版本开始支持存储过程。

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

  • 存储过程(procedure)类似于C语言中的函数
  • 用来执行管理任务或应用复杂的业务规则
  • 存储过程可以带参数,也可以返回结果
  • 存储过程可以包含数据操纵语句、变量、逻辑 控制语句等 

优点:

  1. 执行速度快:存储过程创建是就已经通过语法检查和性能优化,在执行时无需每次编译。存储在数据库服务器,性能高。
  2. 允许模块化设计:只需创建存储过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改 。
  3. 提高系统安全性:可将存储过程作为用户存取数据的管道。可以限制用户对数据表的存取权限,建立特定的存储过程供用户使用,完成对数据的访问。存储过程的定义文本可以被加密,使用户不能查看其内容。
  4. 减少网络流量:一个需要数百行Transact-SQL代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。

缺点:

  1. 存储过程会使得数据库占用的系统资源加大(cpu、memory),数据库毕竟主要用来做数据存取的,并不进行复杂的业务逻辑操作。
  2. 因为存储过程依旧是sql,所以没办法像编程语言那样写出复杂业务逻辑对应的存储过程。
  3. 存储过程不容易进行调试。
  4. 存储过程书写及维护难度都比较大。

 

二、在数据库中创建一个存储过程

创建存储过程:

DELIMITER $$
CREATE PROCEDURE encyclopedia.taxontop(IN top int)
BEGIN
	SELECT * FROM encyclopedia.taxon order by browse desc limit top;
END$$
DELIMITER ;

删除存储过程:

drop procedure  —— 删除存储过程
drop function  —— 删除存储函数

DROP {PROCEDURE|FUNCTION} Sp_name; 

相关语法学习:https://www.runoob.com/w3cnote/mysql-stored-procedure.html

在数据库中调用:

CALL encyclopedia.taxontop(20); 

 

三、spring data jpa调用存储过程

pom文件:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

实体类:

import java.io.Serializable;
import java.sql.Timestamp;

import javax.persistence.*;
import javax.validation.constraints.NotBlank;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.TypeDef;

import java.util.Date;
import java.util.List;

@Entity
@Table(name = "taxon", schema = "encyclopedia")
@NamedStoredProcedureQuery(name = "taxontop", procedureName = "taxontop",resultClasses = {Taxon.class},
	parameters = {
			@StoredProcedureParameter(mode = ParameterMode.IN, name = "top", type = Integer.class),
})
public class Taxon implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@Column(length=50)
	private String id;
	
	@Column(columnDefinition="varchar(1000)" )
	private String scientificname;
	
        public String getScientificname() {
		return scientificname;
	}

	public void setScientificname(String scientificname) {
		this.scientificname = scientificname;
	}

        ...

}

说明:

@Entity注解的作用是声明这是一个实体类

@Table注解,表名库名和表名

@NamedStoredProcedureQuery 申请一个存储过程

  1. name属性是给这个存储结构起一个名字
  2. procedureName属性是存储结构在数据库中的名字
  3. resultClasses属性声明这个存储过程返回的结果集的类型
  4. parameters属性声明这个存储结构的参数

 

测试:

@PersistenceContext
private EntityManager entityManager;

@RequestMapping(value="/demo", method = {RequestMethod.GET})
public String RestAPI(Model model,HttpServletRequest request) {
    	StoredProcedureQuery store = this.entityManager.createNamedStoredProcedureQuery("taxontop");
        store.setParameter("top", 20);
        List<Taxon> taxons =  store.getResultList();
        System.out.println(taxons.size());
        taxons.forEach((taxon) -> System.out.println(taxon.getScientificname()));
        
    	return "demo";
}
  • createNamedStoredProcedureQuery()方法创建一个查询对象
  • setParameter()来设置参数的值
  • getResultList()方法来获取结果集

效果图:

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Spring Boot与JPA整合,首先需要在pom.xml文件中添加相应的依赖。这些依赖包括Spring Data JPAMySQL驱动。例如,在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 接下来,你需要在Spring Boot应用程序的配置文件中添加数据库连接配置。你可以在application.properties或application.yml文件中添加以下配置: ```yaml spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name spring.datasource.username=your_username spring.datasource.password=your_password spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update ``` 在这个配置中,你需要将`your_database_name`替换为你的数据库名称,`your_username`替换为你的数据库用户名,`your_password`替换为你的数据库密码。 然后,你可以创建实体类和存储库接口。实体类用于映射数据库表,而存储库接口用于定义对数据库的操作。可以使用`@Entity`和`@Table`注解来标识实体类,使用`@Repository`或`@RepositoryRestResource`注解来标识存储库接口。 最后,你可以在Spring Boot应用程序的启动类上添加`@EnableJpaRepositories`注解,以启用JPA存储库。 以上是将Spring Boot与JPA整合的基本步骤。通过这种方式,你可以使用JPA进行数据库操作,并且Spring Boot会自动为你处理大部分的配置和实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [springboot整合jpa,步骤详细(图文结合讲解)](https://blog.csdn.net/weixin_43442127/article/details/119953836)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [springboot整合JPA](https://blog.csdn.net/weixin_44740485/article/details/124904112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值