当前位置:首页 » 服务存储 » jpa存储过程
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

jpa存储过程

发布时间: 2022-02-28 04:48:11

‘壹’ spring jpa 是怎么自动实现的

如果我们想拓展spring data jpa的CrudRepository或PagingAndSortingRepository,加入我们自己的database操作。分3个级别的拓展:

1、继承CrudRepository或PagingAndSortingRepository,在继承的就扣定义findBy**类似的方法。这种方式只能做到最简单的拓展,毕竟一个方法名能表达的意思有限,(就好比我们说一句话能表达的意思也很有限)。

2、使用@Query注解继承接口里面的方法,定义方法要执行的sql,注意方法的每个参数对应sql里的“1?”、“2?”、……参数。这种方法比上一种方法能完成更多的拓展,可以连表,定义子查询等,但是还是只能执行一个sql语句。

3、使用@NoRepositoryBean,定义非仓库bean:

[java] view plain
@NoRepositoryBean
interface BaseRepository<T> extends CrudRepository<T, Long> {

long customMethod();
}

实现上面的接口里定义的方法
[java] view plain
/**
* @author Oliver Gierke
* @soundtrack Elen - Nobody Else (Elen)
*/
class ExtendedJpaRepository<T> extends SimpleJpaRepository<T, Long> implements BaseRepository<T> {

/**
* Creates a new {@link ExtendedJpaRepository} for the given {@link JpaEntityInformation} and {@link EntityManager}.
*
* @param entityInformation must not be {@literal null}.
* @param entityManager must not be {@literal null}.
*/
public ExtendedJpaRepository(JpaEntityInformation<T, ?> entityInformation, EntityManager entityManager) {
super(entityInformation, entityManager);
}

/*
* (non-Javadoc)
* @see example.springdata.jpa.customall.BaseRepository#customMethod()
*/
@Override
public long customMethod() {
//do some database operation
return 0;
}
}
最后定义我们的仓库bean接口,让这个接口继承我们新的仓库接口而不是CrudRepository或PagingAndSortingRepository
[java] view plain
public interface UserRepository extends BaseRepository<User> {}
第三种方式的拓展就非常强大了,在一个方法里面可以想干什么就干什么了,执行多个语句,执行存储过程等。另外上述三种方式是可以结合在一起使用的,并不冲突。

‘贰’ JPA如果调用ORACLE中的函数,跟调用存储过程不一样哦,我把函数换成存储过程做了,以下是调用存储过程的

我觉得Oracle定义存储过程和函数主要是为了解决比较复杂的功能。是SQL语句的集合。

‘叁’ jpa访问数据库的存储过程怎么写

@Entity
@Table(name = "USER", schema = "MOBILE", uniqueConstraints = {
@UniqueConstraint(columnNames = { "LOGINID" }),
@UniqueConstraint(columnNames = { "USERACCOUNT" }) })
@NamedNativeQuery(name = "addUser", query = "{call addUser(:pPortalID,:ploginid,:ploginpasswd,:pSelfQuiz,:pSelfAnswer,:pUserEmail,:pUserAccount,:pUserPin)}", hints = { @QueryHint(name = "org.hibernate.callable", value = "true") }, resultClass = User.class)
public class User implements java.io.Serializable {

‘肆’ 如何在JPA的po类中调用存储过程和函数

在项目开发中用到了JPA规范,并在po类中使用了存储过程,这种资料在网上很容易找到,所以很快就跑通了,代码如下:

@Entity
@Table(name = "USER", schema = "MOBILE", uniqueConstraints = {
@UniqueConstraint(columnNames = { "LOGINID" }),
@UniqueConstraint(columnNames = { "USERACCOUNT" }) })
@NamedNativeQuery(name = "addUser", query = "{call addUser(:pPortalID,:ploginid,:ploginpasswd,:pSelfQuiz,:pSelfAnswer,:pUserEmail,:pUserAccount,:pUserPin)}", hints = { @QueryHint(name = "org.hibernate.callable", value = "true") }, resultClass = User.class)
public class User implements java.io.Serializable {

private static final long serialVersionUID = 5325039036880950119L;
private String userid;
private String loginid;
private String passwd;
//省略若干代码
}
但是后来却要求将addUser改成了函数,所以也要将po类中的调用修改。起初我以为很简单,数据库中的存储过程和函数差不多,不用修改直接调用即可。但是事实却不像我想得那样,错误百出,我上网查了很多资料,但是没有能给出答案的,后来才知道只要修改一个地方就可以获得想要的功能,郁闷!

下面是修改后的代码:

@Entity
@Table(name = "USER", schema = "MOBILE", uniqueConstraints = {
@UniqueConstraint(columnNames = { "LOGINID" }),
@UniqueConstraint(columnNames = { "USERACCOUNT" }) })
@NamedNativeQuery(name = "addUser", query = "{?=call addUser(:pPortalID,:ploginid,:ploginpasswd,:pSelfQuiz,:pSelfAnswer,:pUserEmail,:pUserAccount,:pUserPin)}", hints = { @QueryHint(name = "org.hibernate.callable", value = "true") }, resultClass = User.class)
public class User implements java.io.Serializable {

private static final long serialVersionUID = 5325039036880950119L;
private String userid;
private String loginid;
private String passwd;
//省略若干代码
}
请注意call addUser语句,存储过程是直接调用,而调用函数则是在前面加?=.这可是我几天几夜不休得出的结果,拿出来与大家分享,希望有需要的朋友不要走我的弯路!
转载

‘伍’ JPA怎么调用ORACLE的存储过程

虽然在数据库的控制台上运行SQL和调用存储过程的方法是一样的,但是某些JDBC驱动程序里是运行SQL和调用存储过程的实现方法是不一样的,所以如果要调用存储过程的话还是用CallableStatement比较好。

‘陆’ JPA执行存储过程需要在步骤上注明@Transactional吗

一般的增删改都要用@Transactional,只要你的方法里有这三类的操作就要加上这个注解,对于查就无所谓了

简单的理解就是需要修改数据库的操作你就加这个注解好了

‘柒’ java,怎么根据实体类和注解生成基础的增删改查的存储过程

  1. 使用Mybatis,这个是最简单的,配置完毕后直接在你的方法上面加Query注解

  2. 这个更简单,使用Jpa,一个叫JpaRepository的类你可以关注一下,继承了这个类以

    后甚至不用写方法和实现类,空着就行,这个类里面封装好了基本的crud,而如果想复杂

    点可以参考一下这个类的文档,方法名根据他们的规范来写,同样不需要实现类,再复杂

    点的就直接加上Query注解就行啦

‘捌’ 使用JPA里怎么配置使运行时输出SQL语句

MyBatis详解与配置MyBatis+Spring+MySqlMyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis只使用简单的XML和注解来配置和映射基本数据类型、Map接口和POJO到数据库记录。相对Hibernate和ApacheOJB等“一站式”ORM解决方案而言,Mybatis是一种“半自动化”的ORM实现。需要使用的Jar包:mybatis-3.0.2.jar(mybatis核心包)。mybatis-spring-1.0.0.jar(与Spring结合包)。MyBatis简介MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis只使用简单的XML和注解来配置和映射基本数据类型、Map接口和POJO到数据库记录。相对Hibernate和ApacheOJB等“一站式”ORM解决方案而言,Mybatis是一种“半自动化”的ORM实现。需要使用的Jar包:mybatis-3.0.2.jar(mybatis核心包)。mybatis-spring-1.0.0.jar(与Spring结合包)。

‘玖’ jpa调用mysql有多返回值存储过程详解

jpa调用mysql有多返回值存储过程详解
@Entity
@Table(name = "USER", schema = "MOBILE", uniqueConstraints = {
@UniqueConstraint(columnNames = { "LOGINID" }),
@UniqueConstraint(columnNames = { "USERACCOUNT" }) })
@NamedNativeQuery(name = "addUser", query = "{call addUser(:pPortalID,:ploginid,:ploginpasswd,:pSelfQuiz,:pSelfAnswer,:pUserEmail,:pUserAccount,:pUserPin)}", hints = { @QueryHint(name = "org.hibernate.callable", value = "true") }, resultClass = User.class)
public class User implements java.io.Serializable {

private static final long serialVersionUID = 5325039036880950119L;
private String userid;
private String loginid;
private String passwd;
//省略若干代码
}