JdbcTemplate概念
JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数,关闭连接等步骤。
JdbcTemplate就是JDBC的封装,目的是使JDBC更加易于使用。
JdbcTemplate处理了资源的建立和释放。
● 它帮助我们避免一些常见的错误,比如忘了总要关闭连接。
● 它运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。
方法:
public JdbcTemplate(DataSource dataSource)
创建JdbcTemplate对象,方便执行SQL语句
public void execute(final String sql)
execute可以执行所有SQL语句,因为没有返回值,一般用于执行DML语句。
在JdbcTemplate中执行SQL语句的方法大致分为3类:
1. void execute(String sql):
可以执行所有SQL语句,一般用于执行DDL(数据库定义语言)语句。
2.int update(String sql, Object…args):
用于执行INSERT、UPDATE、DELETE等DML语句。
sql:表示sql语句,允许有?占位符
args:一个可变参数,表示用来替换问号占位符的实际参数
3. queryXxx:用于DQL数据查询语句。
T queryForObject(String sql, Class requiredTyoe, Object…args)
List query(String sql, RowMapper, Object…args)
JdbcTemplate使用过程
使用步骤
- 准备DruidDataSource连接池
- 导入依赖的jar包
- spring-beans-5.0.0.RELEASE.jar
- spring-core-5.0.0.RELEASE.jar
- spring-jdbc-5.0.0.RELEASE.jar
- spring-tx-5.0.0.RELEASE.jar
- commons-logging-1.2.jar
- 创建JdbcTemplate对象,传入Druid连接池
- 调用execute、update、queryXxx等方法
案例代码
execute创建
/*
* 使用jdbcTemplate执行DDL
*
* 步骤
* 1.创建对象
* 2.调用方法执行sql语句*/
public class DemoTemplate {
public static void main(String[] args) {
//参数需要连接池对象,M那么以后jdbcT的操作sql均是从这个连接池中获取的连接
JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource());
String sql = “CREATE TABLE cate(” +
“cid INT PRIMARY KEY AUTO_INCREMENT,” +
“cname VARCHAR(20),” +
“details VARCHAR(10)” +
“)”;
//执行sql语句
jdbcTemplate.execute(sql);
}
}
JdbcTemplate实现增删改
public int update(final String sql, Object… args)
用于执行INSERT
、UPDATE
、DELETE
等DML语句。
使用步骤
1.创建JdbcTemplate对象
2.编写SQL语句
3.使用JdbcTemplate对象的update方法进行增删改
案例代码
public class DemoTemplateIDU {
public static void main(String[] args) {
//insertMethod();
updateMethod();
//deleteMethod();
}
//删除
public static void deleteMethod(){
JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource()) ;
String sql = "delete from cate where cid = ?";
jdbcTemplate.update(sql,4);
}
//修改
public static void updateMethod(){
//创建jdbcTemplate对象
JdbcTemplate jdbcTmeplate = new JdbcTemplate(DruidUtil.getDataSource());
//编写sql语句
String sql = "update cate set cname = ?, details = ? where cid = ?";
//将可变参替换成数据 --- 更清晰
Object[] params = {"蔬菜","新鲜的蔬菜",3};
jdbcTmeplate.update(sql,"蔬菜","新鲜的蔬菜",3);
}
//执行添加
public static void insertMethod(){
//创建对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource());
//编写sql
String sql = "insert into cate (cname , details) values (? , ?)";
jdbcTemplate.update(sql,"家用电器0","和只新股");
jdbcTemplate.update(sql,"家用电器1","和只新股");
jdbcTemplate.update(sql,"家用电器2","和只新股");
jdbcTemplate.update(sql,"家用电器3","和只新股");
jdbcTemplate.update(sql,"家用电器4","和只新股");
}
}
JdbcTemplate实现查询
0.查询的结果是单个值
public T queryForObject(String sql, Class requiredType, Object… args)
执行查询语句,返回一个指定类型的数据。(得到什么就传入该类型的class文件)
使用步骤
- 创建JdbcTemplate对象
- 编写查询的SQL语句
- 使用JdbcTemplate对象的queryForObject方法,并传入需要返回的数据的类型
输出结果
//单个查询
public static void queryForObjectMethod(){
JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource());
String sql = “select cname from cate where cid = ?”;
String s = jdbcTemplate.queryForObject(sql, String.class,2);
System.out.println(s);
}
}
1 匿名内部类
public List query(String sql, RowMapper rowMapper, Object… args)
执行查询语句,返回一个List集合,List中存放的是RowMapper指定类型的数据。
* 参数sql:sql语句
* 参数rowMapper:一个接口,可以匿名内部类
* 参数args:替换?
/*
* 参数sql:sql语句
* 参数rowMapper:一个接口,可以匿名内部类
* 参数args:替换?
* */
public class DemoTemplateQuery {
public static void main(String[] args) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource());
String sql = “select * from cate”;
List list = jdbcTemplate.query(sql, new RowMapper() {
@Override
public Cate mapRow(ResultSet rs, int i) throws SQLException {
//rs –> 每行结果集
//i –> 第几次执行的mapRow方法
Cate cate = new Cate();
//为cate的属性赋值
cate.setCid(rs.getInt(“cid”));
cate.setCname(rs.getString(“cname”));
cate.setDetails(rs.getString(“details”));
return cate;
}
});
for (Cate cate : list) {
System.out.println(cate);
}
}
}
2.TemplateBean
2.public class BeanPropertyRowMapper implements RowMapper
BeanPropertyRowMapper类实现了RowMapper接口
query使用BeanPropertyRowMapper做映射返回对象
使用步骤
- 定义Product类
- 创建JdbcTemplate对象
- 编写查询的SQL语句
使用JdbcTemplate对象的query方法,并传入BeanPropertyRowMapper对象
//查询整个表
public static void queryMethod(){
JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource());
String sql = “select * from cate”;
List list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Cate.class));
for (Cate cate : list) {
System.out.println(cate);
}
}
查询总结:
queryForObject: 对于查询结果只有一个的
query: 查询结果多个,返回list集合(需创建数据库对象类)