Spring Boot 与 Kotlin 使用JdbcTemplate连接MySQL


声明:本文转载自https://my.oschina.net/quanke/blog/1610799,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

之前介绍了一些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相关内容

欢迎关注《Spring Boot 与 kotlin 实战》 全科龙婷

参考

本文发表于2018年01月22日 12:32
(c)注:本文转载自https://my.oschina.net/quanke/blog/1610799,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1915 讨论 0 喜欢 1

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1