Spring對JDBC訪問數據庫同樣做了深層次的封裝,使用Spring的注入功能,將DataSource註冊到JdbcTemplate中。JdbcTemplate在JDBC api的基礎上提供了更爲抽象的封裝,並提供了基於方法註解的事務管理功能。
以下通過記錄SpringBoot整合JdbcTemplate訪問MySQL數據庫來總結相關知識點。
一、數據準備
MySQL(數據庫安裝可以參考:http://blog.csdn.net/weixin_41557632/article/details/78943248)中創建名爲test的數據庫,在數據庫中執行以下腳本,創建名爲t_user的表,並初始化數據。
USE test;
CREATE TABLE t_user(
t_id INT PRIMARY KEY AUTO_INCREMENT,#部門編號 整形 主鍵 自增長
t_name VARCHAR (30),
t_age INT (10),
t_address VARCHAR (150)
)ENGINE=INNODB DEFAULT CHARSET=jbk;
INSERT INTO `t_user` (`t_id`, `t_name`, `t_age`, `t_address`) VALUES('3','小明','23','北京市');
INSERT INTO `t_user` (`t_id`, `t_name`, `t_age`, `t_address`) VALUES('4','小毛','18','北京市');
二、SpringBoot整合JdbcTemplate
開發工具IntelliJ IDEA,創建名稱爲springBoot-demo的工程,目錄結構如下:
1.POM文件引入依賴
添加JdbcTemplate依賴。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
因爲我們使用的是MySQL,所以還需要引入MySQL的依賴。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
2.配置數據源
因爲使用MySQL訪問數據庫,所以我們需要修改applicable.properties文件,配置MySQL數據源。
spring.datasource.username=root
spring.datasource.password=1q2w3e4r
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
3.編寫代碼完成簡單的CRUD操作
src/main/java 目錄下創建service目錄,新建JdbcService類,JdbcService類中直接使用@Autowired註解引入JdbcTemplate使用,編寫CRUD相應方法。
package com.mxy.springboot;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.stereotype.Service;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class JdbcService {
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* 查詢
* */
public List findAll(){
String listSql = "select * from t_user";
final List result = new ArrayList();
jdbcTemplate.query(listSql, new RowCallbackHandler() {
@Override
public void processRow(ResultSet rs) throws SQLException {
Map row = new HashMap();
row.put("id", rs.getInt("t_id"));
row.put("name", rs.getString("t_name"));
row.put("age", rs.getInt("t_age"));
row.put("address", rs.getString("t_address"));
result.add(row);
}});
return result;
}
/**
* 新增
* */
public int save(String name,String age,String address){
String insertSql = "insert into t_user(t_name,t_age,t_address) values (?,?,?)";
int count = jdbcTemplate.update(insertSql, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement pstmt) throws SQLException {
pstmt.setObject(1, name);
pstmt.setObject(2, age);
pstmt.setObject(3, address);
}
});
return count;
}
/**
* 更新
* */
public int update(String id,String name){
String insertSql = "update t_user set t_name = ? where t_id = ?";
int count = jdbcTemplate.update(insertSql, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement pstmt) throws SQLException {
pstmt.setObject(1, name);
pstmt.setObject(2, id);
}
});
return count;
}
/**
* 刪除
* */
public int delere(String id){
return jdbcTemplate.update("delete from t_user where t_id=?", new Object[] {id});
}
}
src/main/java 目錄下創建Controller控制器目錄結構,新建JdbcController控制器類,編寫添加CRUD相應方法。
package com.mxy.springboot.controller;
import com.mxy.springboot.JdbcService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping(value = "/jdbc")
public class JdbcController {
@Autowired
private JdbcService jdbcService;
/**
*查詢方法,返回表中所有值
* */
@RequestMapping(value = "/list",method = RequestMethod.GET)
public List list(){
return jdbcService.findAll();
}
/**
*新增記錄,成功返回save success,失敗返回save failed
* */
@RequestMapping(value = "/save",method = RequestMethod.GET)
public String save(String name,String age,String address){
int count = jdbcService.save(name,age,address);
if (count>0){
return "save success";
}else{
return "save failed";
}
}
/**
*更新記錄名稱字段,成功返回update name success,失敗返回update name failed
* */
@RequestMapping(value = "/update",method = RequestMethod.GET)
public String update(String id,String name){
int count = jdbcService.update(id,name);
if (count>0){
return "update name success";
}else{
return "update name failed";
}
}
/**
*刪除,返回剩餘所有記錄
* */
@RequestMapping(value = "/delete",method = RequestMethod.GET)
public List delete(String id){
jdbcService.delere(id);
return jdbcService.findAll();
}
}
啓動程序,驗證結果。
- 查詢方法請求地址:http://localhost:8080/jdbc/list
- 新增記錄請求地址http://localhost:8080/jdbc/save?name=周星馳&age=50&address=中國香港
查看數據庫驗證
新增成功
- 更新記錄名稱請求地址:http://localhost:8080/jdbc/update?id=4&name=成龍
產看數據庫驗證
更新成功
- 刪除記錄請求地址:http://localhost:8080/jdbc/delete?id=6
刪除成功