Spring Boot:整合JdbcTemplate

綜合概述

Spring對數據庫的操做在jdbc上面作了更深層次的封裝,而JdbcTemplate即是Spring提供的一個操做數據庫的便捷工具。咱們能夠藉助JdbcTemplate來執行全部數據庫操做,例如插入,更新,刪除和從數據庫中檢索數據,而且有效避免直接使用jdbc帶來的繁瑣編碼。html

JdbcTemplate主要提供如下五種類型的方法:java

  • execute方法:能夠用於執行任何SQL語句,通常用於執行DDL語句。mysql

  • update、batchUpdate方法:用於執行新增、修改、刪除等語句。git

  • query方法及queryForXXX方法:用於執行查詢相關的語句。web

  • call方法:用於執行數據庫存儲過程和函數相關的語句。spring

固然,在大部分狀況下,咱們都會直接使用更增強大的持久化框架來訪問數據庫,好比MyBatis、Hibernate或者Spring Data JPA,咱們這裏講解JdbcTemplate的整合,只是告訴你們有這麼一種操做數據庫的方式。sql

實現案例

接下來,咱們就以一個具體的例子來學習如何利用Spring的JdbcTemplate來進行數據庫操做。數據庫

生成項目模板

爲方便咱們初始化項目,Spring Boot給咱們提供一個項目模板生成網站。apache

1.  打開瀏覽器,訪問:https://start.spring.io/api

2.  根據頁面提示,選擇構建工具,開發語言,項目信息等。

3.  點擊 Generate the project,生成項目模板,生成以後會將壓縮包下載到本地。

4.  使用IDE導入項目,我這裏使用Eclipse,經過導入Maven項目的方式導入。

建立數據庫表

這裏使用MySQL數據庫,版本是8.0.16,在項目根目錄下新建db目錄,而後在其中編寫一個數據庫腳本文件。

在MySQL數據庫新建一個springboot數據庫,而後在此數據庫中執行下面的提供的腳本建立項目的用戶表。

腳本文件

SQL腳本內容

springboot.sql

-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '編號',
  `name` varchar(50) NOT NULL COMMENT '用戶名',
  `nick_name` varchar(150) DEFAULT NULL COMMENT '暱稱',
  `avatar` varchar(150) DEFAULT NULL COMMENT '頭像',
  `password` varchar(100) DEFAULT NULL COMMENT '密碼',
  `salt` varchar(40) DEFAULT NULL COMMENT '加密鹽',
  `email` varchar(100) DEFAULT NULL COMMENT '郵箱',
  `mobile` varchar(100) DEFAULT NULL COMMENT '手機號',
  `status` tinyint(4) DEFAULT NULL COMMENT '狀態  0:禁用   1:正常',
  `dept_id` bigint(20) DEFAULT NULL COMMENT '機構ID',
  `create_by` varchar(50) DEFAULT NULL COMMENT '建立人',
  `create_time` datetime DEFAULT NULL COMMENT '建立時間',
  `last_update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
  `last_update_time` datetime DEFAULT NULL COMMENT '更新時間',
  `del_flag` tinyint(4) DEFAULT '0' COMMENT '是否刪除  -1:已刪除  0:正常',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 COMMENT='用戶管理';

添加相關依賴

添加項目須要的相關依賴,這裏須要添加上WEB和Swagger和JDBC和MYSQL的依賴,Swagger的添加是爲了方便接口測試。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.louis.springboot</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!-- web -->
        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
        <!-- swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- jdbc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <!-- 打包時拷貝MyBatis的映射文件 -->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/sqlmap/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>  
                <directory>src/main/resources</directory>  
                    <includes> 
                        <include>**/*.*</include>  
                    </includes> 
                    <filtering>true</filtering>  
            </resource> 
        </resources>
    </build>

</project>

添加相關配置

1.添加數據源配置

將application.properties文件更名爲application.yml ,並在其中添加MySQL數據源鏈接信息。

注意:

這裏須要首先建立一個MySQL數據庫,並輸入本身的用戶名和密碼。這裏的數據庫是springboot。

另外,若是你使用的是MySQL 5.x及之前版本,驅動配置driverClassName是com.mysql.jdbc.Driver。

server:
  port: 8080
spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
    username: root
    password: 123456

2. 添加swagger 配置

添加一個swagger 配置類,在工程下新建 config 包並添加一個 SwaggerConfig 配置類。

SwaggerConfig.java

package com.louis.springboot.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any()).build();
    }

    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("SpringBoot API Doc")
                .description("This is a restful api document of Spring Boot.")
                .version("1.0")
                .build();
    }

}

編寫業務代碼

新建model包並在其中編寫model類SysUser。

SysUser.java

package com.louis.springboot.demo.model;

import java.util.Date;

public class SysUser {
    private Long id;

    private String name;

    private String nickName;

    private String avatar;

    private String password;

    private String salt;

    private String email;

    private String mobile;

    private Byte status;

    private Long deptId;

    private String createBy;

    private Date createTime;

    private String lastUpdateBy;

    private Date lastUpdateTime;

    private Byte delFlag;

    // 省略setter和getter
}

新建dao包並在其中編寫dao類SysUserDao,dao包含一些基礎的操做方法。

SysUserDao.java

package com.louis.springboot.demo.dao;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import com.louis.springboot.demo.model.SysUser;

@Repository
public class SysUserDao {
    
    @Autowired
    JdbcTemplate jdbcTemplate;

    /**
     * 保存用戶
     * @param user
     */
    public void save(SysUser user) {
        String sql = "insert into sys_user(id, name, nick_name, password, email) values(?,?,?,?,?)";
        jdbcTemplate.update(sql, user.getId(), user.getName(), user.getNickName(), user.getPassword(), user.getEmail());
    }
    
    /**
     * 刪除用戶
     * @param user
     */
    public void delete(String id) {
        String sql = "delete from sys_user where id=?";
        jdbcTemplate.update(sql, id);
    }
    
    /**
     * 查詢所有用戶
     * @return
     */
    public List<SysUser> findAll() {
        String sql = "select * from sys_user";
        return jdbcTemplate.query(sql, new BeanPropertyRowMapper(SysUser.class));
    }
}

新建service包並在其中編寫服務接口SysUserService。

SysUserService.java

package com.louis.springboot.demo.service;
import java.util.List;
import com.louis.springboot.demo.model.SysUser;

public interface SysUserService {

    /**
     * 保存用戶
     * @param user
     */
    public void save(SysUser user);
    
    /**
     * 刪除用戶
     * @param id
     */
    public void delete(String id);
    
    /**
     * 查詢所有用戶
     * @return
     */
    public List<SysUser> findAll();

}

新建service.impl包並在其中編寫服務實現類SysUserServiceImpl並調用DAO實現相關方法。

SysUserServiceImpl.java

package com.louis.springboot.demo.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.louis.springboot.demo.dao.SysUserDao;
import com.louis.springboot.demo.model.SysUser;
import com.louis.springboot.demo.service.SysUserService;

@Service
public class SysUserServiceImpl implements SysUserService {
    
    @Autowired
    private SysUserDao sysUserDao;

    @Override
    public void save(SysUser user) {
        sysUserDao.save(user);
    }

    @Override
    public void delete(String id) {
        sysUserDao.delete(id);
    }

    @Override
    public List<SysUser> findAll() {
        return sysUserDao.findAll();
    }
    
}

新建controller包並在其中編寫用戶控制器SysUserController,並調用相關服務。

SysUserController.java

package com.louis.springboot.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.louis.springboot.demo.model.SysUser;
import com.louis.springboot.demo.service.SysUserService;

@RestController
@RequestMapping("user")
public class SysUserController {

    @Autowired
    private SysUserService sysUserService;
    
    @PostMapping(value="/save")
    public Object save(@RequestBody SysUser user) {
        sysUserService.save(user);
        return 1;
    }
    
    @GetMapping(value="/delete")
    public Object delete(@RequestParam("id") String id) {
        sysUserService.delete(id);
        return 1;
    }
    
    @GetMapping(value="/findAll")
    public Object findAll() {
        return sysUserService.findAll();
    }
    
}

 

編譯測試運行

1.  右鍵項目 -> Run as -> Maven install,開始執行Maven構建,第一次會下載Maven依賴,可能須要點時間,若是出現以下信息,就說明項目編譯打包成功了。

2.  右鍵文件 DemoApplication.java -> Run as -> Java Application,開始啓動應用,當出現以下信息的時候,就說明應用啓動成功了,默認啓動端口是8080。

3.  打開瀏覽器,訪問:http://localhost:8080/swagger-ui.html,進入swagger接口文檔界面。

4.  首先執行如下findAll接口,此時由於沒有數據,因此沒有返回記錄。

接着執行兩次save方法,分別保存下面兩條記錄。

{
  "id": 1,
  "name": "iverson",
  "nickName": "ai",
  "password": "123",
  "email": "iverson@qq.com"
}
{
  "id": 2,
  "name": "kobe",
  "nickName": "kobe",
  "password": "123",
  "email": "kobe@qq.com"
}

而後再次執行findAll接口,這時咱們能夠看到,成功返回了咱們上面插入的兩條記錄。

接着執行一次delete方法,輸入id爲1,刪除插入的第一條記錄。

而後再次執行findAll接口,這時咱們能夠看到,咱們插入的第一條記錄已經成功被刪除。

 

相關導航

Spring Boot 系列教程目錄導航

Spring Boot:快速入門教程

Spring Boot:整合Swagger文檔

Spring Boot:整合MyBatis框架

Spring Boot:實現MyBatis分頁

源碼下載

碼雲:https://gitee.com/liuge1988/spring-boot-demo.git


做者:朝雨憶輕塵
出處:https://www.cnblogs.com/xifengxiaoma/ 
版權全部,歡迎轉載,轉載請註明原文做者及出處。

相關文章
相關標籤/搜索