1.基本介绍
Spring jdbcTemplate是Spring框架对JDBC的简单封装。它提供了JDBCTemplate对象,简化了JBDC的开发。
2.使用步骤
(1)导入jar包
(2)创建JdbcTemplate对象
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
(3)调用JdbcTemplate的方法来完成数据库CRUD操作
① update()
- 功能:执行增删改操作
② queryForMap()
- 功能:查询结果,并将结果集封装为map集合
- 注意:这个方法查询的结果集只能是一条记录。结果集将列名作为key,将值作为value,从而将这条记录封装成一个map集合。
③ queryForList()
- 功能:查询结果,并将结果封装为List结合
- 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中。
④ query()
- 功能:查询结果,将结果封装为JavaBean结合。
- 注意:一般我们使用 BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装。new BeanPropertyRowMapper<类型>(类型.class)。
⑤ queryForObject()
- 功能:查询结果,将结果封装为对象。
- 注意:一般用于聚合函数的查询,将返回结果封装为对象。
3.简单示例
package cn.ecarg.jdbctemplate;
import cn.ecarg.datasource.JDBCUtils.JDBCUtils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* JdbcTemplate入门
*/
public class JdbcTemplateDemo1 {
public static void main(String[] args) {
//1.导入jar包
try {
//2.获取数据库连接池对象
//2.1.加载配置文件
Properties pro = new Properties();
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//2.2获取DataSource(创建并得到连接池对象)
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
//3.创建JDBCTemplate对象
JdbcTemplate template = new JdbcTemplate(ds);
//4.调用方法执行sql
String sql = "update account set balance = 5000 where id = ?";
int count = template.update(sql,3);
System.out.println(count);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
druid.properties
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/ecargdb2?userSSL=false&serverTimezone=UTC
username=root
password=109815
# 初始化连接数
initialSize=5
# 最大连接数
maxActive=10
# 最大超时时间
maxWait=3000
maxIdle=8
minIdle=3
JdbcTemplateCRUDfont_90">4.调用JdbcTemplate的方法完成CRUD简单示例
操作的数据库表emp
(0)为了简化代码书写,将获取数据库连接池对象封装到JDBC工具类JDBCUtiles中。
JDBCUtils.java
package cn.ecarg.datasource.JDBCUtils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* Druid连接池的工具类
*/
public class JDBCUtils {
//1.定义成员变量DataSource
private static DataSource ds;
static{
try {
//1.加载配置文件
Properties pro = new Properties();
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//2.获取DataSource(创建并得到连接池对象)
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接池
* @return
*/
public static DataSource getDataSource(){
return ds;
}
}
(1)调用 update() 进行增删改操作
/**
* 1.修改1号数据的 salary 为10000
*/
@Test
public void test1(){
//1.使用JDBCUtiles工具类获取JDBCTemplate对象
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
//2.定义sql
String sql = "update emp set salary = 10000 where id = 1";
//3.执行sql
int count = template.update(sql);
System.out.println(count);
}
/**
* 2.添加一条数据
*/
@Test
public void test2(){
//1.获取JDBCTemplate对象
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
//2.定义sql语句
String sql = "insert into emp values(?,?,?,?,?,?)";
//3.执行sql
int count = template.update(sql,null,"太白金星","男",100000,"2019-10-4",2);
System.out.println(count);
}
/**
* 3.删除刚才添加的那条数据
*/
@Test
public void test3(){
//1.获取JDBCTemplate对象
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
//2.定义sql
String sql = "delete from emp where name = '太白金星'";
//3.执行sql
int count = template.update(sql);
System.out.println(count);
}
(2)调用 queryForMap() 进行查询
/**
* 4.查询id为1的记录,将其封装为Map集合
* 注意:queryFormap查询的结果集 只能是一条。
*/
@Test
public void test4(){
//1.获取JDBCTemplate对象
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
//2.定义sql
String sql = "select * from emp where id = ?";
//3.执行sql
Map<String, Object> map = template.queryForMap(sql, 1);
System.out.println(map);//{id=1, name=孙悟空, gender=男, salary=10000.0, join_date=2013-02-24, dept_id=1}
}
(3)调用 queryForList() 进行查询
/**
* 5.查询所有记录,将其封装为List
*/
@Test
public void test5(){
//1.获取JDBCTemplate对象
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
//2.定义sql
String sql = "select * from emp";
//3.执行sql
List<Map<String, Object>> mapList = template.queryForList(sql);
for(Map<String,Object> map : mapList){
System.out.println(map);
}
}
(4)调用 query() 进行查询
/**
* 6.2.查询所有记录,将其封装为Emp对象的List集合
*/
@Test
public void test6_2() {
//1.获取JDBCTemplate对象
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
//2.定义sql
String sql = "select * from emp";
//3.执行sql
List<Emp> empList = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
for(Emp emp : empList){
System.out.println(emp);
}
}
Emp.java
package cn.ecarg.domain;
import java.util.Date;
/**
* 封装Emp表数据的JavaBean
*/
public class Emp {
private Integer id;
private String name;
private String gender;
private Double salary;
private Date join_date;
private Integer dept_id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public Date getJoin_date() {
return join_date;
}
public void setJoin_date(Date join_date) {
this.join_date = join_date;
}
public Integer getDept_id() {
return dept_id;
}
public void setDept_id(Integer dept_id) {
this.dept_id = dept_id;
}
@Override
public String toString() {
return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", salary=" + salary +
", join_date=" + join_date +
", dept_id=" + dept_id +
'}';
}
}
(5)调用 queryForObject() 进行查询
/**
* 7.查询总记录数
*/
@Test
public void test7() {
//1.获取JDBCTemplate对象
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
//2.定义sql
String sql = "select count(id) from emp";
//3.执行sql
Long total = template.queryForObject(sql, Long.class);
System.out.println(total);
}