SpringBoot使用JdbcTemplate操作數(shù)據(jù)庫
前言
本文是對SpringBoot使用JdbcTemplate操作數(shù)據(jù)庫的一個介紹,提供一個小的Demo供大家參考。
操作數(shù)據(jù)庫的方式有很多,本文介紹使用SpringBoot結(jié)合JdbcTemplate。
新建項目
新建一個項目。pom文件中加入Jdbc依賴,完整pom如下:
<?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>
<groupId>com.dalaoyang</groupId>
<artifactId>springboot_jdbc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot_jdbc</name>
<description>springboot_jdbc</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置文件如下:
##端口號 server.port=8888 ##數(shù)據(jù)庫配置 ##數(shù)據(jù)庫地址 spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false ##數(shù)據(jù)庫用戶名 spring.datasource.username=root ##數(shù)據(jù)庫密碼 spring.datasource.password=123456 ##數(shù)據(jù)庫驅(qū)動 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
新建一個實體類User,其中需要注意的是,User類實現(xiàn)了RowMapper類,重寫了mapRow方法,完整代碼如下:
package com.dalaoyang.entity;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @author dalaoyang
* @project springboot_learn
* @package com.dalaoyang.entity
* @email yangyang@dalaoyang.cn
* @date 2018/7/25
*/
public class User implements RowMapper<User> {
private int id;
private String user_name;
private String pass_word;
public User(int id, String user_name, String pass_word) {
this.id = id;
this.user_name = user_name;
this.pass_word = pass_word;
}
public User() {
}
public User(String user_name, String pass_word) {
this.user_name = user_name;
this.pass_word = pass_word;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getPass_word() {
return pass_word;
}
public void setPass_word(String pass_word) {
this.pass_word = pass_word;
}
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUser_name(resultSet.getString("user_name"));
user.setPass_word(resultSet.getString("pass_word"));
return user;
}
}
常用CURD操作大致使用以下三個方法:
1.execute方法,用于直接執(zhí)行SQL語句
2.update方法,用戶新增修改刪除操作
3.query方法,用于查詢方法
本文和往常一樣,用Controller進行測試,注入JdbcTemplate。完整代碼如下,下面會對測試方法進行介紹:
package com.dalaoyang.controller;
import com.dalaoyang.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author dalaoyang
* @project springboot_learn
* @package com.dalaoyang.controller
* @email yangyang@dalaoyang.cn
* @date 2018/7/25
*/
@RestController
public class UserController {
@Autowired
private JdbcTemplate jdbcTemplate;
//http://localhost:8888/createTable
@GetMapping("createTable")
public String createTable(){
String sql = "CREATE TABLE `user` (\n" +
" `id` int(11) NOT NULL AUTO_INCREMENT,\n" +
" `user_name` varchar(255) DEFAULT NULL,\n" +
" `pass_word` varchar(255) DEFAULT NULL,\n" +
" PRIMARY KEY (`id`)\n" +
") ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;\n" +
"\n";
jdbcTemplate.execute(sql);
return "創(chuàng)建User表成功";
}
//http://localhost:8888/saveUserSql
@GetMapping("saveUserSql")
public String saveUserSql(){
String sql = "INSERT INTO USER (USER_NAME,PASS_WORD) VALUES ('dalaoyang','123')";
int rows= jdbcTemplate.update(sql);
return "執(zhí)行成功,影響"+rows+"行";
}
//http://localhost:8888/saveUser?userName=lisi&passWord=111
@GetMapping("saveUser")
public String saveUser(String userName,String passWord){
int rows= jdbcTemplate.update("INSERT INTO USER (USER_NAME,PASS_WORD) VALUES (?,?)",userName,passWord);
return "執(zhí)行成功,影響"+rows+"行";
}
//http://localhost:8888/updateUserPassword?id=1&passWord=111
@GetMapping("updateUserPassword")
public String updateUserPassword(int id,String passWord){
int rows= jdbcTemplate.update("UPDATE USER SET PASS_WORD = ? WHERE ID = ?",passWord,id);
return "執(zhí)行成功,影響"+rows+"行";
}
//http://localhost:8888/deleteUserById?id=1
@GetMapping("deleteUserById")
public String deleteUserById(int id){
int rows= jdbcTemplate.update("DELETE FROM USER WHERE ID = ?",id);
return "執(zhí)行成功,影響"+rows+"行";
}
//http://localhost:8888/batchSaveUserSql
@GetMapping("batchSaveUserSql")
public String batchSaveUserSql(){
String sql =
"INSERT INTO USER (USER_NAME,PASS_WORD) VALUES (?,?)" ;
List<Object[]> paramList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
String[] arr = new String[2];
arr[0] = "zhangsan"+i;
arr[1] = "password"+i;
paramList.add(arr);
}
jdbcTemplate.batchUpdate(sql,paramList);
return "執(zhí)行成功";
}
//http://localhost:8888/getUserByUserName?userName=zhangsan0
@GetMapping("getUserByUserName")
public List getUserByUserName(String userName){
String sql = "SELECT * FROM USER WHERE USER_NAME = ?";
//寫法很多種
//下面列舉兩種寫法,都可以實現(xiàn)
//List<User> list= jdbcTemplate.query(sql,new Object[]{userName}, new BeanPropertyRowMapper(User.class));
List<User> list= jdbcTemplate.query(sql,new User(),new Object[]{userName});
return list;
}
//http://localhost:8888/getMapById?id=1
@GetMapping("getMapById")
public Map getMapById(Integer id){
String sql = "SELECT * FROM USER WHERE ID = ?";
Map map= jdbcTemplate.queryForMap(sql,id);
return map;
}
//http://localhost:8888/getUserById?id=1
@GetMapping("getUserById")
public User getUserById(Integer id){
String sql = "SELECT * FROM USER WHERE ID = ?";
User user= jdbcTemplate.queryForObject(sql,new User(),new Object[]{id});
return user;
}
}
測試方法介紹
1.createTable方法
使用execute方法創(chuàng)建User表
2.saveUserSql方法
使用update方法,傳入?yún)?shù)sql語句,直接執(zhí)行插入操作
3.saveUser方法
使用update方法,傳入sql語句和對應(yīng)字段值,進行插入操作
4.updateUserPassword方法
使用update方法,傳入sql語句和對應(yīng)字段值,進行修改操作
5.deleteUserById方法
使用update方法,傳入sql語句和對應(yīng)字段值,進行刪除操作
6.batchSaveUserSql方法
使用batchUpdate方法,傳入sql和參數(shù)集合,進行批量更新
7.getUserByUserName方法
使用query方法,傳入sql,實體對象,查詢參數(shù),這里就用到了實體類重寫的mapRow方法
8.getMapById方法
使用queryForMap方法,傳入sql和參數(shù),返回Map
9.getUserById方法
使用queryForObject方法,傳入sql,實體對象,查詢參數(shù),返回User實體類,這里也用到了實體類重寫的mapRow方法
具體使用方法還有很多,請參考文檔:
注意
出現(xiàn)下圖錯誤不要擔(dān)心,如圖

出現(xiàn)這個錯誤是因為sql在參數(shù)問號的時候多寫了引號造成的,這也是我在寫demo的時候犯下的錯誤。
源碼下載 :大老楊碼云
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JDK20?+?SpringBoot?3.1.0?+?JdbcTemplate?使用案例詳解
- SpringBoot2使用JTA組件實現(xiàn)基于JdbcTemplate多數(shù)據(jù)源事務(wù)管理(親測好用)
- SpringBoot使用JdbcTemplate訪問操作數(shù)據(jù)庫基本用法
- SpringBoot2.x入門教程之引入jdbc模塊與JdbcTemplate簡單使用方法
- SpringBoot jdbctemplate使用方法解析
- springBoot使用JdbcTemplate代碼實例
- springboot使用JdbcTemplate完成對數(shù)據(jù)庫的增刪改查功能
- 如何在SpringBoot項目中使用Oracle11g數(shù)據(jù)庫
- SpringBoot中使用JdbcTemplate訪問Oracle數(shù)據(jù)庫的案例詳解
相關(guān)文章
springboot中使用ConstraintValidatorContext驗證兩個字段內(nèi)容相同
開發(fā)修改密碼功能時,通過ConstraintValidator校驗新密碼和確認新密碼的一致性,首先定義Matches注解和DTO對象,然后創(chuàng)建MatchesValidator類實現(xiàn)驗證邏輯,對springboot驗證字段內(nèi)容相同問題感興趣的朋友一起看看吧2024-10-10
Spring Boot 整合mybatis 與 swagger2
之前使用springMVC+spring+mybatis,總是被一些繁瑣的xml配置,還經(jīng)常出錯,下面把以前的一些ssm項目改成了spring boot + mybatis,相對于來說優(yōu)點太明顯了,具體內(nèi)容詳情大家通過本文學(xué)習(xí)吧2017-08-08
Java輸入流Scanner/BufferedReader使用方法示例
這篇文章主要介紹了Java輸入流Scanner/BufferedReader使用方法,大家看示例吧2013-11-11
RestTemplate發(fā)送get和post請求,下載文件的實例
這篇文章主要介紹了RestTemplate發(fā)送get和post請求,下載文件的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
RestTemplate使用Proxy代理作為跳板發(fā)送請求
這篇文章主要為大家介紹了RestTemplate使用代理proxy作為跳板發(fā)送請求的方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-03-03

