【JdbcTemplate是什么】
- JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。
- Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。
- 常用方法
- execute方法:可以用于执行任何SQL语句,一般用于执行DDL(数据库模式定义语言)语句;
- update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
- query方法及queryForXXX方法:用于执行查询相关语句;
【为什么要使用jdbctemplate】
如果直接使用JDBC的话,需要我们加载数据库驱动、创建连接、释放连接、异常处理等一系列的动作,繁琐且代码看起来不直观。而使用 jdbctemplate 则无需关注加载驱动、释放资源、异常处理等一系列操作,我们只需要提供 sql 语句并且提取最终结果即可,大大方便我们编程开发。此外,Spring提供的JdbcTempate能直接数据对象映射成实体类,不再需要获取ResultSet去获取值、赋值等操作,提高开发效率;
【jdbctemplate常用方法】
jdbcTemplate主要提供的5类方法及使用:
(1)execute() 方法:可以执行任何SQL语句,一般用于执行DDL语句。
(2)update(sqlStr, 参数列表) 方法:用于执行新增、修改、删除等语句。
(3)batchUpdate() 方法:用于执行批处理相关语句,batchUpdate方法第二参数是一个元素为 Object[] 数组类型的 List 集合。
(4)query() 方法及 queryForXXX() 方法:用于执行查询相关语句,查询结果为基本数据类型或者是单个对象一般使用 queryForObject()
queryForInt():查询一行数据并返回 int 型结果。例子:jdbcTemplate.queryForInt("select count(*) from user")
queryForObject(sqlStr, 指定的数据类型, 参数列表):查询一行任何类型的数据,最后一个参数指定返回结果类型。例子:jdbcTemplate.queryForObject("selct count(*) from user", Integer.class)
queryForMap(sqlStr, 参数列表):查询一行数据并将该行数据转换为 Map 返回。将会将列名作为key,列值作为 value 封装成 map。当查询出来的行数大于1时会报错。例子:jdbcTemplate.queryForMap("select * from user where username = ?", "aaa");
List<Map<String, Object>> queryForList(sqlStr, 参数列表):将查询结果集封装为 list 集合,该集合的每一条元素都是一个 map。
query(sqlStr, RowMapper对象, 参数列表):查询多行数据,并将结果集封装为元素是 JavaBean 的 list。(注意,指定的JavaBean的属性最好不要是基本类型,因为查询出来的结果可能是null,而null赋值为基本数据类型将会报错。比如int最好定义为Integer)
(5)call() 方法:用于执行存储过程、函数相关语句。
【你是怎么开始的呢?】
1、将下载的5个Jar包导入到项目中
2、编写代码所需的工具类JDBCUtils
package com.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的工具类 */ @SuppressWarnings("all") public class JDBCUtil { //创建Datasource对象 private static DataSource ds; static { //创建Properties对象 Properties pro = new Properties(); try { pro.load(JDBCUtil.class.getClassLoader().getResourceAsStream("druid.properties")); ds = DruidDataSourceFactory.createDataSource(pro); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * 返回链接对象 */ public static Connection getconnection() throws SQLException, SQLException { return ds.getConnection(); } /** * 关闭流 */ public static void close(Statement sta, Connection con){ if(sta != null){ try { sta.close(); } catch (SQLException e) { e.printStackTrace(); } } if(con !=null){ try { con.close();//归还连接 } catch (SQLException e) { e.printStackTrace(); } } } /** * 关闭三个流 */ public static void close(ResultSet rs, Statement sta, Connection con){ if(rs !=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(sta !=null){ try { sta.close(); } catch (SQLException e) { e.printStackTrace(); } } if(con !=null){ try { con.close();//归还连接 } catch (SQLException e) { e.printStackTrace(); } } } /** * 获取数据源 */ public static DataSource getDatasource(){ return ds; } }
3、编写JDBCTemplate基本程序
package com.Jdbctemplate; import com.Utils.JDBCUtil; import org.springframework.jdbc.core.JdbcTemplate; /** * 以下程序是使用Jdbctemplate初级方法 */ public class test { public static void main(String[] args) { //1、导入5个Jar包 //2、新建对象 JdbcTemplate jdbc = new JdbcTemplate(JDBCUtil.getDatasource()); //3、编写sql语句 String sql = "update emp set age = 88 where name=?"; //4、执行修改语句 int count = jdbc.update(sql, "ccc"); //5、打印输出 System.out.println(count); } }