Apache Camel - 18 - JDBC组件

Apache Camel 学习 使用04 Apache Camel - 16 - Jetty组件 jetty组件提供基于HTTP的端点来消费和生成HTTP请求。 也就是说,Jetty组件的行为如同一个简单的Web服务器。 Jetty也可以用作HTTP客户端,这意味着您也可以将其与Camel一起用作生产者。 Jetty是基于流的,这意味着它接收到的输入被作为一个流提交给Camel。 这意味着您将只能读取一次流的内容。 Ap... 阅读详情

JDBC Component JDBC组件

代码Demo 样例,已经上传了,有兴趣的童鞋,可以下载下来跑跑....

Apache Camel JDBC组件 代码Demo 样例

Apache Camel相关代码已经上传GitHub,需要的自取:GitHub - Apache Camel 完整Demo
如果觉得还行,麻烦点个Star

 

The jdbc component enables you to access databases through JDBC, where SQL queries (SELECT) and operations (INSERT, UPDATE, etc) are sent in the message body.

jdbc组件使您能够通过JDBC访问数据库,在消息正文中发送SQL查询(SELECT)和操作(INSERT,UPDATE等)。

This component uses the standard JDBC API, unlike the SQL Component component, which uses spring-jdbc.

与使用spring-jdbc的SQL Component组件不同,此组件使用标准JDBC API。

This component can only be used to define producer endpoints, which means that you cannot use the JDBC component in a from() statement.

此组件只能用于定义生产者端点,这意味着您不能在from()语句中使用JDBC组件。

 

URI format URI格式

jdbc:dataSourceName[?options]

This component only supports producer endpoints.

这个组件只支持生产者端点。

You can append query options to the URI in the following format, ?option=value&option=value&...

您可以按照以下格式将查询选项追加到URI中:?option=value&option=value&...

 

Options 选项

Option

Default Value

Description

readSize

0

The default maximum number of rows that can be read by a polling query. The default value is 0.

轮询查询可以读取的默认最大行数。 默认值是0。

statement.<xxx>

null

Camel 2.1: Sets additional options on the java.sql.Statement that is used behind the scenes to execute the queries. For instance, statement.maxRows=10. For detailed documentation, see the java.sql.Statement javadoc documentation.

在后台使用的java.sql.Statement上设置附加选项来执行查询。 例如,statement.maxRows = 10。 有关详细的文档,请参阅java.sql.Statement javadoc文档。

useJDBC4ColumnNameAndLabelSemantics

true

Camel 2.2: Sets whether to use JDBC 4/3 column label/name semantics. You can use this option to turn it false in case you have issues with your JDBC driver to select data. This only applies when using SQL SELECT using aliases (e.g. SQL SELECT id as identifier, name as given_name from persons).

设置是否使用JDBC 4/3列标签/名称语义。 如果您在使用JDBC驱动程序选择数据时遇到问题,可以使用此选项将其设置为false。 这仅适用于使用SQL SELECT使用别名(例如,SQL SELECT id作为标识符,name作为given from persons)的情况。

resetAutoCommit

true

Camel 2.9: If true, Camel will set the autoCommit on the JDBC connection to be false, commit the change after executing the statement and reset the autoCommit flag of the connection at the end. If the JDBC connection does not support resetting the autoCommit flag, set this to false. 

如果为true,Camel会将JDBC连接上的autoCommit设置为false,执行语句后提交更改并在最后重置连接的autoCommit标志。 如果JDBC连接不支持重置autoCommit标志,请将其设置为false。

When used with XA transactions you most likely need to set it to false so that the transaction manager is in charge of committing this tx.

当与XA事务一起使用时,您很可能需要将其设置为false,以便事务管理器负责提交此tx。

allowNamedParameters

true

Camel 2.12: Whether to allow using named parameters in the queries.

是否允许在查询中使用命名参数。

prepareStatementStrategy

 

Camel 2.12: Allows to plugin to use a custom org.apache.camel.component.jdbc.JdbcPrepareStatementStrategy to control preparation of the query and prepared statement.

允许插件使用自定义的org.apache.camel.component.jdbc.JdbcPrepareStatementStrategy来控制查询和准备语句的准备。

useHeadersAsParameters

false

Camel 2.12: Set this option to true to use the prepareStatementStrategy with named parameters. This allows to define queries with named placeholders, and use headers with the dynamic values for the query placeholders.

将此选项设置为true以使用具有命名参数的prepareStatementStrategy。 这允许使用命名占位符来定义查询,并使用包含查询占位符的动态值的标题。

outputType

SelectList

Camel 2.12.1: outputType='SelectList', for consumer or producer, will output a List of Map. SelectOne will output single Java object in the following way:

输出类型='选择列表',为消费者或生产者,将输出一个地图列表。 SelectOne将以下列方式输出单个Java对象:

a) If the query has only single column, then that JDBC Column object is returned. (such as SELECT COUNT( * ) FROM PROJECT will return a Long object.

如果查询只有单列,则返回JDBC Column对象。 (如SELECT COUNT(*)FROM PROJECT将返回一个Long对象。

b) If the query has more than one column, then it will return a Map of that result.

如果查询有多个列,那么它将返回该结果的地图。

c) If the outputClass is set, then it will convert the query result into an Java bean object by calling all the setters that match the column names. It will assume your class has a default constructor to create instance with. From Camel 2.14 onwards then SelectList is also supported. 

如果outputClass被设置,那么它将通过调用与列名匹配的所有设置器将查询结果转换成Java bean对象。 它会假设你的类有一个默认的构造函数来创建实例。 从Camel 2.14开始,SelectList也被支持。

d) If the query resulted in more than one rows, it throws an non-unique result exception.

如果查询结果不止一行,则会抛出一个非唯一的结果异常。

Camel 2.14.0: New StreamList output type value that streams the result of the query using an Iterator<Map<String, Object>>, it can be used along with the Splitter EIP.

Camel 2.14.0:使用Iterator <Map <String,Object >>流式传输查询结果的新StreamList输出类型值,它可以与Splitter EIP一起使用。

outputClass

null

Camel 2.12.1: Specify the full package and class name to use as conversion when outputType=SelectOne. From Camel 2.14 onwards then SelectList is also supported.

当outputType = SelectOne时,指定完整的包和类名作为转换。

从Camel2.14开始,SelectList也被支持。

beanRowMapper

 

Camel 2.12.1: To use a custom org.apache.camel.component.jdbc.BeanRowMapper when using outputClass. The default implementation will lower case the row names and skip underscores, and dashes. For example "CUST_ID" is mapped as "custId".

Camel 2.12.1:在使用outputClass时使用自定义的org.apache.camel.component.jdbc.BeanRowMapper。 默认实现将小写行名称并跳过下划线和破折号。 例如“CUST_ID”被映射为“custId”。

useGetBytesForBlob

false

Camel 2.16: To read BLOB columns as bytes instead of string data. This may be needed for certain databases such as Oracle where you must read BLOB columns as bytes.
以字节读取BLOB列而不是字符串数据。 对于某些数据库(如Oracle),您可能需要这样做,您必须将BLOB列作为字节读取。

Result 结果

By default the result is returned in the OUT body as an ArrayList<HashMap<String, Object>>. 

默认情况下,结果作为ArrayList <HashMap <String,Object >>在OUT主体中返回。

The List object contains the list of rows and the Map objects contain each row with the String key as the column name. 

List对象包含行列表,Map对象包含每个以String键作为列名的行。

You can use the option outputType to control the result.

您可以使用选项outputType来控制结果。

Note: This component fetches ResultSetMetaData to be able to return the column name as the key in the Map.

注意:该组件获取ResultSetMetaData以便能够返回列名作为Map中的键。

 

Message Headers 消息头

Header

Description

CamelJdbcRowCount

If the query is a SELECT, query the row count is returned in this OUT header.

如果查询是SELECT,则查询在此OUT标题中返回的行数。

CamelJdbcUpdateCount

If the query is an UPDATE, query the update count is returned in this OUT header.

如果查询是UPDATE,则查询更新计数在此OUT标题中返回。

CamelGeneratedKeysRows

Camel 2.10: Rows that contains the generated keys.

包含生成的键的行。

CamelGeneratedKeysRowCount

Camel 2.10: The number of rows in the header that contains generated keys.

包含生成的键的标题中的行数。

CamelJdbcColumnNames

Camel 2.11.1: The column names from the ResultSet as a java.util.Set type.

ResultSet中的列名称为java.util.Set类型。

CamelJdbcParameters

Camel 2.12: A java.util.Map which has the headers to be used if useHeadersAsParametershas been enabled.
如果启用了useHeadersAsParameters,则具有要使用的标头的java.util.Map。

 

Generated keys 生成的主键

Available as of Camel 2.10 适用于Camel 2.10

If you insert data using SQL INSERT, then the RDBMS may support auto generated keys. 

如果使用SQL INSERT插入数据,则RDBMS可能支持自动生成的密钥。

You can instruct the JDBC producer to return the generated keys in headers.

您可以指示JDBC生产者在头中返回生成的主键。

To do that set the header CamelRetrieveGeneratedKeys=true. 

要做到这一点设置标题CamelRetrieveGeneratedKeys = true。

Then the generated keys will be provided as headers with the keys listed in the table above.

然后生成的主键将作为标题提供给上表中列出的主键。

You can see more details in this unit test.

你可以在这个单元测试中看到更多的细节。

Using generated keys does not work with together with named parameters.

使用生成的主键不能与命名参数一起使用。

 

代码Demo

mysql 数据库 我安装在虚拟机中,数据库里面大约有九十几万数据...

package com.camel.jdbc.server;

import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.impl.SimpleRegistry;
import org.apache.camel.model.ModelCamelContext;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class CamelJDBCServer {

	public static final Logger logger = Logger.getLogger(CamelJDBCServer.class);

	public static void main(String[] args) {

	final String url = "jdbc:mysql://192.168.137.150:3306/test1";

	BasicDataSource basicDataSource = new BasicDataSource();
	basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
	basicDataSource.setUsername("");
	basicDataSource.setPassword("");
	basicDataSource.setUrl(url);
	SimpleRegistry simpleregistry = new SimpleRegistry();
	simpleregistry.put("DataSource", basicDataSource);

	// 日志
	PropertyConfigurator.configure("./conf/log4j.properties");
	PropertyConfigurator.configureAndWatch("./conf/log4j.properties", 1000);

	try {

	ModelCamelContext camelContext = new DefaultCamelContext(simpleregistry);
	camelContext.start();

	camelContext.addRoutes(new RouteBuilder() {

	@Override
	public void configure() throws Exception {
			from("timer://queryAward?period=60s")
			.setBody(constant("select * from award where id > 99990 "))
			.to("jdbc:DataSource?outputType=SelectList").process(new Processor() {

	@Override
	public void process(Exchange exchange) throws Exception {

	System.out.println(exchange.toString());

	String str = exchange.getIn().getBody().toString();
	logger.info("str : " + str);

	Object obj = exchange.getIn().getBody();
	logger.info("obj : " + obj.getClass());
	logger.info("obj : " + obj);

	}
	}).to("log:JDBCRoutesTest?showExchangeId=true");
	}
	});

	// 没有具体业务意义的代码,只是为了保证主线程不退出
	synchronized (CamelJDBCServer.class) {
			CamelJDBCServer.class.wait();
	}

	} catch (Exception e) {
			logger.error(e.getMessage(), e);
	}

	}

}

JDBC组件没法使用 from端点,需要一个触发机制。

比如:定时器、或者http调用触发。

运行结果:

第二个Demo

换一种写法

通过下面这个Demo,脑洞发散一下,如果搭配使用jetty组件,接收外部参数进行查询。

处理类

package com.camel.jdbc.server.process;

import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.log4j.Logger;

public class CamelJDBCProcesser implements Processor {

        public static final Logger logger = Logger.getLogger(CamelJDBCProcesser.class);

        @Override
        public void process(Exchange exchange) throws Exception {
                String str = exchange.getIn().getBody().toString();
                logger.info("str : " + str);

        Object obj = exchange.getIn().getBody();
        logger.info("obj : " + obj.getClass());
        logger.info("obj : " + obj);
        }

}

route路由

package com.camel.jdbc.server.routes;

import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;

public class CamelJDBCRoute extends RouteBuilder {

        @Override
        public void configure() throws Exception {

        from("timer://queryAward?period=60s").process(new Processor() {

        @Override
        public void process(Exchange exchange) throws Exception {

        Message message = exchange.getOut();
        message.setBody(
                "insert into award(nickname,account,password,message, remark) 
                values ('ooo','vvv','bbb','234567','0000');");
        }
        }).to("jdbc:DataSource").to("log:JDBCRoutesTest?showExchangeId=true");

        }

}

main方法

package com.camel.jdbc.server;

import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.impl.SimpleRegistry;
import org.apache.camel.model.ModelCamelContext;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import com.camel.jdbc.server.routes.CamelJDBCRoute;

public class CamelJDBCServer {

	public static final Logger logger = Logger.getLogger(CamelJDBCServer.class);

	public static void main(String[] args) {

	final String url = "jdbc:mysql://192.168.137.150:3306/test1";

	BasicDataSource basicDataSource = new BasicDataSource();
	basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
	basicDataSource.setUsername("");
	basicDataSource.setPassword("");
	basicDataSource.setUrl(url);
	SimpleRegistry simpleregistry = new SimpleRegistry();
	simpleregistry.put("DataSource", basicDataSource);

	// 日志
	PropertyConfigurator.configure("./conf/log4j.properties");
	PropertyConfigurator.configureAndWatch("./conf/log4j.properties", 1000);

	try {

	ModelCamelContext camelContext = new DefaultCamelContext(simpleregistry);
	camelContext.start();

	camelContext.addRoutes(new CamelJDBCRoute());

	// 没有具体业务意义的代码,只是为了保证主线程不退出
	synchronized (CamelJDBCServer.class) {
			CamelJDBCServer.class.wait();
	}

	} catch (Exception e) {
			logger.error(e.getMessage(), e);
	}

	}

}

运行结果:

OK....

MyBatis流式查询实战:百万数据导出如何避免OOM内存溢出 最近在排查一个线上服务的内存溢出问题时,发现一个典型的“性能陷阱”:一个看似简单的全量数据导出功能,在数据量增长到百万级别后,服务器内存直接被“打满”,导致服务频繁重启。问题的根源,正是开发者在处理大数据量查询时,习惯性地使用了 List<T> 来接收数据库结果集。本文将深入剖析这种做法的风险,并手把手教你使用 MyBatis 的 流式查询(Streaming Query) 来优雅地解决这个问题,让你告别 OOM(OutOfMemoryError)的困扰。 本文适合所有使用 MyBatis 进行 阅读详情

相关推荐

MyBatis核心原理与Spring Boot集成实战:从SQL映射到动态SQL

在Java后端开发中,数据持久化是构建稳定应用的核心基础。从基础的JDBC到全自动ORM框架,技术演进始终围绕如何平衡开发效率与执行控制力。MyBatis作为一款半自动的持久层框架,其核心原理在于将SQL控制权交还开发者,同时通过智能的结果集映射消除JDBC的模板代码。这一设计带来了显著的技术价值:开发者可以编写和优化原生SQL,充分利用数据库特性,并借助动态SQL能力安全、灵活地构建复杂查询条件。在互联网、金融等对数据库性能有严苛要求的应用场景中,这种“SQL-Mapping”模式成为事实标准。本文通过S

weixin_30781433的博客 479

camel jdbc 执行SQL语句

camel jdbc

萌级小菜鸟的博客 2420

db2jcc.jar升级到db2jcc4.jar出现的问题

db2jcc.jar升级到db2jcc4.jar发现getColumnName()的含义发生了变更,从而出现了bug

甘蓝的专栏 892

camel的jdbc组件,个人使用不当,导致不释放连接数

造成问题原因:使用开源camel的jdbc组件,传创建好datasource对象,给camel的job执行,发现camel执行完,数据库连接数仍然不释放,造成连接数猛增。 排查解决方法: 1.camel不会把datasource进行关闭,需要在创建datasource对象,增加这两个参数: datasource.setMaxIdle(0); datasource.setTimeBetweenEvictionRunsMillis(60*1000); 2.额外使用...

hhj724的专栏 709

Spring Boot+MyBatis+MySQL实战:学生信息管理系统开发全流程

Java Web开发中,分层架构与数据库交互是核心基础。通过Spring Boot整合MyBatis操作MySQL,可以快速构建稳定、可维护的业务系统。本文从数据库表设计、连接池配置到Service层事务处理,系统讲解学生信息管理系统中的增删改查、分页搜索与登录拦截等经典功能,并深入剖析SQL注入防护、连接池泄漏等高频工程问题。无论是课程设计还是企业内部工具,掌握这套技术栈都能让你从零搭建一个真正可用的Web应用,同时夯实Java面试中常考的事务、预编译与内嵌容器等底层原理。

weixin_34178244的博客 413

ApacheCamel-JDBC

ApacheCamel-JDBC Apache Camel JDBC组件 代码样例Demo

Camel in Action组件大全:File、JMS、JDBC、Mail、Netty等9大组件配置清单与避坑指南

Camel in Action(第2版)是 Apache Camel 经典著作的官方配套源码项目,其第6章集中演示了 9 大核心组件的实战配置:File、FTP、JMS、JDBC、JPA、Mail、Netty、SEDA、Scheduler/Quartz。本文把书中 10 个示例模块浓缩成一份配置清单 + 避坑指南,新手照着就能快速上手,避免踩书中没细说的常见坑。 ## 📋 9大Camel组件配

gitblog_00340的博客 453

Dify 1.0+内网部署全攻略:模型插件离线安装与信创环境适配

本文详细介绍了Dify 1.0+版本在内网环境中的部署全攻略,重点解析了模型工具插件的离线安装方法与信创环境适配技巧。通过实战经验分享,帮助企业在严格的内网隔离条件下高效部署AI平台,解决插件依赖和安装难题,提升大语言模型的应用效率。

weixin_29224529的博客 274

终极实战指南:Apache Camel企业集成模式深度解析

在当今微服务架构和分布式系统盛行的时代,企业面临着前所未有的集成挑战——不同系统间的数据孤岛、协议异构、异步通信复杂性等问题层出不穷。Apache Camel作为业界领先的企业集成框架,通过其优雅的DSL和丰富的组件库,为这些棘手问题提供了完美的解决方案。 ## 🎯 核心价值:为什么选择Camel进行企业集成? Apache Camel不是一个简单的库,而是一个完整的集成框架生态系统。它的核

gitblog_00604的博客 408

C语言手写HTTPD网站服务器

零基础手写C语言http网站服务器,快速入门C/C++后端开发、服务器开发。

程序员Rock的博客 1万+

MobaXterm SSH连接失败:深入解析密钥格式错误导致的Software caused connection abort

本文深入解析了MobaXterm SSH连接失败问题,特别是因密钥格式错误导致的'Software caused connection abort'错误。通过分析系统日志和密钥损坏原因,提供了重建SSH主机密钥的详细步骤,包括备份、生成新密钥及权限设置,帮助用户彻底解决连接中断问题。

weixin_29306011的博客 477

Cube Core JDBC 数据库驱动深度解析:连接池、数据源配置与版本演进

Cube Core 作为面向 AI、BI 与嵌入式分析的开源语义层,其 `@cubejs-backend/jdbc-driver` 包为无法使用专用原生驱动的数据库(如 MySQL、Athena、Spark SQL、Hive)提供了一条基于标准 JDBC 协议的通用接入通道。本文以该包的 [CHANGELOG.md](https://link.gitcode.com/i/c27ce98b89725

gitblog_00968的博客 743

# 执行 DISM 命令时出错 87 未在此上下文中识别出 restorehealth 选项。解决方法

# 执行 DISM 命令时出错 87 未在此上下文中识别出 restorehealth 选项。解决方法

段子手168的博客 1万+

MySQL\jdbc\mybatis\Restful

数值类型字符串类型日期时间类型。

m0_47518801的博客 190

智元机器人开源具身仿真框架 Genie Sim 入门教程

GenieSim是AgiBot推出的具身智能仿真框架,提供完整闭环开发管道,包括轨迹生成、模型训练和基准测试。框架支持Docker容器化部署,要求Ubuntu 22.04和NVIDIA硬件环境。主要功能涵盖: 支持12种基准测试任务 提供ADER评估框架 集成UniVLA/RDT等基线模型 支持PICO/键盘遥操作 具备轨迹记录回放功能 提供完整API控制接口 开发者可通过Hugging Face获取场景资产,使用标准化ROS主题与仿真环境交互。框架特别优化了碰撞检测和抓取物理模拟,适用于从简单抓取到复杂操

2506_90492529的博客 2542

EtherCAT主站SOEM -- 0 -- 该EtherCAT主站SOEM专栏后续安排

SOEM(Simple Open EtherCAT Master)是一个开源的EtherCAT主站库,允许开发者构建自定义的EtherCAT主站应用程序。EtherCAT是一种实时以太网通信协议,广泛应用于工业自动化和机器控制领域。开源性质:SOEM是一个开源项目,这意味着开发者可以自由地查看、修改和分发代码。这使其成为工业自动化领域的一个强大工具,可以根据具体需求进行定制。EtherCAT主站实现:SOEM库提供了一个完整的EtherCAT主站实现,允许主站与多个EtherCAT从站设备进行通信。

常驻客栈的博客--嵌入式EtherCAT 6667

常见的配置

数据库的连接配置# 数据库配置。

qq_71356343的博客 232

《用 AI 赋能医药科研创新》目录(持续更新)

本专栏旨在指导医学科研和药物研发人员运用AI技术提升研究效率。内容包括:利用AI分析文献、识别研究热点、自动生成研究草稿;在新药研发中,通过AI优化临床方案设计、受试者筛选等环节;介绍AI理论基础如大语言模型、提示词工程学及智能体技术发展历程。专栏采用5000-9000字的长文形式,系统讲解AI在医药研发各环节的应用方法,帮助研究者缩短周期、降低成本,推动医药研发进入智能化新阶段。

MD Code 501

企业财务与薪资管理系统技术解析与实现

企业财务管理系统与薪资管理系统是企业信息化建设中的核心模块,涉及复杂的业务规则与数据处理。基于SpringBoot和Vue的技术栈组合,能够有效实现高并发、高可靠性的企业级应用。系统设计需重点关注事务管理、审计日志和性能优化,确保财务数据的准确性和安全性。薪资计算引擎需要支持多规则组合和地区差异化政策,而财务模块则需满足凭证管理、报表生成等核心需求。通过合理的技术选型和架构设计,可以显著提升企业财务与薪资管理的效率和合规性,解决传统Excel操作带来的效率低下和数据风险问题。

weixin_34301132的博客 394

非结构化数据在大数据湖中的应用实践

想象一下,你正在整理一个杂乱的书房。有些书整整齐齐地放在书架上,每本书都有明确的标题、作者和出版日期——这些就是结构化数据,它们像数据库中的表格,有固定的格式和字段。但书房里还有更多东西:散落的照片、手写的笔记、录音带、视频光盘、甚至还有画作。这些物品没有固定的格式,每件都独一无二——这就是非结构化数据。在技术术语中,非结构化数据是指没有预定义数据模型或组织形式的信息。文本文档(Word、PDF、TXT)电子邮件和社交媒体内容图像和照片(JPG、PNG)音频文件(MP3、WAV)

软件工程实践的博客 361

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring: MyBatis操作数据库1

在创建出来的SpringBoot⼯程中,在src下的test⽬录下,已经⾃动帮我们创建好了测试类 ,我们可以直接使⽤这个测试类来进⾏测试.我们在上⾯查询时发现, 有⼏个字段是没有赋值的, 只有Java对象属性和数据库字段⼀模⼀样时, 才会进⾏赋值,接下来我们多查询⼀些数据。如果使⽤ MySQL 是 5.x 之前的使⽤的是"com.mysql.jdbc.Driver",如果是⼤于 5.x 使⽤的。但是这样的话, 只能查找id=4的数据, 所以SQL语句中的id值不能写成固定数值,需要变为动态的值。

Y20051106的博客 127

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ADF sequence

概述     在Oracle相关应用中,经常使用Sequence作为主键,而在Oracle ADF应用中,应用Sequence自动产生主键也是非常方便的,文本中将介绍两种比较通用的使用方法。 实现 方法一     编写Java代码,即在Entity Object的实现类中重写create()方法,利用Oracle ADF提供的SequenceImpl帮助类实现Sequence值的生成,而在

freedom 399

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Spring Boot适配openEuler+openGauss:国产化迁移完整实践指南

在国产化替代进程中,后端应用从传统Linux与MySQL组合迁移到openEuler操作系统与openGauss关系型数据库,已成为政务、金融等领域的常态化需求。openEuler作为开源操作系统,与openGauss这一基于PostgreSQL内核增强的数据库共同构建了自主技术底座,而Spring Boot作为主流Java开发框架,其生态与二者间的适配路径值得开发者系统掌握。从技术原理看,openGauss兼容PostgreSQL协议,JDBC驱动与SQL语法存在差异,因此连接配置、自增策略、远程访问认证

weixin_33836874的博客 460

从零搭建生产级AI智能客服系统(二):项目初始化与基础环境搭建

上一章我们介绍了整个项目的背景、技术栈和整体规划。从本章开始,我们将正式进入代码开发阶段。Spring Boot后端项目初始化Vue3前端项目初始化集成豆包API,配置大模型Bean实现第一个最简单的聊天接口前后端联调,验证大模型调用正常所有代码都经过验证,直接复制就能跑通,全程没有任何坑。✅ Spring Boot 2.7.18后端项目初始化✅ 集成MyBatis-Plus和MySQL✅ 配置豆包API,创建三个大模型Bean✅ 实现第一个同步聊天接口。

hy9523的博客 294

JavaWeb知识点

1.Maven中的仓库用来存储什么的?Maven的仓库是用来存储和管理jar包的2.Maven中有哪几类仓库?查找依赖(jar)的顺序是什么样的?本地仓库(1)远程仓库(2)中央仓库(3)

ql200106的博客 304

springboot 整合 mybatis(AOP、@Transactional事务 )

springboot 整合 mybatis(AOP、@Transactional事务 )

pig_ning的博客 597
上一篇: Apache Camel - 17 - Timer组件
下一篇: WebService(9)_Apache CXF_CXFFrame_发布框架
Simba_cheng
博客等级 码龄11年 250粉丝 203原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值