rowmapper_Spring Integration Jdbc RowMapper示例

rowmapper

JDBC入站通道适配器的基本功能是执行SQL查询,提取数据并将以Message形式封装的结果集传递到本地通道。 您可以在JDBC入站通道适配器的示例中阅读有关此内容的更多信息。

有效负载的类型由行映射策略决定。 默认结果是产生类型为List的有效负载,其中每个元素都是列值的Map。 在上一篇有关Jdbc入站适配器的文章中,我们使用了默认的行映射策略,这就是为什么消息包含映射值列表作为有效负载的原因。 列值将作为Map返回,列名是键值。

在本文中,我们将看到如何自定义映射策略,以便有效负载是POJO的列表。 我们还将学习如何处理JDBC消息以及使用transactional元素。

在开始示例之前,首先将模块依赖项添加到pom.xml

依存关系

添加以下依赖项:

  1. spring-core
  2. spring-context
  3. spring-integration-core
  4. spring-integration-jdbc –返回此值以访问jdbc适配器
  5. mysql-connector-java –我们将使用MySQL作为数据库,因此您需要添加MySql驱动程序

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.javarticles.spring.integration.jms</groupId><artifactId>springintegrationjms</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework.integration</groupId><artifactId>spring-integration-core</artifactId><version>4.1.2.RELEASE</version></dependency><dependency><groupId>org.springframework.integration</groupId><artifactId>spring-integration-jdbc</artifactId><version>4.1.2.RELEASE</version><scope>compile</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.26</version></dependency>		</dependencies><properties><spring.version>4.1.4.RELEASE</spring.version></properties></project>

自定义行映射器

文章:

package com.javarticles.spring.integration.jdbc;public class Article {private int id;private String name;private String tags;private String category;private String author;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getTags() {return tags;}public void setTags(String tags) {this.tags = tags;}public String getCategory() {return category;}public void setCategory(String category) {this.category = category;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String toString() {StringBuilder sb = new StringBuilder("id: ");sb.append(id).append(", name: ").append(name).append(", tags: ").append(tags).append(", category: ").append(category).append(", author").append(author);return sb.toString();}
}

我们将通过实现org.springframework.jdbc.core.RowMapper接口并通过row-mapper属性引用此类来自定义有效负载对象。

ArticleRowMapper:

package com.javarticles.spring.integration.jdbc;import java.sql.ResultSet;
import java.sql.SQLException;import org.springframework.jdbc.core.RowMapper;public class ArticleRowMapper implements RowMapper<Article> {public Article mapRow(ResultSet rs, int rowNum) throws SQLException {String name = rs.getString("name");String category = rs.getString("category");String author = rs.getString("author");String tags = rs.getString("tags");int id = rs.getInt("id");Article article = new Article();article.setId(id);article.setCategory(category);article.setAuthor(author);article.setName(name);article.setTags(tags);return article;}
}

这是模式和一些测试数据:

db-schema.sql:

drop table if exists `articles`;
CREATE TABLE `articles` (`ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,`NAME` VARCHAR(100) NOT NULL,`CATEGORY` VARCHAR(50) NOT NULL,`TAGS` VARCHAR(100) NOT NULL,`AUTHOR` VARCHAR(50) NOT NULL,`SENT` INT,PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

db-test-data.sql:

insert into articles(id, name, category, tags, author, sent) values (1, "SpringIntegration Example", "spring", "spring,integration", "Joe", 0);
insert into articles(id, name, category, tags, author, sent) values (2, "NamedParameterJdbcTemplate Example", "spring", "spring,jdbcTemplate", "Sam", 0);
insert into articles(id, name, category, tags, author, sent) values (3, "MVC Example", "spring", "spring", "Joe", 0);

我们还将在这里介绍交易概念。 提取文章后,我们希望将“已发送”列更新为1,以便已阅读的文章不会在下一次轮询中显示。

我们将简单地将tansactional元素添加到poller元素。 这将导致更新和选择查询在同一事务中运行。 由于我们依赖事务,因此我们需要配置事务管理器。

我们引入的另一件事是服务适配器,以防您想处理JDBC消息。

JdbcMessageHandler:

package com.javarticles.spring.integration.jdbc;import java.util.List;public class JdbcMessageHandler {public void handleMessage(List<Article> articleList) {System.out.println("In JdbcMessageHandler:" + articleList);}
}

让我们看看我们的配置。

jdbcInboundApplicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration"xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:int-jdbc="http://www.springframework.org/schema/integration/jdbc"xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/integrationhttp://www.springframework.org/schema/integration/spring-integration.xsdhttp://www.springframework.org/schema/integration/jdbchttp://www.springframework.org/schema/integration/jdbc/spring-integration-jdbc.xsdhttp://www.springframework.org/schema/jdbchttp://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd"><int-jdbc:inbound-channel-adapter id="dataChannel"query="select * from articles where author='Joe' and sent = 0" update="update articles set sent = 1 where id in (:id)"data-source="dataSource" row-mapper="articleRowMapper"><int:poller fixed-rate="100"><int:transactional /></int:poller></int-jdbc:inbound-channel-adapter><int:service-activator input-channel="dataChannel" ref="jdbcMessageHandler" /><bean id="jdbcMessageHandler"class="com.javarticles.spring.integration.jdbc.JdbcMessageHandler" /><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><int:poller default="true" fixed-rate="100" /><int:channel id="dataChannel"><int:queue /></int:channel><jdbc:initialize-database data-source="dataSource"enabled="true"><jdbc:script location="classpath:db-schema.sql" /><jdbc:script location="classpath:db-test-data.sql" /></jdbc:initialize-database><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost/test" /><property name="username" value="root" /><property name="password" value="mnrpass" /></bean><bean id="articleRowMapper"class="com.javarticles.spring.integration.jdbc.ArticleRowMapper" />
</beans>

我们的主类看起来很简单,我们只需要加载上下文即可启动轮询。

SpringIntegrationJdbcInboundRowMapper示例:

package com.javarticles.spring.integration.jdbc;import java.io.IOException;
import java.sql.SQLException;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringIntegrationJdbcInboundRowMapperExample {public static void main(String[] args) throws InterruptedException, IOException, SQLException {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("jdbcInboundApplicationContext.xml");Thread.sleep(1000);context.close();}}

输出:

In JdbcMessageHandler:[id: 1, name: SpringIntegration Example, tags: spring,integration, category: spring, authorJoe, sent: 0, id: 3, name: MVC Example, tags: spring, category: spring, authorJoe, sent: 0]

下载源代码

这是有关带有RowMapper的Jdbc入站适配器的示例。 您可以在此处下载源代码: springintegrationJdbcRowMapper.zip

翻译自: https://www.javacodegeeks.com/2015/05/spring-integration-jdbc-rowmapper-example.html

rowmapper

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python做大数据的框架_Python+大数据计算平台,PyODPS架构手把手教你搭建

原文链接&#xff1a;http://click.aliyun.com/m/13965/ 在2016年10月的云栖社区在线培训上&#xff0c;来自阿里云大数据事业部的秦续业分享了《双剑合壁——Python和大数据计算平台的结合实战》。他主要介绍了数据分析和机器学习的方法、DataFrame整体架构以及基础API、前端、…

武魂觉醒s系列服务器,[多线]星河斗罗——新服开荒丨高程度剧情还原丨3D坐骑丨魂环丨武魂觉醒[1.12.2]...

[服务器介绍]星河斗罗 全新原创开荒斗罗大陆服务器前言&#xff1a;超高还原小说真实性&#xff0c;独特的武魂贴图&#xff0c;魂兽建模&#xff0c;坐骑建模&#xff0c;开放性冒险地图&#xff0c;让您更加体验斗罗大陆的真实性。进服送新手大礼包&#xff1a;装备&#xff…

C++ 的万能头文件,你知道多少?

点击蓝字关注我们C 中万能头文件 bits/stdc.h 的介绍很多小伙伴估计看有的代码会碰见没有多余的其它头文件比如 algorithm、cmath、iostream 而是用了一行 #include<bits/stdc.h> 这样的头文件并感到诧异&#xff0c;想这是什么。其实这是一个包含了 C 所有头文件的一个头…

pytorch dataset读取数据流程_高效 PyTorch :如何消除训练瓶颈

加入极市专业CV交流群&#xff0c;与 10000来自港科大、北大、清华、中科院、CMU、腾讯、百度 等名校名企视觉开发者互动交流&#xff01;同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总&#xff0c;行业技术交流。关注 极市平台 公众号 &#xff0c;回复 加群&…

APP 文档服务器,app服务器

app服务器 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。调用接口出错后&#xff0c;将不会返回结果数据。调用方可根据每个接口对…

webresource_Jersey WebResource –标头不附加

webresource昨天&#xff0c;在使用Jersey WebResource类进行HTTP调用时遇到了一个奇怪的问题&#xff1a;似乎我设置的标头在执行HTTP调用时被忽略了。 提前阅读。 我试图实现的目标是调用REST Api从我们的应用程序中获取一些数据。 为此&#xff0c;我使用了Jersey客户端 &a…

需求最高的8种编程语言

点击蓝字关注我们在过去的 8 个月时间里&#xff08;从 2021 年 10 月到 2022 年 6 月&#xff09;&#xff0c;DevJobsScanner 分析了超过 700 万份开发者工作需求&#xff0c;得出了目前行业需求量最高的 8 种编程语言。需要注意的是&#xff0c;在这 700 万份工作需求中&…

java面包屑实现_在Java中实现过滤器和面包店锁

java面包屑实现为了了解锁的工作原理&#xff0c;实现自定义锁是一种好方法。 这篇文章将展示如何在Java上实现Filter和Bakery锁&#xff08;自旋锁&#xff09;&#xff0c;并将它们的性能与Java的ReentrantLock进行比较。 过滤器锁和面包房锁满足互斥并且也是无饥饿算法&…

postman 怎么调试pos_SpringBoot|第十五章:基于Postman的RESTful接口测试

前言从上一章节开始&#xff0c;接下来的几个章节会讲解一些开发过程中配套工具的使用。俗话说的好&#xff0c;工欲善其事&#xff0c;必先利其器。对于开发人员而言&#xff0c;有个好用的工具&#xff0c;也是一件事半功倍的事&#xff0c;而且开发起来也很爽&#xff0c;效…

spring配置jndi_在Spring Framework中通过JNDI进行配置

spring配置jndi从某个时候开始&#xff0c;应用程序必须是可配置的。 从第一个版本0.9开始&#xff0c;Spring Framework就为该问题提供了一个很好的辅助工具&#xff0c;该类为PropertyPlaceholderConfigurer类&#xff0c;而从Spring Framework 3.1开始&#xff0c;为Propert…

这几个C语言关键字你真的得懂(深度解剖)

点击蓝字关注我们1、什么是语句&#xff0c;表达式&#xff1f; 在C语言中 &#xff0c;凡是以分号隔开的就是一条语句&#xff1a;printf("hello world\n");a 1 2; ; (空语句)什么是表达式呢&#xff1f;C语言中&#xff0c;用各种操作符把变量连起来&#xff0c;…

aws sqs_JMS和AWS SQS的更多高级内容

aws sqs如您所知&#xff0c; AWS中的SQS SQS代表“简单队列服务”。 最近&#xff0c;在使用它的同时&#xff0c;我发现了将其称为“简单”的原因之一。 在之前的两篇文章&#xff08; 此处和此处 &#xff09;中&#xff0c;我展示了结合Spring Framework将SQS用作JMS队列提…

python 直方图每个bin中的值_【Python数据分析】四级成绩分布 -matplotlib,xlrd 应用...

标签&#xff1a; 最近获得了一些四级成绩数据&#xff0c;大概500多个&#xff0c;于是突发奇想是否能够看看这些成绩数据是否满足所谓的正态分布呢&#xff1f;说干就干&#xff0c;于是有了这篇文章。 文章顺带介绍了xlrd模块的一些用法和matplotlib画自定义数据的条形图和随…

adf开发_了解ADF生命周期中的ADF绑定

adf开发在这篇文章中&#xff0c;我将重点介绍ADF绑定层&#xff0c;并探讨当最初从浏览器请求带有一些数据的ADF页面时它如何工作。 Oracle ADF提供了自己的JSF生命周期扩展版。 实际上&#xff0c;ADF扩展了标准的JSF生命周期实现类&#xff0c;并提供了ADF阶段侦听器&#…

C语言实现计算器

点击蓝字关注我们1、实现逻辑首先创建菜单(menu)&#xff0c;把我们需要实现的功能打印到运行栏屏幕上。实现加法计算实现减法计算实现除法计算实现乘法计算退出计算器当然以上都是属于最基本的计算&#xff0c;你当然还可以实现一些其它计算。例如&#xff1a;位运算(按位与、…

python怎么创建txt文件啊_python根据txt文本批量创建文件夹

前言 前言&#xff1a;想写这个代码的原因是因为实习的时候需要根据表格名创建对应的文件夹&#xff0c;如果只是很少个数文件夹的话&#xff0c;ctrlshiftn还可以接受吧&#xff0c;可是一次就要创建几百个文件夹&#xff0c;这就有点方方了。所以我写了一些代码解决实际的问题…

jpa的查询api_为JPA的本机查询API键入安全查询

jpa的查询api当您使用JPA时-有时-JPQL不能解决问题&#xff0c;您将不得不使用本机SQL。 从一开始&#xff0c;像Hibernate这样的ORM就为这些情况保留了开放的“后门”&#xff0c;并为Spring的JdbcTemplate &#xff0c; Apache DbUtils或jOOQ提供了类似的API&#xff0c;用于…

十道题带你手撕二叉树

点击蓝字关注我们1、单值二叉树题目&#xff1a;思路一&#xff1a;&#xff08;遍历的方法&#xff09;将根节点的值与二叉树中的每一个节点存储的val值进行比较&#xff0c;如果不同就返回false&#xff0c;如果全部相同&#xff0c;就返回true。代码&#xff1a;bool _isUni…

傅里叶变换及其应用 pdf_级数的欧拉变换及其应用

前言在学习级数的过程中,读到欧拉变换,觉得非常巧妙,而且在之后发散级数的学习中作者曾提出原级数在发散的情况下欧拉变换后的级数仍有可能收敛(例如1-11-11-...,当然这是Cesaro和意义下的结果或是解析延拓意义下的结果,其级数本身就是发散级数,这是毋庸置疑的,此级数的求和前提…

jpa 参数绑定布尔类型_使用Hibernate JPA的自定义布尔用户类型

jpa 参数绑定布尔类型ANSI SQL 1999标准引入了BOOLEAN数据类型&#xff08;尽管遗憾的是仅作为可选功能&#xff09;。 但是到目前为止&#xff0c;大多数主要的数据库系统仍未实现它。 结果&#xff0c;布尔列以各种方式实现。 例如&#xff0c;包含“ Y”或“ N”的CHAR列&am…