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接口,這時咱們能夠看到,咱們插入的第一條記錄已經成功被刪除。
碼雲:https://gitee.com/liuge1988/spring-boot-demo.git
做者:朝雨憶輕塵
出處:https://www.cnblogs.com/xifengxiaoma/
版權全部,歡迎轉載,轉載請註明原文做者及出處。