Spring Boot 中使用 Jdbc Template 访问数据库

news/2024/5/19 1:38:03 标签: spring, jdbc

之前介绍了很多Web层的例子,包括构建、,但是这些内容还不足以构建一个动态的应用。通常我们做App也好,做Web应用也好,都需要内容,而内容通常存储于各种类型的数据库,服务端在接收到访问请求之后需要访问数据库获取并处理成展现给用户使用的数据形式。

嵌入式数据库支持

嵌入式数据库通常用于开发和测试环境,不推荐用于生产环境。Spring Boot提供自动配置的嵌入式数据库有H2、HSQL、Derby,你不需要提供任何连接配置就能使用。

比如,我们可以在pom.xml中引入如下配置使用HSQL

<dependency>

<groupId>org.hsqldb</groupId>

<artifactId>hsqldb</artifactId>

<scope>runtime</scope>

</dependency>

连接生产数据源

以MySQL数据库为例,先引入MySQL连接的依赖包,在pom.xml中加入:

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.21</version>

</dependency>

在src/main/resources/application.properties中配置数据源信息

spring.datasource.url=jdbc:mysql://localhost:3306/test

spring.datasource.username=dbuser

spring.datasource.password=dbpass

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

连接JNDI数据源

当你将应用部署于应用服务器上的时候想让数据源由应用服务器管理,那么可以使用如下配置方式引入JNDI数据源。

spring.datasource.jndi-name=java:jboss/datasources/customers

使用JdbcTemplate操作数据库

Spring的JdbcTemplate是自动配置的,你可以直接使用@Autowired来注入到你自己的bean中来使用。

举例:我们在创建User表,包含属性name、age,下面来编写数据访问对象和单元测试用例。

定义包含有插入、删除、查询的抽象接口UserService

public interface UserService {

/**

* 新增一个用户

* @param name

* @param age

*/

void create(String name, Integer age);

/**

* 根据name删除一个用户高

* @param name

*/

void deleteByName(String name);

/**

* 获取用户总量

*/

Integer getAllUsers();

/**

* 删除所有用户

*/

void deleteAllUsers();

}

通过JdbcTemplate实现UserService中定义的数据访问操作

@Service

public class UserServiceImpl implements UserService {

@Autowired

private JdbcTemplate jdbcTemplate;

@Override

public void create(String name, Integer age) {

jdbcTemplate.update("insert into USER(NAME, AGE) values(?, ?)", name, age);

}

@Override

public void deleteByName(String name) {

jdbcTemplate.update("delete from USER where NAME = ?", name);

}

@Override

public Integer getAllUsers() {

return jdbcTemplate.queryForObject("select count(1) from USER", Integer.class);

}

@Override

public void deleteAllUsers() {

jdbcTemplate.update("delete from USER");

}

}

创建对UserService的单元测试用例,通过创建、删除和查询来验证数据库操作的正确性。

@RunWith(SpringJUnit4ClassRunner.class)

@SpringApplicationConfiguration(Application.class)

public class ApplicationTests {

@Autowired

private UserService userSerivce;

@Before

public void setUp() {

// 准备,清空user表

userSerivce.deleteAllUsers();

}

@Test

public void test() throws Exception {

// 插入5个用户

userSerivce.create("a", 1);

userSerivce.create("b", 2);

userSerivce.create("c", 3);

userSerivce.create("d", 4);

userSerivce.create("e", 5);

// 查数据库,应该有5个用户

Assert.assertEquals(5, userSerivce.getAllUsers().intValue());

// 删除两个用户

userSerivce.deleteByName("a");

userSerivce.deleteByName("e");

// 查数据库,应该有5个用户

Assert.assertEquals(3, userSerivce.getAllUsers().intValue());

}

}

上面介绍的JdbcTemplate只是最基本的几个操作,更多其他数据访问操作的使用请参考:JdbcTemplate API(https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html)。

通过上面这个简单的例子,我们可以看到在Spring Boot下访问数据库的配置依然秉承了框架的初衷:简单。我们只需要在pom.xml中加入数据库依赖,再到application.properties中配置连接信息,不需要像Spring应用中创建JdbcTemplate的Bean,就可以直接在自己的对象中注入使用。




http://www.niftyadmin.cn/n/811695.html

相关文章

iOS UIButton 设置图片文字垂直排列

本文转载至http://my.oschina.net/sayonala/blog/198376 摘要 经过一下午的查阅资料及尝试&#xff0c;最终解决了在图片和文字垂直排列的情况下&#xff0c;如果文字长度变化会导致图片位置变动的问题。 经过一下午的查阅资料及尝试&#xff0c;最终解决了在图片和文字垂直排列…

使用GitLab来实现IOS项目的持续集成CI

作为程序员&#xff0c;代码是一定要写的&#xff0c;而且要天天写。在好多地方见过这样一种说法&#xff1a; 只会写程序的程序员不是好程序员 当然&#xff0c;我不赞同这种观点&#xff0c;因为有的人他天生就是为程序而生的。但是掌握一些代码之外的理论知识也是一个不错的…

用 GitLab CI 进行持续集成

简介 从 GitLab 8.0 开始&#xff0c;GitLab CI 就已经集成在 GitLab 中&#xff0c;我们只要在项目中添加一个 .gitlab-ci.yml 文件&#xff0c;然后添加一个 Runner&#xff0c;即可进行持续集成。 而且随着 GitLab 的升级&#xff0c;GitLab CI 变得越来越强大&#xff0c;本…

去空格 whitespaceAndNewlineCharacterSet

本文转载至 http://blog.csdn.net/samuelltk/article/details/8994313 1.去掉两端的空格[cpp] view plaincopyprint? [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] 2.去掉多余的空格 [cpp] view plaincopyprint? NSString *s…

iOS: NSObject中执行Selector的相关方法

本文转载至 http://www.mgenware.com/blog/?p463 1. 对当前Run Loop中Selector Sources的取消 NSObject中的performSelector:withObject:afterDelay:方法将会在当前线程的Run Loop中根据afterDelay参数创建一个Timer&#xff0c;如果没有调用有inModes参数的方法&#xff0c;该…

模板引擎 Thymeleaf 动态渲染 HTML

1、添加依赖 <!-- Thymeleaf 模板引擎 --> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf</artifactId> <version>3.0.9.RELEASE</version> …

基于Gitlab CI搭建持续集成环境

什么是持续集成 什么是持续集成持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff09;指的是&#xff0c;频繁地&#xff08;一天多次&#xff09;将代码集成到主干。 它的好处主要有两个。 快速发现错误。每完成一点更新&#xff0c;就集成到主干&#x…

携程App的网络性能优化实践

本文转载至 http://kb.cnblogs.com/page/519824/ 作者: 陈浩然 来源: InfoQ 发布时间: 2015-04-29 23:42 阅读: 4018 次 推荐: 16 原文链接 [收藏] 摘要&#xff1a;在4月23日~25日举行的QCon全球软件开发大会&#xff08;北京站&#xff09;上&#xff0c;携程无线开…