1,先保证升级相关的类库
<org.springframework-version>4.1.7.RELEASE</org.springframework-version>
<spring.data.jpa.version>1.9.6.RELEASE</spring.data.jpa.version>
<org.hibernate-version>5.0.8.Final</org.hibernate-version>
2,create stored procedure
PROCEDURE xxSearch_member(xPara in nvarchar2, xcur_ret out nvarchar2) is
xkey1 varchar2(100);
xkey2 varchar2(100);
xname varchar2(100);
begin
xkey1 := xxXml_child_text(xPara,'key1');
xkey2 := xxXml_child_text(xPara,'key2');
xName := xxXml_child_text(xPara,'name');
xcur_ret :='<users><user><userId>1</userId><userName>Tom</userName></user><user><userId>2</userId><userName>Jos</userName></user></users>';
end xxSearch_member;
3,修改PO
@Entity
@Table(name="W_USER")
@NamedQuery(name="UserId.findAll", query="SELECT u FROM UserId u")
@NamedStoredProcedureQueries(value = {
@NamedStoredProcedureQuery(name="UserId.searchMember", procedureName = "TRAN_PROC.xxSearch_member",parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, type = String.class) })
,
@NamedStoredProcedureQuery(name = "UserId.testPro", procedureName = "TRAN_PROC.testPro", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, type = Integer.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, type = Integer.class)
})
})
public class UserId implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
<org.springframework-version>4.1.7.RELEASE</org.springframework-version>
<spring.data.jpa.version>1.9.6.RELEASE</spring.data.jpa.version>
<org.hibernate-version>5.0.8.Final</org.hibernate-version>
2,create stored procedure
PROCEDURE xxSearch_member(xPara in nvarchar2, xcur_ret out nvarchar2) is
xkey1 varchar2(100);
xkey2 varchar2(100);
xname varchar2(100);
begin
xkey1 := xxXml_child_text(xPara,'key1');
xkey2 := xxXml_child_text(xPara,'key2');
xName := xxXml_child_text(xPara,'name');
xcur_ret :='<users><user><userId>1</userId><userName>Tom</userName></user><user><userId>2</userId><userName>Jos</userName></user></users>';
end xxSearch_member;
3,修改PO
@Entity
@Table(name="W_USER")
@NamedQuery(name="UserId.findAll", query="SELECT u FROM UserId u")
@NamedStoredProcedureQueries(value = {
@NamedStoredProcedureQuery(name="UserId.searchMember", procedureName = "TRAN_PROC.xxSearch_member",parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, type = String.class) })
,
@NamedStoredProcedureQuery(name = "UserId.testPro", procedureName = "TRAN_PROC.testPro", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, type = Integer.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, type = Integer.class)
})
})
public class UserId implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
4,在repository里面增加
@Procedure(name="UserId.searchMember", procedureName = "TRAN_PROC.xxSearch_member")
String searchMember(String xPara);
@Procedure(name="UserId.testPro", procedureName = "TRAN_PROC.testPro")
Integer testPro(Integer x);
String searchMember(String xPara);
@Procedure(name="UserId.testPro", procedureName = "TRAN_PROC.testPro")
Integer testPro(Integer x);
5,service 增加方法,使用dom4j解析xml
public List<UserUI2> searchMember(String paras){
List<UserUI2> l=new ArrayList<UserUI2>();
String xml=this.repository.searchMember(paras);
Document document = null;
UserUI2 vo = null;
try {
document = DocumentHelper.parseText(xml);
Element root = document.getRootElement();//users
// iterate through child elements of root
for ( Iterator k = root.elementIterator(); k.hasNext(); ) {
Element element = (Element) k.next();//user
vo = new UserUI2();
for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
Node node = element.node(i);
if ( node instanceof Element ) {
Element e=( (Element) node );
if(e.getName().equals("userId"))
vo.setUserId(e.getTextTrim());
else if(e.getName().equals("userName")){
vo.setUserName(e.getTextTrim());
}
//this.logger.info("e.getText()="+e.getText()+" e.getStringValue()="+e.getStringValue()+" e.getName()="+e.getName());
}
}
l.add(vo);
}
} catch (Exception e) {
this.logger.error("Parse xml error:",e);
}
return l;
}
List<UserUI2> l=new ArrayList<UserUI2>();
String xml=this.repository.searchMember(paras);
Document document = null;
UserUI2 vo = null;
try {
document = DocumentHelper.parseText(xml);
Element root = document.getRootElement();//users
// iterate through child elements of root
for ( Iterator k = root.elementIterator(); k.hasNext(); ) {
Element element = (Element) k.next();//user
vo = new UserUI2();
for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
Node node = element.node(i);
if ( node instanceof Element ) {
Element e=( (Element) node );
if(e.getName().equals("userId"))
vo.setUserId(e.getTextTrim());
else if(e.getName().equals("userName")){
vo.setUserName(e.getTextTrim());
}
//this.logger.info("e.getText()="+e.getText()+" e.getStringValue()="+e.getStringValue()+" e.getName()="+e.getName());
}
}
l.add(vo);
}
} catch (Exception e) {
this.logger.error("Parse xml error:",e);
}
return l;
}
相关推荐
本篇文章主要介绍了Spring Data JPA调用存储过程实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
SpringData框架中使用的JPA工具类.模板代码,解决实体管理器工厂的浪费资源和耗时问题.第一次访问getEntityManager方法:经过静态代码块创建一个factory对象,再调用方法创建一个EntityManager对象,第二次方法...
springdatajpa让数据访问更轻便,直接封装数据访问的代码,简化代码编写.不需要写sql语句,也不需要配置维护关系的xml文件,直接调用底层方法就能实现数据库的增删改查,功能堪称完美
涉及到动态生成表结构,动态生成模型实体类动态查询表字段等等,经过调研发现hibernate在这方面是很方便的,调用内置API就能完成系列操作,下面贴出核心代码: /** * @author cjbi */ public class DynamicDdlTest...
在 调用jpa的语句上标识@Transactional 2 jpa自定义查询时 大概意思就是说 对于带有命名参数的查询,您需要使用提供方法参数的名称 使用@param查询方法参数 是java8以上的一个标志, 解决方法:在 自定义的查询...
在项目中添加所需的依赖,如Spring Web、Spring Data JPA等。 2、定义数据模型:设计学生信息的数据模型,包括学生姓名、年龄、性别、学号等字段,并使用Java类表示。 3、创建数据库表:根据数据模型创建相应的...
spring-data-jpa-transaction-test测试spring data jpa 事务如何调用
springboot-aop-annotation-redis-demo:源码主要用于学习SpringBoot + AOP + Redis控制Redis自动缓存和...查询,数据库使用MySQL 8.0.16,持久层使用Spring Data JPA,前端调用Swagger-UI 2.9.2提供API可视化调试操作
这是一个使用 Sring Boot、Spring Data-JPA 和 Spring Data-REST 的 HATEOAS 风格的 RESTful Web 服务的简单演示。 它包括一个简单的跨域请求过滤器 (CORS),以便可以从任何域访问它。 它包括一个使用 HTML5 和 ...
2. 创建项目:使用Spring Initializr创建一个新的Spring Boot项目,选择需要的依赖,如Spring Web、Spring Data JPA、Spring Security等。 3. 配置数据库连接:在项目的配置文件中配置数据库连接信息,包括数据库...
我们可以通过几种不同的方式调用Oracle存储过程。 使用 使用javax.persistence 。 我们在这种情况下使用了这种方法无论我们选择哪种方式,在使用spring-data时都应该设置一些关键方面/属性(尤其是当我们不让Spring...
Spring词典简单的 WebApp 字典,使用 spring boot、spring-data-jpa 和 hibernate (H2 db)。运行此应用程序的步骤在: config.MainConfiguration#dataSource 中配置数据库设置通过运行启动应用程序:应用程序类通过...
这是一个分布式的App服务端快速开发框架,用到的技术比较多,比如Spring Boot / Spring MVC / Spring Data Jpa,Gradle,Java8,Logback,Lombok,docker,redis等技术,不过有点挑战,要做好心里准备!!!
前端使用Vue3 + TypeScript,后端采用SpringCloud + SpringBoot + Spring Data JPA 。基于 Netty 使用 WebSocket 实现了正常的C/S通信模块。根据场景实现了:基础聊天、附近的人、个人信息编辑。并对各个模块拆分为...
直接调用原生Save方法会导致null属性覆盖到数据库,使用起来十分不方便。本文详细的介绍了如何解决这个问题,非常具有实用价值,需要的朋友可以参考下
13套Springboot项目源码目录如下: ...SpringBoot+SpringDataJpa+apache shiro+easyui+bootstrap开发的电影推酷网站(源码+SQL+测试数据) Springboot2+quartz实现定时器的增删改查 SpringBoot高仿小米电子商城项目
1. **创建 Spring Boot 项目**:使用 Spring Initializr 创建一个新的 Spring Boot 项目,并添加所需的依赖,如 Spring Web、Spring Data JPA 等。 2. **设计数据库结构**:设计适合校园疾病管理系统的数据库表结构...
它里面包含了Spring,SpringMVC,SpringData(事务),SrpingTest等等。 其中: Spring本身里面包含了两大核心IOC和AOP。IOC负责降低我们代码间的依赖关系,使我们的项目灵活度更高,可复用性更强。AOP是让方法间...
系统概述 该系统旨在帮助高校大...通过Spring Data JPA或MyBatis等ORM框架实现数据库操作,提高数据访问效率。 接口设计:定义清晰、规范的API接口,供前端调用。采用RESTful设计风格,保证接口的易用性和可扩展性。
服务器端Service和DAO编写整合springdatajpa 业务层接口 修改 Action 代码调用 Service 业务层实现类 在applicationContext添加一条 用来整合 Spring Data jpa <jpa:repositories base-package=...