SpringBoot2.x基础教程:使用JdbcTemplate访问MySQL数据库

编程

对于信息的存储,现在已经有非常非常多的产品可以选择,其中不乏许多非常优秀的开源免费产品,比如:MySQL,Redis等。接下来,在第3章节,我们将继续学习在使用Spring Boot开发服务端程序的时候,如何实现对各流行数据存储产品的增删改查操作。

作为数据访问章节的第一篇,我们将从最为常用的关系型数据库开始。通过一个简单例子,学习在Spring Boot中最基本的数据访问工具:JdbcTemplate。

数据源配置

在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式。

首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置:

<dependency>

<groupid>org.springframework.boot</groupid>

<artifactid>spring-boot-starter-jdbc</artifactid>

</dependency>

嵌入式数据库支持

嵌入式数据库通常用于开发和测试环境,不推荐用于生产环境。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.46</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表,包含属性nameage。可以通过执行下面的建表语句::

CREATE TABLE `User` (

`name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL,

`age` int NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

编写领域对象

根据数据库中创建的User表,创建领域对象:

@Data

@NoArgsConstructor

public class User {

private String name;

private Integer age;

}

这里使用了Lombok的@Data@NoArgsConstructor注解来自动生成各参数的Set、Get函数以及不带参数的构造函数。如果您对Lombok还不了解,可以看看这篇文章:Java开发神器Lombok的使用与原理。

编写数据访问对象

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

public interface UserService {

/**

* 新增一个用户

*

* @param name

* @param age

*/

int create(String name, Integer age);

/**

* 根据name查询用户

*

* @param name

* @return

*/

List<user> getByName(String name);

/**

* 根据name删除用户

*

* @param name

*/

int deleteByName(String name);

/**

* 获取用户总量

*/

int getAllUsers();

/**

* 删除所有用户

*/

int deleteAllUsers();

}

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

@Service

public class UserServiceImpl implements UserService {

private JdbcTemplate jdbcTemplate;

UserServiceImpl(JdbcTemplate jdbcTemplate) {

this.jdbcTemplate = jdbcTemplate;

}

@Override

public int create(String name, Integer age) {

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

}

@Override

public List<user> getByName(String name) {

List<user> users = jdbcTemplate.query("select NAME, AGE from USER where NAME = ?", (resultSet, i) -&gt; {

User user = new User();

user.setName(resultSet.getString("NAME"));

user.setAge(resultSet.getInt("AGE"));

return user;

}, name);

return users;

}

@Override

public int deleteByName(String name) {

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

}

@Override

public int getAllUsers() {

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

}

@Override

public int deleteAllUsers() {

return jdbcTemplate.update("delete from USER");

}

}

编写单元测试用例

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

@RunWith(SpringRunner.class)

@SpringBootTest

public class Chapter31ApplicationTests {

@Autowired

private UserService userSerivce;

@Before

public void setUp() {

// 准备,清空user表

userSerivce.deleteAllUsers();

}

@Test

public void test() throws Exception {

// 插入5个用户

userSerivce.create("Tom", 10);

userSerivce.create("Mike", 11);

userSerivce.create("Didispace", 30);

userSerivce.create("Oscar", 21);

userSerivce.create("Linda", 17);

// 查询名为Oscar的用户,判断年龄是否匹配

List<user> userList = userSerivce.getByName("Oscar");

Assert.assertEquals(21, userList.get(0).getAge().intValue());

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

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

// 删除两个用户

userSerivce.deleteByName("Tom");

userSerivce.deleteByName("Mike");

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

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

}

}

上面介绍的JdbcTemplate只是最基本的几个操作,更多其他数据访问操作的使用请参考:JdbcTemplate API

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

代码示例

本文的相关例子可以查看下面仓库中的chapter3-1目录:

  • Github:https://github.com/dyc87112/SpringBoot-Learning/
  • Gitee:https://gitee.com/didispace/SpringBoot-Learning/

如果您觉得本文不错,欢迎Star支持,您的关注是我坚持的动力!

> 欢迎关注我的公众号:程序猿DD,获得独家整理的学习资源和日常干货推送。

> 如果您对我的专题内容感兴趣,也可以关注我的博客:didispace.com</user></user></user></user>

以上是 SpringBoot2.x基础教程:使用JdbcTemplate访问MySQL数据库 的全部内容, 来源链接: utcz.com/z/513185.html

回到顶部