spring 数据库

Chat2DB结合Spring AI MCP直连数据库 Chat2DB结合Spring AI MCP直连数据库的成功案例。 阅读详情

1.配置数据源

Spring提供了在Spring上下文中配置数据源Bean的多种方式,包括:

通过JDBC驱动程序定义的数据源

通过JNDI查找的数据源

连接池的数据源


1.1使用JNDI数据源

Spring通常部署在应用服务器中,这些服务器允许配置通过JNDI获取数据源。这种配置的好处在于数据源完全可以在应用程序

之外进行管理。

利用Spring我们可以像使用Spring Bean那样配置JNDI中数据源的引用并将其装配到需要的类中。位于jee命名空间下<jee:jndi-lookup>元素可以用于检索

JNDI中的任何对象,并将其用在Spring Bean中

<jee:jndi-lookup id="dataSource" jndi-name="/jdbc/MyDS" resource-ref="true" />

其中jndi-name属性用于指定JDNI中资源的名称。如果只设置了jndi-name属性,那么就会根据指定的名称查找数据源。

但是,如果应用程序运行在java应用程序服务器中,则需要将resouce-ref属性设置为true,这样给定的jndi-name将会自动添加

java:comp/env/前缀。


1.2使用数据源连接池

如果你不能从JNDI中查找数据源,那么下一个选择就是直接在Spring中配置数据源连接池。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >

<property name="driverClassName" value="org.hsqldb.jdbcDriver" />

<property name="url" value="jdbc:hsqldb:hsql://localhost/mydb" />

<property name="username" value="sa" />

<property name="password" value="sa" />

<property name="initialSize" value="5" />

<property name="maxActive" value="10" />

</bean>

1.3基于JDBC驱动的数据源

。。。

2.在Spring中集成Hibernate

复杂特性:

*延迟加载(Lazy loading):随着对象关系变得越来越复杂,有时候我们并不希望立即获取完成的对象间关系。

*优先抓取(Eager fetching): 这雨延迟加载是相对的。借助于优先抓取,我们可以使用一个查询获取完整的关联对象。

*级联(Cascading):有时,更该数据库中的表会同时修改其他表。

一些可用的框架提供了这样的服务,这些服务的通用名称是对象/关系映射(ORM)

Spring对ORM框架的支持提供了与这些框架的集成点以及一些附加的服务。如下所示

*Spring 声明式事务的集成支持

*透明的异常处理

*线程安全的、轻量级的模版类

 * DAO支持类

*资源管理


2.1声明Hibernate的Session Factory

Session接口提供了基本的数据访问功能,通过Hibernate的Session接口 应用程序的Dao能满足所有的持久化需求

获取Hibernate Session对象的标准方式是借助与Hibernate的SessionFactory接口的实现类。除了一些其他的任务,SessionFactory主要负责

Hibernate Session的打开、关闭与管理.


在Spring中 我们要通过Spring的某一个Hibernate Session工厂Bean来获取Hibernate的SessionFactory.我们可以在应用程序的上下文中,像配置

其他Bean那样来配置Hibernate Session工厂。

如果选择在XML中定义对象与数据库之间的映射,那么需要在Spring中配置LocalSessionFactoryBean

如果选择使用注解的方式来定义持久化,那需要使用AnnotationSessionFactoryBean来替代LocalSessionFactoryBean


2.3构造不依赖于Spring的Hibernate代码




使用@Autowired注解可以让Spring自动将一个SessionFactory注入到HibernateSpitterDao的sessionFactory属性中。

接下来哉currentSession()方法中,使用这个SessionFactory来获取当前事务的Session

另外还需要注意的是,我们在类上使用了@Repository注解,这会为我们做两件事情。首先@Repository是Spring的另一种构造注解,它能像其他注解一样被

spring的<context:component-scan>所扫描到,这样就不必明确声明HibernateSpitterDao bean了。

除了简化xml配置外 @Repository还有另外一个用处异常转化处理 需要在应用上下文中添加 PersistenceExceptionTranslationPostProcessor bean.


2.4 spring与jpa

Spring 中使用JPA的第一步是要在Spring 应用上下文中将实体管理器工厂


2.4.1配置实体管理器工厂

简单来说,基于JPA的应用程序使用EntityManagerFactory的实现类来获取EntityManager实例,jpa定义了两种类型的实体管理器

以上两种实体管理器实现了同一个EntityManager接口,关键的区别不在于EntityManager本身,而是在于EntityManager的创建和

管理方式,应用程序管理类型的EntityManager是由EntityManagerFactory创建的。EntityManagerFactory是通过PersistenceProvider的createEntityManagerFactory()方法得到的

容器管理的EntityManagerFactory是通过PersistenceProvider的createContainerEntityManagerFactory()方法获得的。


2.4.2 使用应用程序管理类型的JPA

对于应用程序管理类型的实体管理器工厂来说,他对大部分配置文件来源于一个名为persistence.xml的配置文件,这个文件必须位于类路径下的META-INF目录下

persistence.xml的作用在于定一个或多个持久化单元。持久化单元是同一个数据源下的一个或多个持久化类。



因为在persistence.xml文件中包含了大量的配置信息,所以在Spring中需要配置的就很少了。可以通过以下<bean>元素在Spring中声明LocalEntityManagerFactoryBean



赋给persistenceUnitName属性的值就是persistence.xml中持久化单元的名称

*创建应用程序管理类型的EntityManagerFactory都是在persistence.xml中进行的。而正是应用程序管理的本意。在应用程序管理的场景下

完全由应用程序本身来负责获取EntityManagerFactory,这是通过JPA实现的PersistenceProvider做到的。如果每次请求EntityManagerFactory时都要定义持久化单元。

代码将会迅速膨胀。通过将其配置在persistence.xml中,JPA就能在这个特定的位置查找持久化单元定义了。

但借助于Spring对JPA的支持。我们不再需要直接处理PersistenceProvider了。因此,再将配置信息放在persistence.xml中就显得不那么明智了,实际上这样阻止了我们在Spring中配置EntityManagerFactory(如果不是这样,则可以提供一个Spring配置的数据源)


*使用容器管理类型的JPA

容器管理的JPA采取了一种不同的方式。当容器在运行时,可以使用容器(在我们的场景下是Spring)提供的信息来生成EntityManagerFactory.

可以将数据源信息配置在Spring应用上下文中,而不是在persistence.xml中了。例如,如下的<bean>声明展现了在Spring中如何使用LocalContainerEntiryManagerFactoryBean

来配置容器管理类型的JPA



这里我们使用Spring 配置的数据源来设置dataSource属性。任何javax.sql.DataSource的实现都可以。尽管数据源还可以在persistence.xml进行配置,但这个属性的数据源具有更高的优先级。

 jpaVendorAdapter属性用于指明所使用的是哪一个厂商的JPA实现。Spring提供了多个JPA厂商适配器




最有用的属性是database属性,设置数据库的类型


3.编写JPA的DAO

Spring对JPA集成提供了JpaTemplate模版以及对应的支持类JpaDaoSupport.但是为了实现更纯粹的JPA方式,基于模版的JPA已经被弃用。


不使用Spring的JPA DAO



jpaSpitterDao使用了EntityManager处理持久化。通过EntityManager Dao非常干净并且看起来就像没有使用Spring的DAO,但是它从哪里得到的EntityManager呢?

需要注意的是em属性上使用了@PersistentContext注解。简单来讲这个注解表明需要将一个EntityManger实例注入到em上。为了在Spring中实现EntityManager注入。

我们需要在Spring应用上下文中配置一个PersistenceAnnotationBeanPostProcessor

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

@Repository注解,它的作用与开发Hibernate上下文Session版本的DAO时是一致的。由于没有模版类来处理异常,所以我们需要为DAO添加@Repository注解

这样PersistenceExceptionTranslationPostProcessor就会知道要将这个Bean产生的异常转换成Spring的统一数据访问异常。

@Transactional表明这个DAO中的持久化方法是在事务上下文中执行的。


不管是JPA还是Hibernate,异常转换都不是强制要求的。省略PersistenceExceptionTranslationPostProcessor,原来的异常就会正常的处理。

运用Spring内存数据库(Embedded database)构造单元测试 在进行本地单元测试的时候,有时候需要对数据库进行操作,但数据库环境又很难维护,即使费老大力气完成了本地数据库数据的构造,由于一些其他的变动或者别人的改动也会导致testCase跑不通,这就造成了辛辛苦苦构造数据库写的testCase就一次有效,这对于之后的回归测试以及代码维护都是一个麻烦事,因此经研究和试用后发现运用Spring内存数据库(Embedded database)可以很方便的解决这种麻... 阅读详情

相关推荐

spring-jndi-lookup:如何使用Spring从JNDI查找数据源

春天jndi查找 如何使用Spring从JNDI查找数据源 Server.xml <资源名称=“ jdbc / javatechie”全局=“ jdbc / javatechie” auth =“容器” type =“ javax.sql.DataSource” driverClassName =“ com.mysql.jdbc.Driver” url =“ jdbc:mysql://本地主机:3306 / javatechie“用户名=” root“密码=”密码“ maxActive="100" maxIdle="20" minIdle="5" maxWait="10000"/> context.xml: 配置: <jee:jndi-lookup id =“ dataSource” jndi-name =“ jdbc / javatechie” Expected

spring中jee:jndi-lookup的使用

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation="http://www

tyt叮当tyt的专栏 1万+

Cursor+Playwright MCP实战:如何用自然语言一键生成UI自动化测试脚本

本文探讨了如何利用Cursor与Playwright MCP实现自然语言驱动的UI自动化测试脚本生成。通过智能IDE与浏览器自动化协议的结合,开发者可以高效创建稳定的测试脚本,显著提升测试效率与维护性。重点介绍了MCP架构的优势、项目结构最佳实践及团队协作规范,为自动化测试带来革命性改进。

k8l9m0n的博客 441

JNDI 之web项目数据源配置

JNDI 之web项目数据源配置 1.把数据源配置到Server下context.xml 文件中(也可以配置在web.xml中) <?xml version="1.0" encoding="UTF-8"?> <Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <Resource name="jdbc

china_shrimp的专栏 2422

NFT图片批量合成及稀有度计算工具

一、制作背景 -当前NFT作品制作的大多方式都是使用部件拼接的形式,然后从大量的可能性结果取优; 二、解决问题 拼接合成的组合数量十分巨大,手工合成费时费力; 合成中对各个部件的使用次数不容易控制,部位出现的概率对作品的稀有度及评分影响较大; 对于生成的作品各个部位的信息(包括来源和使用率)统计繁琐,不利于对作品的介绍中体现; 三、程序功能介绍 1、功能自定义部位稀有度批量合成NFT作品 步骤一:创建各个合成部件文件夹,将图片放到文件夹内 步骤二:软件上设置各个部件对于的图片文件夹及出现的概率 步骤二

Keeping111的博客 4638

Hand-Eye 标定误差分析:从理论到 C++ 实现

本文深入探讨了机器人手眼标定中的核心环节——误差分析。文章从AX=XB方程的理论残差出发,详细解析了旋转与平移误差的数学定义与物理意义,并提供了一个工业级的C++实现代码,用于计算重投影误差。通过误差分析,工程师可以量化标定精度,诊断问题根源,从而确保视觉引导机器人系统在实际应用中的可靠性与精确性。

c7d8e的博客 695

JNDI - Spring

JNDI - Spring Spring配置JNDI数据源 在Spring配置文件中配置JNDI数据源,需要使用到jndi-lookup元素,该元素定义在jee名称空间,因此需要首先引入名称空间 xmlns:jee="http://www.springframework.org/schema/jee" 在Spring中配置JNDI数据源和配置Bean是一样的道理,如: <jee:jndi-...

巅峰状态 1101

开关电源EMI优化秘籍:三明治绕法如何让你的产品通过认证测试

本文深入解析了开关电源EMI优化中的三明治绕法,详细阐述了其通过改变绕组排布来减小初次级寄生电容、降低共模噪声的核心机理。文章提供了从绕制结构选择、绝缘安规处理到实测验证的全流程实战指南,帮助工程师有效利用这一工艺,提升产品通过CCC、CE等EMI认证测试的成功率。

tcp8optimizer的博客 706

JNDI 的配置:

  这次整理了下以前开发时用的代码和资料,突然发现自己整理过JNDI的配置,意外的惊喜啊(因为这几天一直想用这个配置试试)!在applicationContext.xml(spring配置文件)文件中:  在web.xml文件中:       jdbc/wydb  javax.sql.DataSource  Container  Shareable 在(tomcat)sever

Ethan Woo 的博客 8968

【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍)

本专栏整理了《深度学习时间序列预测案例》,内包含了各种不同的基于深度学习模型的时间序列预测方法,例如LSTM、GRU、CNN(一维卷积、二维卷积)、LSTM-CNN、BiLSTM、Self-Attention、LSTM-Attention、Transformer等经典模型,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 4万+

【图论】系列(一)之图论的构成

图论是研究图的数学分支,本章介绍了图论的基本构成和概念

qq_30066733的博客 748

Chat2DB 实现:Spring AI MCP 直连数据库

Spring AI MCP 为模型上下文协议提供 Java 和 Spring 框架集成。它使 Spring AI 应用程序能够通过标准化的接口与不同的数据源和工具进行交互,支持同步和异步通信模式。Spring AI 应用程序:使用 Spring AI 框架构建想要通过 MCP 访问数据的生成式 AI 应用程序。Spring MCP 客户端:MCP 协议的 Spring AI 实现,与服务器保持 1:1 连接。MCP 服务器:轻量级程序,每个程序都通过标准化的模型上下文协议公开特定的功能。本地数据源。

GZM888888的博客 3824

MyBatis-Plus 实战:敏感字段自动加解密支持模糊查询

本文基于MyBatis-Plus框架提出了一种全链路敏感字段加密方案。通过自定义TypeHandler实现数据入库自动加密和查询自动解密,结合重写LambdaQueryWrapper处理查询条件加密,并适配多种查询方式。方案核心包括:1)AESUtil工具类提供加解密基础能力;2)EncryptTypeHandler实现字段类型转换;3)实体类通过注解配置加密字段。该方案在保证数据安全的同时,对业务代码侵入性小,支持姓名、手机号等敏感信息的全流程加密处理,满足系统开发的安全需求。

蔡定努 596

Spring加载database.properties文件的问题

Spring中database.properties文件中的数据库信息为什么要加jdbc.或者db.前缀才能成功? 未加jdbc或者db.前缀 database.properties文件 driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/S

weixin_43816266的博客 1522

R语言Dunnett’s检验实战:寻找差异组之间的效果

总结起来,本文以R语言为工具,演示了如何使用Dunnett’s检验来找出单因素方差分析中不同组之间的效果差异。在本篇文章中,我们将通过R语言实战演示如何使用Dunnett’s检验来寻找不同组之间的效果差异。在分析结果时,通常我们会关注具有显著差异的组别,并基于Dunnett’s检验结果进行进一步的解释和讨论。首先,我们需要准备一组数据,假设我们有一个实验,涉及到四个不同的处理组和一个对照组。当我们发现方差分析结果显示存在显著差异时,我们可以进一步进行Dunnett’s检验来确定具体哪些组之间存在差异。

CoderExtra的博客 1104

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring集成测试之嵌入式数据库解决方案:Zonky.io的embedded-database-spring-test

Spring集成测试之嵌入式数据库解决方案:Zonky.io的embedded-database-spring-test 项目介绍 embedded-database-spring-test 是一个专为Spring框架设计的库,用于在Spring驱动的集成测试中创建隔离的嵌入式数据库环境。它支持MySQL、PostgreSQL、MariaDB、MSSQL等多种数据库,并且集成了Testconta...

gitblog_00450的博客 1233

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

在Spring中的spring_config中配置数据库的常用两种方式

spring_config中配置数据库的两种方式: 1.直接配置数据库信息: 2.引入数据库配置文件信息,进行配置 1)数据库配置文件信息 db.properties文件内容: jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8 ...

u013131716的博客 816

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

推荐项目:`embedded-database-spring-test`

推荐项目:embedded-database-spring-test 项目简介 在软件开发中,尤其是进行Spring框架相关的项目时,快速、便捷的集成测试是必不可少的环节。embedded-database-spring-test项目就是这样一款工具,它提供了一种简单的方法,在单元测试和集成测试中使用嵌入式数据库,如H2, HSQLDB或Derby等,无需复杂的配置和外部依赖。 技术分析 集成S...

gitblog_00069的博客 494

Spring Boot 数据仓库与ETL工具集成

本文介绍了Spring Boot与数据仓库及ETL工具的集成方法。主要内容包括:1)数据仓库的定义与作用,列举了Apache Hive、HBase等常见数据仓库;2)ETL工具的定义与功能,介绍了Spark、Flink等主流工具;3)详细说明了Spring Boot集成Apache Hive的7个步骤,包括项目创建、依赖配置、实体类定义等,并提供了完整的代码示例。重点强调了数据仓库和ETL工具在企业数据分析中的重要性,以及Spring Boot简化集成过程的优势。

编程世界如山海,探索不止。 2万+

spring embedded database (spring 内存数据库)

Org.springframework.jdbc.datasource.embedded 包对嵌入式 Java 数据库引擎提供了支持。以本地方式提供支持的 HSQL、 H2 和Derby。详见官方文档。 http://static.springsource.org/spring-framework/docs/3.0.0.M4/reference/html/ch12s08.html 内建数据库的

gudong2945的专栏 3222

spring中使用内存数据库(Embedded database)

内存数据库(Embedded database或in-momery database)具有配置简单、启动速度快、尤其是其可测试性等优点,使其成为开发过程中非常有用的轻量级数据库。在spring中支持HSQL、H2和Derby三种数据库。 下面看一下具体使用方法: 1.需要在applicationContext.xml中添加如下: Xml代码 <jdbc:embedded-databaseid="dataSource"> <jdbc:scriptlocati...

gb4215287的博客 4012

Spring Boot整合Redis切换db库(database)全网最简洁最好用的方式

众所周知,redis是有16个db。工作中如果需要查询redis里面的数据,并且又不在一个db的情况下,这时候就需要我们考虑切换查询。网上查了很多切db的方法,要么方法过长,看的头疼,要么考虑的太简单修改了全局的db,多个线程调用会互相影响,下面给大家推荐一个既简单又是线程安全的redis切db的写法。......

无风三尺浪的博客 5133

spring initialize-database 使用方法

spring initialize-database 使用方法做系统时经常遇到需要初始化数据库的问题,spring 有个很用户的标签 initialize-database,实现这个功能,备忘下。只需要在xml中做如下配置配置: <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xueba207的专栏 1925

Spring使用C3P0,从db.properties文件中读取信息,连接数据库

spring配置信息<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http:/

qq_28384753的博客 2969

Spring和DB4O集成总结( 入门级A)

  Spring和DB4O集成总结&lt;o:p&gt;&lt;/o:p&gt; 步1。 编写一个包含SETTER,GETTER的POJO类: package com.model; /**  * @author gyc  */ public class ModelBean {         private String msg;        private String name;  ...

gyc567的专栏 241
上一篇: spring mvc笔记
下一篇: Spring 事务
GeoJava
博客等级 码龄19年 3粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值