Spring Boot 与 Kotlin 使用JdbcTemplate连接MySQL数据库的方法

 更新时间:2018年01月22日 10:51:56   作者:quanke  
本文介绍在Spring Boot基础下配置数据源和通过 JdbcTemplate 编写数据访问的示例。感兴趣的朋友跟随脚本之家小编一起学习吧

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

本文介绍在Spring Boot基础下配置数据源和通过 JdbcTemplate 编写数据访问的示例。

数据源配置

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

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

compile "org.springframework.boot:spring-boot-starter-jdbc:$spring_boot_version"

连接数据源

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

compile "mysql:mysql-connector-java:$mysql_version"

完整 build.gradle

group 'name.quanke.kotlin'
version '1.0-SNAPSHOT'
buildscript {
 ext.kotlin_version = '1.2.10'
 ext.spring_boot_version = '1.5.4.RELEASE'
 ext.springfox_swagger2_version = '2.7.0'
 ext.mysql_version = '5.1.21'
 repositories {
  mavenCentral()
 }
 dependencies {
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  classpath("org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version")
//  Kotlin整合SpringBoot的默认无参构造函数,默认把所有的类设置open类插件
  classpath("org.jetbrains.kotlin:kotlin-noarg:$kotlin_version")
  classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlin_version")
 }
}
apply plugin: 'kotlin'
apply plugin: "kotlin-spring" // See https://kotlinlang.org/docs/reference/compiler-plugins.html#kotlin-spring-compiler-plugin
apply plugin: 'org.springframework.boot'
jar {
 baseName = 'chapter11-6-1-service'
 version = '0.1.0'
}
repositories {
 mavenCentral()
}
dependencies {
 compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
 compile "org.springframework.boot:spring-boot-starter-web:$spring_boot_version"
 compile "org.springframework.boot:spring-boot-starter-jdbc:$spring_boot_version"
 compile "mysql:mysql-connector-java:$mysql_version"
 testCompile "org.springframework.boot:spring-boot-starter-test:$spring_boot_version"
 testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
}
compileKotlin {
 kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
 kotlinOptions.jvmTarget = "1.8"
}

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

spring:
 datasource:
 url: jdbc:mysql://localhost:3306/test
 username: root
 password: 123456
 driver-class-name: com.mysql.jdbc.Driver

连接JNDI数据源

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

如果对JNDI不是很了解的,请参考 https://baike.baidu.com/item/JNDI/3792442?fr=aladdin

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

使用JdbcTemplate操作数据库

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

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

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

interface UserService {
 /**
  * 获取用户总量
  */
 val allUsers: Int?
 /**
  * 新增一个用户
  * @param name
  * @param age
  */
 fun create(name: String, password: String?)
 /**
  * 根据name删除一个用户高
  * @param name
  */
 fun deleteByName(name: String)
 /**
  * 删除所有用户
  */
 fun deleteAllUsers()
}

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

import org.springframework.beans.factory.annotation.Autowired
import org.springframework.jdbc.core.JdbcTemplate
import org.springframework.stereotype.Service
/**
 * Created by http://quanke.name on 2018/1/10.
 */
@Service
class UserServiceImpl : UserService {
 @Autowired
 private val jdbcTemplate: JdbcTemplate? = null
 override val allUsers: Int?
  get() = jdbcTemplate!!.queryForObject("select count(1) from USER", Int::class.java)
 override fun create(name: String, password: String?) {
  jdbcTemplate!!.update("insert into USER(USERNAME, PASSWORD) values(?, ?)", name, password)
 }
 override fun deleteByName(name: String) {
  jdbcTemplate!!.update("delete from USER where USERNAME = ?", name)
 }
 override fun deleteAllUsers() {
  jdbcTemplate!!.update("delete from USER")
 }
}

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

/**
 * Created by http://quanke.name on 2018/1/9.
 */
@RunWith(SpringRunner::class)
@SpringBootTest
class ApplicationTests {
 val log = LogFactory.getLog(ApplicationTests::class.java)!!
 @Autowired
 lateinit var userService: UserService
 @Test
 fun `jdbc test"`() {
  val username = "quanke"
  val password = "123456"
  // 插入5个用户
  userService.create("$username a", "$password 1")
  userService.create("$username b", "$password 2")
  userService.create("$username c", "$password 3")
  userService.create("$username d", "$password 4")
  userService.create("$username e", "$password 5")
  log.info("总共用户 ${userService.allUsers}")
  // 删除两个用户
  userService.deleteByName("$username a")
  userService.deleteByName("$username b")
  log.info("总共用户 ${userService.allUsers}")
 }
}

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

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

总结

以上所述是小编给大家介绍的Spring Boot 与 Kotlin 使用JdbcTemplate连接MySQL数据库的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • SpringBoot系列教程之防重放与操作幂等

    SpringBoot系列教程之防重放与操作幂等

    同一条数据被用户点击了多次,导致数据冗余,需要防止弱网络等环境下的重复点击,下面这篇文章主要给大家介绍了关于SpringBoot系列教程之防重放与操作幂等的相关资料,需要的朋友可以参考下
    2022-04-04
  • 带你了解Java数据结构和算法之无权无向图

    带你了解Java数据结构和算法之无权无向图

    这篇文章主要为大家介绍了Java数据结构和算法之无权无向图 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Java如何使用Set接口存储没有重复元素的数组

    Java如何使用Set接口存储没有重复元素的数组

    Set是一个继承于Collection的接口,即Set也是集合中的一种。Set是没有重复元素的集合,本篇我们就用它存储一个没有重复元素的数组
    2022-04-04
  • JPA中@ElementCollection使用示例详解

    JPA中@ElementCollection使用示例详解

    在JPA中,@ElementCollection注解主要用于映射集合属性,例如List、Set或数组等集合属性,以及Map结构的集合属性,每个属性值都有对应的key映射,这篇文章主要介绍了JPA中@ElementCollection使用,需要的朋友可以参考下
    2023-11-11
  • java实现清理DNS Cache的方法

    java实现清理DNS Cache的方法

    这篇文章主要介绍了java实现清理DNS Cache的方法,分析了几种常用的清理方法,并给出了反射清理的完整实例,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • IDEA配置Tomcat后,控制台tomcat catalina log出现乱码问题

    IDEA配置Tomcat后,控制台tomcat catalina log出现乱码问题

    本文介绍了如何通过设置Tomcat和IDEA的编码格式来解决编码问题,首先尝试修改Tomcat的logging.properties文件中的编码设置,如果未解决问题,则调整IDEA的编码设置,通过修改vmoptions文件来全局设置IDEA的编码格式,作者分享了个人成功解决问题的方法和步骤,供其他开发者参考
    2024-09-09
  • Spring Cloud Feign 使用对象参数的操作

    Spring Cloud Feign 使用对象参数的操作

    这篇文章主要介绍了Spring Cloud Feign 如何使用对象参数的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Java类之间的关系图_动力节点Java学院整理

    Java类之间的关系图_动力节点Java学院整理

    在Java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强,有兴趣的可以了解一下
    2017-08-08
  • Java实现LeetCode(1.两数之和)

    Java实现LeetCode(1.两数之和)

    这篇文章主要介绍了Java实现LeetCode(两数之和),本文使用java采用多种发放实现了LeetCode的两数之和题目,需要的朋友可以参考下
    2021-06-06
  • java多线程中执行多个程序的实例分析

    java多线程中执行多个程序的实例分析

    在本篇文章里小编给大家整理的是一篇关于java多线程中执行多个程序的实例分析内容,有需要的朋友们可以学习参考下。
    2021-02-02

最新评论