JDBCTemplate是Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发。想少斜JDBC的代码可以学习ORM框架
* update():执行DML语句。增、删、改语句
* queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
* 注意:这个方法查询的结果集长度只能是1
* queryForList():查询结果将结果集封装为list集合
* 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
* query():查询结果,将结果封装为JavaBean对象
* query的参数:RowMapper
* 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
* new BeanPropertyRowMapper<类型>(类型.class)
* queryForObject:查询结果,将结果封装为对象
* 一般用于聚合函数的查询
注:因为spring只是简单封装JDBC的操作,所以还是需要java bean文件与utils工具类
package com.zjc.etu.day01.Entity;
public class User {
private Integer id;
private String name;
private Integer age;
private Integer status;
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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", status=" + status +
'}';
}
}
这里使用配置Druid数据池的方式配置工具类
package com.zjc.etu.day01.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* Druid连接池的工具类
*/
public class JDBCUtils {
//1.定义成员变量 DataSource
private static DataSource ds ;
static{
try {
//1.加载配置文件
Properties pro = new Properties();
pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
//2.获取DataSource
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
/**
* 释放资源
*/
public static void close(Statement stmt,Connection conn){
/* if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();//归还连接
} catch (SQLException e) {
e.printStackTrace();
}
}*/
close(null,stmt,conn);
}
public static void close(ResultSet rs , Statement stmt, Connection conn){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();//归还连接
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 获取连接池方法
*/
public static DataSource getDataSource(){
return ds;
}
}
package com.zjc.etu.day01;
import com.zjc.etu.day01.Entity.User;
import com.zjc.etu.day01.utils.JDBCUtils;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
import java.util.Map;
public class DemoJDBCTemplate {
public static void main(String[] args) {
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "update think_user set age = 22 where id = 7";
//3. 执行sql
int count = template.update(sql);
System.out.println(count);
}
@Test
//修改数据
public void test1(){
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "update think_user set age = 21 where id = 7";
int count = template.update(sql);
System.out.println(count);
}
@Test
//添加数据
public void test2(){
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "insert into think_user(name,age,status) values(?,?,?)";
int count = template.update(sql, "王五", 22, 0);
System.out.println(count);
}
@Test
//将结果转发为map集合,但是只能处理1条数据
public void test3(){
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from think_user where id = ?";
Map<String, Object> stringObjectMap = template.queryForMap(sql, 7);
System.out.println(stringObjectMap);//{id=7, name=李四, age=22, status=0}
}
@Test
//将结果转发为list集合
public void test4(){
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from think_user";
List<Map<String, Object>> lists = template.queryForList(sql);
for (Map<String, Object> stringObjectMap : lists) {
System.out.println(stringObjectMap);
//{id=7, name=李四, age=22, status=0}
//{id=8, name=张三, age=20, status=1}
//{id=9, name=王五, age=22, status=0}
}
}
@Test
//将查询结果封装为java bean的对象集合,也就是JavaBean文件里面 重写的tostring形式的集合
/*
数据库默认值一般为null,
而java的基本数据类型都有默认,
与数据库的默认值null冲突,
所以这里需要将JavaBean里面数据路类型改为引用数据类型
*/
public void test5(){
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from think_user";
List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
for (User user : users) {
System.out.println(user);
//User{id=7, name='李四', age=22, status=0}
//User{id=8, name='张三', age=20, status=1}
//User{id=9, name='王五', age=22, status=0}
}
}
@Test
//使用聚合函数
public void test6(){
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select max(id) from think_user";
Integer integer = template.queryForObject(sql, Integer.class);
// queryForObject的第二个参数为sql语句返回的数据类型
System.out.println(integer);
}
}
想要简化jdbc的操作可以学习Java的orm框架