Tag: spring jdbc

Spring JDBC与普通JDBC之间的区别?

Spring JDBC VS JDBC之间的主要区别是什么?

使用Spring MVC流可关闭资源

阅读完本文之后 ,我希望使用Spring将数据库查询结果直接流式传输到JSON响应,以确保内存使用率不变(内存中没有贪婪的List加载)。 与使用Hibernate的文章中所做的类似,我组装了一个greetingRepository对象,该对象根据JdbcTemplate返回数据库内容的流。 在该实现中,我在查询的ResultSet创建了一个迭代器,并按如下方式返回流: return StreamSupport.stream(spliterator(), false).onClose(() -> { log.info(“Closing ResultSetIterator stream”); JdbcUtils.closeResultSet(resultSet); }); 即使用onClose()方法,如果在try-with-resources构造中声明了流,则保证将关闭基础ResultSet : try(Stream stream = greetingRepository.stream()) { // operate on the stream } // ResultSet underlying the stream will be guaranteed to be closed 但正如在文章中,我希望这个流由自定义对象映射器(文章中定义的增强的MappingJackson2HttpMessageConverter )使用。 如果我们将try-with-resources需求放在一边,这可行如下: @RequestMapping(method = GET) Stream stream() { return greetingRepository.stream().map(GreetingResource::new); } 然而,正如一位同事在该文章底部评论的那样,这并没有关闭基础资源。 在Spring MVC的上下文中,我如何从数据库一直流式传输到JSON响应中并仍然保证ResultSet将被关闭? 你能提供具体的示例解决方案吗?

如何让Spring Boot自动重新连接到PostgreSQL?

我正在运行Spring Boot连接到PostgreSQL数据库。 我已经validation,如果在数据库之后启动Spring Boot,数据将写入数据库。 spring.datasource.url = jdbc:postgresql://localhost/dbname spring.datasource.username = user spring.datasource.password = secret spring.datasource.driver-class-name = org.postgresql.Driver spring.datasource.testOnBorrow=true spring.datasource.validationQuery=SELECT 1 当开发中的数据库发生变化时,我会遇到exception: PreparedStatementCallback; SQL []; This connection has been closed.; nested exception is org.postgresql.util.PSQLException: This connection has been closed. PreparedStatementCallback; SQL []; This connection has been closed.; nested exception is org.postgresql.util.PSQLException: This connection has been closed. 请注意,exception发生时可以再次访问数据库; […]

关于RowMapper在Spring Framework应用程序中使用JDBC的一些疑问

我正在研究如何在Spring Framework中使用JDBC对数据库执行查询。 我正在学习本教程: http : //www.tutorialspoint.com/spring/spring_jdbc_example.htm 在本教程中,我定义了一个StudentDAO接口,它只定义了我想要的CRUD方法。 然后定义Student类,它是我想要在Student数据库表上保留的实体。 然后定义StudentMapper类,它是RowMapper接口的特定实现,在这种情况下,用于将ResultSet中的特定记录(由查询返回)映射到Student对象。 然后我有StudentJDBCTemplate ,它支持我的StudentDAO接口的实现,在这个类中我实现了接口中定义的CRUD方法。 好的,现在我对StudentMapper类如何工作有疑问:在这个StudentJDBCTemplate类中,定义了返回Student数据库表中所有记录列表的方法,这个: public List listStudents() { String SQL = “select * from Student”; List students = jdbcTemplateObject.query(SQL, new StudentMapper()); return students; } 你怎么看,这个方法返回一个List of Student对象,并按以下方式工作: 它首先要做的是定义返回 SQL String中Student数据库表中所有记录的查询。 然后通过jdbcTemplateObject对象上的查询方法调用执行此查询(这是JdbcTemplate Spring类的一个等级** 此方法有两个参数:SQL String(包含必须执行的SQL查询)和一个新的StudentMapper对象,它接受查询返回的ResultSet对象并将其记录映射到新的Student对象上 在这里阅读: http ://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html sayas: 执行给定静态SQL的查询,将每一行映射到Java通过RowMapper对象。 我的疑问与我的StudentMapper使用mapRow()方法在Student对象上映射ResultSet记录这一事实有关,这是代码: package com.tutorialspoint; import java.sql.ResultSet; import java.sql.SQLException; import […]

重写BeanPropertyRowMapper以支持JodaTime DateTime

My Domain对象有几个Joda-Time DateTime字段。 当我使用SimpleJdbcTemplate读取数据库值时: 患者患者= jdbc.queryForObject(sql,new BeanPropertyRowMapper(Patient.class),patientId); 它只是失败,令人惊讶的是,没有记录任何错误。 我想这是因为解析到DateTime的timestamp不适用于Jdbc。 如果可以inheritance和覆盖BeanPropertyRowMapper并指示将所有java.sql.Timestamp和java.sql.Date转换为DateTime ,那么它会很棒并且可以节省大量额外代码。 任何建议?

JDBC模板 – 一对多

我有一个看起来像这样的课程。 我需要从两个数据库表中填充它,如下所示。 有没有首选的方法呢? 我的想法是有一个服务类来通过DAO的ResultSetExtractor选择List 。 然后在该列表上执行foreach ,并通过另一个ResultSetExtractor为个人选择List电子邮件,并使用foreach循环将其附加。 有没有更好的方法,还是这样的好? public class Person { private String personId; private String Name; private ArrayList emails; } create table Person ( person_id varchar2(10), name varchar2(30) ); create table email ( person_id varchar2(10), email varchar2(30) );

如何将Spring DataSourceInitializer与@Primary和辅助DataSource bean一起使用?

我有一个场景,我希望有一个依赖于另一个DataSource bean的@Primary DataSource DataSource bean。 当我这样做时,我当前遇到BeanCurrentlyInCreationExceptionexception,因为DataSourceInitializer在仍在创建时触发@Primary bean的解析。 我已经创建了一个示例存储库来重现此问题,并在有用的情况下更详细地解释它: https : //github.com/zachmarshall/spring-datasource-init-bug

org.springframework.beans.factory.CannotLoadBeanClassException:找不到名为’的bean的类

我正在开发Spring MVC(3.2)+ JDBC项目,我对Spring很新。 我正在使用Eclipse Europa,Tomcat服务器和oracle数据库,我没有使用maven。 我在stackoverflow上看到了很多问题,但没有一个答案可以解决我的问题。 当我运行我的项目时,我收到此错误: SEVERE: Context initialization failed org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.Dao.ApplicationDaoImpl] for bean with name ‘ApplicationDao’ defined in ServletContext resource [/WEB-INF/spring-servlet.xml]; nested exception is java.lang.ClassNotFoundException: com.Dao.ApplicationDaoImpl at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1275) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:575) at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1344) at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:910) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:599) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:665) at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:518) at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459) […]

如何使用需要2个参数的查询进行batchUpdate,并且只有其中一个存储在列表中

我使用Spring-JDBC在我的MySQL数据库中为用户插入facebook好友列表。 我有一个包含用户uid的最终Long和包含他朋友列表的List。 我的查询是: final String sqlInsert=”insert into fb_user_friends(fb_uid,friend_uid) values(?,?)”; 我使用SqlParameterSourceUtils创建批处理参数 SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(friendsList.toArray()); 我使用以下命令执行插入: int[] insertCounts = this._jdbcTemplate.batchUpdate(sqlInsert,batch); 这里的问题是列表只包含查询所需的第二个参数。 我是否必须修改friendsList以将其添加到另一列或是否有其他方法? 谢谢!

使用IAM身份validation和Spring JDBC(DataSource和JdbcTemplace)访问AWS RDS

我无法弄清楚如何实现这一点。 任何帮助和/或指针将不胜感激。 目前,我的Java / Spring应用程序后端部署在EC2上,并使用常规的Spring JDBC设置成功访问RDS上的MySQL 。 也就是说,将数据库信息存储在application.properties ,并在@Configuration类中配置DataSource和JdbcTemplate 。 一切正常。 现在,我需要安全地访问RDS上的MySQL。 RDS实例已启用IAM身份validation。 我还成功创建了IAM角色并应用了内联策略 。 然后,按照此链接上的AWS RDS文档和Java示例,我能够使用身份validation令牌和我创建的用户而不是常规的db用户名和密码,从独立的Java类成功访问数据库。 这个独立的Java类直接处理“ Connection ”对象。 我被困的地方是我如何将其转换为Spring JDBC配置 。 也就是说,在我的@Configuration类中为此设置DataSource和JdbcTemplate bean。 实现这一目标的正确/正确方法是什么? —–编辑 – 开始—– 我试图将其实现为可用于多个项目的库。 也就是说,它将用作JAR并在项目的POM文件中声明为依赖项。 该库将包括可配置的AWS服务,例如使用通用DB用户名和密码的RDS访问,使用IAM认证的RDS访问,用于数据加密的KMS(CMK /数据密钥)等。 想法是根据项目在任何Web / app服务器上使用此库。 希望这更能说明我的需要。 —–编辑 – 结束—– DataSource内部有getConnection(),所以我基本上可以创建自己的DataSource实现来实现我想要的。 但这是一个好方法吗? 就像是: public class MyDataSource implements DataSource { @Override public Connection getConnection() throws SQLException […]