SpringBoot使用JdbcTemplate操作數(shù)據(jù)庫(kù)
前言
本文是對(duì)SpringBoot使用JdbcTemplate操作數(shù)據(jù)庫(kù)的一個(gè)介紹,提供一個(gè)小的Demo供大家參考。
操作數(shù)據(jù)庫(kù)的方式有很多,本文介紹使用SpringBoot結(jié)合JdbcTemplate。
新建項(xiàng)目
新建一個(gè)項(xiàng)目。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>
配置文件如下:
##端口號(hào) server.port=8888 ##數(shù)據(jù)庫(kù)配置 ##數(shù)據(jù)庫(kù)地址 spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false ##數(shù)據(jù)庫(kù)用戶名 spring.datasource.username=root ##數(shù)據(jù)庫(kù)密碼 spring.datasource.password=123456 ##數(shù)據(jù)庫(kù)驅(qū)動(dòng) spring.datasource.driver-class-name=com.mysql.jdbc.Driver
新建一個(gè)實(shí)體類User,其中需要注意的是,User類實(shí)現(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操作大致使用以下三個(gè)方法:
1.execute方法,用于直接執(zhí)行SQL語(yǔ)句
2.update方法,用戶新增修改刪除操作
3.query方法,用于查詢方法
本文和往常一樣,用Controller進(jìn)行測(cè)試,注入JdbcTemplate。完整代碼如下,下面會(huì)對(duì)測(cè)試方法進(jìn)行介紹:
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 = ?";
//寫法很多種
//下面列舉兩種寫法,都可以實(shí)現(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;
}
}
測(cè)試方法介紹
1.createTable方法
使用execute方法創(chuàng)建User表
2.saveUserSql方法
使用update方法,傳入?yún)?shù)sql語(yǔ)句,直接執(zhí)行插入操作
3.saveUser方法
使用update方法,傳入sql語(yǔ)句和對(duì)應(yīng)字段值,進(jìn)行插入操作
4.updateUserPassword方法
使用update方法,傳入sql語(yǔ)句和對(duì)應(yīng)字段值,進(jìn)行修改操作
5.deleteUserById方法
使用update方法,傳入sql語(yǔ)句和對(duì)應(yīng)字段值,進(jìn)行刪除操作
6.batchSaveUserSql方法
使用batchUpdate方法,傳入sql和參數(shù)集合,進(jìn)行批量更新
7.getUserByUserName方法
使用query方法,傳入sql,實(shí)體對(duì)象,查詢參數(shù),這里就用到了實(shí)體類重寫的mapRow方法
8.getMapById方法
使用queryForMap方法,傳入sql和參數(shù),返回Map
9.getUserById方法
使用queryForObject方法,傳入sql,實(shí)體對(duì)象,查詢參數(shù),返回User實(shí)體類,這里也用到了實(shí)體類重寫的mapRow方法
具體使用方法還有很多,請(qǐng)參考文檔:
注意
出現(xiàn)下圖錯(cuò)誤不要擔(dān)心,如圖

出現(xiàn)這個(gè)錯(cuò)誤是因?yàn)閟ql在參數(shù)問(wèn)號(hào)的時(shí)候多寫了引號(hào)造成的,這也是我在寫demo的時(shí)候犯下的錯(cuò)誤。
源碼下載 :大老楊碼云
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JDK20?+?SpringBoot?3.1.0?+?JdbcTemplate?使用案例詳解
- SpringBoot2使用JTA組件實(shí)現(xiàn)基于JdbcTemplate多數(shù)據(jù)源事務(wù)管理(親測(cè)好用)
- SpringBoot使用JdbcTemplate訪問(wèn)操作數(shù)據(jù)庫(kù)基本用法
- SpringBoot2.x入門教程之引入jdbc模塊與JdbcTemplate簡(jiǎn)單使用方法
- SpringBoot jdbctemplate使用方法解析
- springBoot使用JdbcTemplate代碼實(shí)例
- springboot使用JdbcTemplate完成對(duì)數(shù)據(jù)庫(kù)的增刪改查功能
- 如何在SpringBoot項(xiàng)目中使用Oracle11g數(shù)據(jù)庫(kù)
- SpringBoot中使用JdbcTemplate訪問(wèn)Oracle數(shù)據(jù)庫(kù)的案例詳解
相關(guān)文章
java基于servlet實(shí)現(xiàn)文件上傳功能
這篇文章主要為大家詳細(xì)介紹了java基于servlet實(shí)現(xiàn)文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
Mybatis Plus條件構(gòu)造器ConditionConstructor用法實(shí)例解析
這篇文章主要介紹了Mybatis Plus條件構(gòu)造器ConditionConstructor用法實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Java零基礎(chǔ)教程之do-while循環(huán)語(yǔ)句實(shí)例
Java中的do-while循環(huán)是一種后測(cè)試循環(huán)語(yǔ)句,它類似于while循環(huán),但它先執(zhí)行循環(huán)體中的代碼,然后再進(jìn)行條件判斷,無(wú)論條件是否滿足,至少會(huì)執(zhí)行一次循環(huán)體中的代碼,這篇文章主要給大家介紹了關(guān)于Java零基礎(chǔ)教程之do-while循環(huán)語(yǔ)句的相關(guān)資料,需要的朋友可以參考下2024-09-09
Java實(shí)現(xiàn)excel動(dòng)態(tài)列導(dǎo)出的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)excel動(dòng)態(tài)列導(dǎo)出,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
Maven+SSM框架實(shí)現(xiàn)簡(jiǎn)單的增刪改查
這篇文章主要介紹了Maven+SSM框架實(shí)現(xiàn)簡(jiǎn)單的增刪改查,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
java?JVM-clinit指令實(shí)現(xiàn)原理面試精講
這篇文章主要介紹了java?JVM-clinit指令實(shí)現(xiàn)原理面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10

