Spring对JDBC访问数据库同样做了深层次的封装,使用Spring的注入功能,将DataSource注册到JdbcTemplate中。JdbcTemplate在JDBC api的基础上提供了更为抽象的封装,并提供了基于方法注解的事务管理功能。
以下通过记录SpringBoot整合JdbcTemplate访问MySQL数据库来总结相关知识点。
一、数据准备
MySQL(数据库安装可以参考:http://blog.youkuaiyun.com/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
删除成功