Web应用程序中的Spring JDBC入门
在上一篇文章中,我已经向您展示了如何设置基本的Spring 3 MVC Web应用程序 。 重复使用该项目设置作为模板,我将向您展示如何增强它以与JDBC一起使用。 有了它,您可以存储和检索数据库中的数据。 我们将通过Spring添加一个新的控制器和一个数据服务,以便您可以看到Spring注入和注释配置如何协同工作。
与完整的ORM(例如Hibernate)相比,基于JDBC的直接应用程序易于安装。 您无需担心AOP,TranactionManager,实体映射和其他配置的完整阵列。 在JDK的java.jdbc
API java.jdbc
,Spring附带了spring-jdbc
模块,该模块可以通过其众所周知的JdbcTemplate
类有效地引导您。 让我们探讨如何将其设置并作为Web应用程序运行。
入门和项目设置
出于演示目的,我将使用H2Database的内存版本作为JDBC存储。 使用和设置都很简单。 而且,如果您决定使用他们的基于FILE或TCP的数据库,则只需重新设置数据源,然后您就可以继续探索更多内容。
我们将从向您现有的spring-web-annotation/pom.xml
文件添加新的依赖关系开始。
<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.3.163</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>3.2.4.RELEASE</version></dependency>
这样,您将可以访问Spring模块类进行配置。 在现有项目中找到先前的src/main/java/springweb/WebApp.java
文件,并在下面添加新内容:
package springweb;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;import javax.sql.DataSource;public class WebApp extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class<?>[]{ RootConfig.class };}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class<?>[]{ WebAppConfig.class };}@Overrideprotected String[] getServletMappings() {return new String[]{ "/" };}@Configuration@EnableWebMvc@ComponentScan("springweb.controller")public static class WebAppConfig {}@Configuration@ComponentScan("springweb.data")public static class RootConfig {@Beanpublic DataSource dataSource() {DataSource bean = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).addScript("classpath:schema.sql").build();return bean;}}
}
这里的新功能是我们引入了一个新的RootConfig
类,该类将在getRootConfigClasses()
方法中加载。 RootConfig
只是另一个基于Spring注释的配置,它为bean定义创建了一个新的Spring上下文。 我们在那里创建了一个将运行内存数据库的bean。 构建器返回的bean还方便地实现了javax.sql.DataSource
接口,因此我们实际上可以将其注入任何数据服务中并立即开始使用它。
关于Spring嵌入式数据库构建器的另一件事很酷,那就是它在启动过程中还可以运行任何SQL脚本! 对于此演示,我们将在src/main/resources/schema.sql
文件中创建一个PING
表。 由于Maven标准的源代码结构,该文件对于Spring在CLASSPATH的根目录中是可见的。
CREATE TABLE PING (ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,TAG VARCHAR(1024) NOT NULL,TS DATETIME NOT NULL
);
这就是数据源设置。 现在请注意,我没有将此数据源Spring bean定义添加到现有的WebAppConfig
类中。 原因是我们希望一个单独的Spring上下文来配置所有服务级别的bean,同时为所有与Spring MVC相关的bean(例如Controller,URL映射等)保留WebAppConfig
。 这有助于按Spring上下文的层次结构组织bean定义。 将RootConfig
作为父层,将WebAppConfig
作为子层。 这也意味着,在所有的服务组件RootConfig
是自动可见WebAppConfig
; 为了注射等目的
还要注意,使用分离的配置类,我们可以指定两个不同的程序包来扫描服务组件; 我们将springweb.controller
用于WebAppConfig
,将springweb.data
用于RootConfig
。 这很重要,它可以为您省去一些麻烦,让Spring自动检测所有这些基于注释的组件。
创建数据服务
现在是时候使用JDBC了,让我们在src/main/java/springweb/data/PingService.java
文件下编写一个数据服务类。
package springweb.data;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;import javax.sql.DataSource;
import java.util.Date;
import java.util.List;
import java.util.Map;@Repository
public class PingService {public static Log LOG = LogFactory.getLog(PingService.class);private JdbcTemplate jdbcTemplate;@Autowiredpublic void setDataSource(DataSource dataSource) {this.jdbcTemplate = new JdbcTemplate(dataSource);}public void insert(String tag) {LOG.info("Inserting Ping tag: " + tag);jdbcTemplate.update("INSERT INTO PING(TAG, TS) VALUES(?, ?)", tag, new Date());}public List<Map<String, Object>> findAllPings() {return jdbcTemplate.queryForList("SELECT * FROM PING ORDER BY TS");}
}
这项服务非常简单。 我展示了两种方法:一种用于插入,一种用于检索所有Ping数据。 注意,我使用@Repository
向Spring指示该类是执行数据服务的组件服务。 还要注意我们如何使用setter方法注入DataSource
,然后将JdbcTemplate
实例化为成员字段。 由此,我们可以充分利用Spring JDBC API进行查询和更新。
关于日志的注释。 Spring核心本身使用Apache common-logging
,因此我重用了该API,甚至没有在我的pom.xml
明确声明它们。 如果要从日志输出中查看更多详细信息,则应将log4j
logger实施添加到项目中,并且它应会自动运行。 我将把它留作您的锻炼。
接下来,我们将需要编写一个Controller来将数据带到Web UI页面。 我们将在src/main/java/springweb/controller/PingController.java
文件下创建此文件。
package springweb.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import springweb.data.PingService;import java.util.List;
import java.util.Map;@Controller
public class PingController {@Autowiredprivate PingService pingService;@RequestMapping(value="/ping/{tag}", produces="text/plain")@ResponseBodypublic String pingTag(@PathVariable("tag") String tag) {pingService.insert(tag);return "Ping tag '" + tag + "' has been inserted. ";}@RequestMapping(value="/pings", produces="text/plain")@ResponseBodypublic String pings() {List<Map<String, Object>> result = pingService.findAllPings();if (result.size() == 0)return "No record found.";StringBuilder sb = new StringBuilder();for (Map<String, Object> row : result) {sb.append("Ping" + row).append("\n");}return sb.toString();}
}
在此控制器中,您可以轻松地看到通过我们的数据服务通过注入获取并更新了Ping数据。 我已经声明并映射URL /ping/{tag}
以将Ping数据插入数据库。 Spring具有这种非常好的简写语法注释映射,可以从您的URL中提取参数。 我允许用户设置一个简单的标记词作为Ping记录插入,以便我们可以识别数据库中的源。
另一个控制器处理程序/pings
URL非常简单; 它只是返回PING表中的所有记录。
出于演示目的,我选择不使用JSP作为视图,而是直接从Controller返回纯文本。 Spring通过在处理程序方法中添加@ResponseBody
来实现此@ResponseBody
。 还要注意,我们可以直接使用注释将内容类型指定为text/plain
作为输出。
测试中
要查看上面的内容,您只需要运行Maven tomcat插件即可。 上一篇文章向您显示了执行此操作的命令。 重新启动后,您应该可以打开浏览器并使用这些URL进行测试。
- http:// localhost:8081 / spring-web-annotation / ping / tester1
- http:// localhost:8081 / spring-web-annotation / ping / tester2
- http:// localhost:8081 / spring-web-annotation / ping / tester3
- http:// localhost:8081 / spring-web-annotation / pings
编程编程
从这个简单的练习中,您可以快速看到Spring MVC为您带来许多好处。 并在开发Web应用程序中带来很多乐趣。 根据设计原则,Spring倾向于对开发人员友好,可以提高生产力,并且不会干扰您的环境。 这是我喜欢使用它的原因之一。 希望您喜欢本教程,并自己进一步进行探索。
编程愉快!
翻译自: https://www.javacodegeeks.com/2013/10/getting-started-with-spring-jdbc-in-a-web-application.html
Web应用程序中的Spring JDBC入门相关推荐
- Spring Security并发会话控制示例教程–如何限制Java JEE Web应用程序中的用户会话数...
如果您不知道, Spring安全性可能会限制用户可以拥有的会话数. 如果要开发Web应用程序,尤其是Java JEE中的安全Web应用程序 ,则必须提出与在线银行门户相似的要求,例如, 每个用户一次只 ...
- spring_在基于Spring的Web应用程序中使用Http Session
spring 在基于Spring的Web应用程序中拥有和使用Http会话有多种方法. 这是基于最近项目经验的总结. 方法1 只需在需要的HttpSession中注入即可. @Service publi ...
- 如何使用recaptcha_在Spring MVC Web应用程序中使用reCaptcha
如何使用recaptcha CAPTCHA是一个程序,可以生成人类可以通过但计算机程序" 不能 "通过的测试并对其进行评分. 所采取的策略之一是向用户显示具有扭曲文本的图像,并且用 ...
- 在基于Spring的Web应用程序中使用Http Session
在基于Spring的Web应用程序中拥有和使用Http会话有多种方法. 这是基于最近项目经验的总结. 方法1 只需在需要的HttpSession中注入即可. @Service public class ...
- 在Spring MVC Web应用程序中添加社交登录:集成测试
我已经写了关于为使用Spring Social 1.1.0的应用程序编写单元测试的挑战,并为此提供了一种解决方案 . 尽管单元测试很有价值,但是它并不能真正告诉我们我们的应用程序是否正常运行. 这就是 ...
- 在Spring MVC Web应用程序中添加社交登录:单元测试
Spring Social 1.0具有spring-social-test模块,该模块为测试Connect实现和API绑定提供支持. 该模块已从Spring Social 1.1.0中删除,并由 Sp ...
- 在Spring MVC Web应用程序中使用reCaptcha
CAPTCHA是一种程序,可以生成人类可以通过的测试并对其进行评分,而计算机程序" 不能 "通过. 所采取的策略之一是向用户显示具有扭曲文本的图像,并且用户应在输入区域中书写文本. ...
- json日期格式化 java_java_Java Web程序中利用Spring框架返回JSON格式的日期,返回Json时格式化日期Date
第一 - phpStudy...
Java Web程序中利用Spring框架返回JSON格式的日期 返回Json时格式化日期Date第一步:创建CustomObjectMapper类 /** * 解决SpringMVC使用@Respo ...
- Spring Boot Web应用程序中注册 Servlet 的方法实例
Spring Boot Web应用程序中注册 Servlet 的方法实例 本文实例工程源代码:https://github.com/KotlinSpringBoot/demo1_add_servlet ...
最新文章
- 83篇文献-万字总结强化学习之路
- 理论与实践中的CNN模型结构,如何引领深度学习热潮
- IT技术文章示例(附源码)
- 华为V3.4-RIP命令总结
- leetcode104. 二叉树的最大深度(dfs)
- 标准正态分布_正态分布,正态分布如何变换为标准正态分布
- 盘点常用Java排序算法
- c语言limits.h_ (limits.h)C ++中(整数类型的大小)的宏常量
- 清除服务器上传队列的文件,webUploader上传demo
- 简述传统动画跟计算机动画的异同点,Flash动画设计与传统动画设计的特点比较研究...
- c语言不通包里的函数,C语言中实现不同函数间jump的方法 -电脑资料
- 机器学习项目中使用统计学方法的十个例子
- OpenKG祝大家端午安康
- .net core系列源码地址介绍
- JS 三级联动之 省市县。
- php在线拼图游戏,js+html5实现可在手机上玩的拼图游戏_javascript技巧
- 2020最新手机百度云不限速教程,下载速度10M/S,比会员还快
- Webots学习笔记(四)---舵轮模型
- web渗透(asp数字型注入模拟实战)
- Java面试题基础系列
热门文章
- phone6s home键按不动了怎么办 苹果6s home键按不动解决方法
- 16-就业课(2.1)-应用容器-Docker
- 不同范数下的余弦定理_第06题 | 从源头追溯「余弦定理」amp; 文理科知识点的异同...
- python简单爬虫课题_VS2019python爬虫入门
- 高特权级代码段转向低特权级代码段(利用 ret(retf) 指令实现 jmp from ring0 to ring3)
- jep290涉及jdk版本_JDK 13中的JEP 355文本块
- 谷歌gcp 远程计算机_引导性GCP:带有Google Cloud Pub / Sub的Spring Cloud Stream
- eclipse clean_Clean Sheet – Windows 10的人体工程学Eclipse主题
- gui jfr_Java飞行记录器(JFR)
- jClarity:在Azure上升级到Java