目录
JdbcTemplate简单介绍
基本概念
依赖jar包
JdbcTemplate基本使用
案例准备
代码实现(向表中添加一条信息)
JdbcTemplate在Spring的ioc实现
JdbcTemplate基于配置的CRUD操作
1.增删改
2.查询
3.查的补充
JdbcTemplate简单介绍
基本概念
JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数,关闭连接等步骤。
JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。
在JdbcTemplate中执行SQL语句的方法大致分为3类:
- execute:可以执行所有SQL语句,一般用于执行DDL语句。
-
update:用于执行INSERT、UPDATE、DELETE等DML语句。
- queryXxx:用于DQL数据查询语句。
依赖jar包
org.springframework
spring-context
5.3.11
org.springframework
spring-tx
5.3.11
org.springframework
spring-jdbc
5.3.11
mysql
mysql-connector-java
8.0.25
JdbcTemplate基本使用
案例准备
- Account表:id(int,自增),name(String),money(float)
- 对应User类
代码实现(向表中添加一条信息)
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class JdbcTemplateDemo1 {
public static void main(String[] args) {
//准备数据源:spring的内置数据源
DriverManagerDataSource ds=new DriverManagerDataSource();
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/yz?&useSSL=false&serverTimezone=UTC&characterEncoding=utf8&characterSetResults=utf8");
ds.setUsername("root");
ds.setPassword("root");
JdbcTemplate jdbcTemplate=new JdbcTemplate();
jdbcTemplate.setDataSource(ds);
jdbcTemplate.execute("insert into account(name,money) values('小王',1000)");
}
}
JdbcTemplate在Spring的ioc实现
案例准备
- Account表:id(int,自增),name(String),money(float)
- 对应User类
代码实现(向表中添加一条信息)
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class JdbcTemplateDemo1 {
public static void main(String[] args) {
//准备数据源:spring的内置数据源
DriverManagerDataSource ds=new DriverManagerDataSource();
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/yz?&useSSL=false&serverTimezone=UTC&characterEncoding=utf8&characterSetResults=utf8");
ds.setUsername("root");
ds.setPassword("root");
JdbcTemplate jdbcTemplate=new JdbcTemplate();
jdbcTemplate.setDataSource(ds);
jdbcTemplate.execute("insert into account(name,money) values('小王',1000)");
}
}
JdbcTemplate在Spring的ioc实现
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class JdbcTemplateDemo1 {
public static void main(String[] args) {
//准备数据源:spring的内置数据源
DriverManagerDataSource ds=new DriverManagerDataSource();
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/yz?&useSSL=false&serverTimezone=UTC&characterEncoding=utf8&characterSetResults=utf8");
ds.setUsername("root");
ds.setPassword("root");
JdbcTemplate jdbcTemplate=new JdbcTemplate();
jdbcTemplate.setDataSource(ds);
jdbcTemplate.execute("insert into account(name,money) values('小王',1000)");
}
}
JdbcTemplate在Spring的ioc实现
bean.xml文件配置:
实现代码:
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
public class JdbcTemplateDemo2 {
public static void main(String[] args) {
//获取ioc容器
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//获取配置的Template对象
JdbcTemplate jdbcTemplate = ac.getBean("jdbcTemplate", JdbcTemplate.class);
//执行操作
jdbcTemplate.execute("insert into account(name,money) values('小红',2000)");
}
}
JdbcTemplate基于配置的CRUD操作
1.增删改
import com.yz.domain.Account;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class JdbcTemplateDemo2 {
public static void main(String[] args) {
//获取ioc容器
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//获取配置的Template对象
JdbcTemplate jdbcTemplate = ac.getBean("jdbcTemplate", JdbcTemplate.class);
//执行操作
//增
jdbcTemplate.update("insert into account(name,money) values (?,?)", "小红", 5000f);
//删
jdbcTemplate.update("delete from account where id=?", 10);
//改
jdbcTemplate.update("update account set name=?,money=? where id=?","老王",10000f,10);
}
}
2.查询
import com.yz.domain.Account;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class JdbcTemplateDemo2 {
public static void main(String[] args) {
//获取ioc容器
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//获取配置的Template对象
JdbcTemplate jdbcTemplate = ac.getBean("jdbcTemplate", JdbcTemplate.class);
//执行操作
//增
jdbcTemplate.update("insert into account(name,money) values (?,?)", "小红", 5000f);
//删
jdbcTemplate.update("delete from account where id=?", 10);
//改
jdbcTemplate.update("update account set name=?,money=? where id=?","老王",10000f,10);
}
}
2.查询
对于返回结果的封装,我们有两种方式,这里以查询所有money>1000f为例:
1)用自己定义的封装机制
import com.yz.domain.Account;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class JdbcTemplateDemo2 {
public static void main(String[] args) {
//获取ioc容器
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//获取配置的Template对象
JdbcTemplate jdbcTemplate = ac.getBean("jdbcTemplate", JdbcTemplate.class);
//执行操作
//查询所有
List accounts = jdbcTemplate.query("select * from account where money>?", new AccountRowMapper(), 1000f);
for (Account account : accounts) {
System.out.println(account);
}
}
}
class AccountRowMapper implements RowMapper{
@Override
public Account mapRow(ResultSet rs, int rowNum) throws SQLException {
Account account=new Account();
account.setId(rs.getInt("id"));
account.setName(rs.getString("name"));
account.setMoney(rs.getFloat("money"));
return account;
}
}
2)用spring提供的封装方法
import com.yz.domain.Account;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class JdbcTemplateDemo2 {
public static void main(String[] args) {
//获取ioc容器
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//获取配置的Template对象
JdbcTemplate jdbcTemplate = ac.getBean("jdbcTemplate", JdbcTemplate.class);
//执行操作
//查
//1.查询所有
List accounts = jdbcTemplate.query("select * from account where money>?", new BeanPropertyRowMapper(Account.class), 1000f);
for (Account account : accounts) {
System.out.println(account);
}
}
}
3.查的补充
1)查询单条信息和查询返回一行一列
import com.yz.domain.Account;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class JdbcTemplateDemo2 {
public static void main(String[] args) {
//获取ioc容器
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//获取配置的Template对象
JdbcTemplate jdbcTemplate = ac.getBean("jdbcTemplate", JdbcTemplate.class);
//执行操作
//查
//1.查询一个
List account = jdbcTemplate.query("select * from account where id=?", new BeanPropertyRowMapper(Account.class), 11);
System.out.println(account.isEmpty()?"未找到结果":account.get(0));
System.out.println("------------------------------------------");
//2.查询返回一行一列
Long query = jdbcTemplate.queryForObject("select count(*) from account where money > ?", Long.class, 1000f);
System.out.println(query);
}
}



