Spring JDBC Template ,以及使用preparedstatements传参数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/github_38151745/article/details/84197389

JdbcTemplate 被定义为一个Spring 管理的bean 该bean 是线程安全的,并且可以被不同的数据访问对象所共享,因此被定义为单利,JdbcTemplate 的bean主要依赖项为一个DataSource 对象, 所以,需要把创建的dataSource 对象注入到JdbcTemplat
spring 将数据访问的样本代码抽象到模板类中 spring 为JDBC 提供了两种类型的模板类供给选择
1 .JdbcTemplate :最基本的jdbc模板,这个模板支持简单的数据库访问功能,以及基于索引参数的查询
2 NamedParameterJdbcTemplate 查询时可以将值以命名参数的形式绑定到SQL 中,而不是使用简单的索引参数
一般来说,jdbcTemplate 是最好的选择方案, 只有在需要使用命名参数的时候,才需要使用到NamedParameterJdbcTemplate

JdbcTemplate 查询
JdbcTemplate 通过不同的重载白本提供了各种方法来执行查询,并将查询结果作为应用程序中不同对象类型进行处理,有 query() queryForObject() queryForList() queryForMap() queryForRowSet() 方法以及他们多个不同的重载方法(接收不同输入参数,比如 查询字符串,查询输入参数值,类型,结果对象类型等)
JdbcTemplate 的query() queryForObject() 方法完全遵循了相同的方法,他们接收查询字符串,查询参数以及RowMapper 类型的回调对象作为输入参数
JdbcTemplate 可以使用RowMapper 将ResultSet 中返回的每一行映射到一个结果对象。通常作为一个输入参数传递给JdbcTemplate ,当然也可以使用new BeanPropertyRowMapper<>(User.class) 直接输入对象类来返回结果对象
queryForList() queryForMap() 方法采用了一种更简单方法,queryForList() 方法执行查询并换回一个List 。queryForMap() 返回一个Map 该map 的键为列名

JdbcTemplate 插入,更新 删除
所有的入,更新 删除 SQL 操作都是使用JdbcTemplate 的update方法完成

当然jdbctemplate也支持使用preparedstatements 来传参数 ,首先先区分 preparedstatements 和statement的区别在与什么地方
statement 在执行一个查询的时候,数据库将首先查询字符串,然后在执行之前进行解析,编译以及计算执行计划, 如果多次执行相同的查询,那么该预处理步骤就会成为一个性能瓶颈,而如果使用preparedstatements ,则该预处理不走仅被执行一次,因此,会减少执行时间,相比于每次动态创建查询字符串,使用preparedstatements 的另外一个好处就是保护系统免受sql 注入供给,preparedstatements 执行的查询使用起来更安全
jdbcTemplate 对preparedstatements 提供了方法 主要是将普通的参数改为 PreparedStatementSetter 来设置传入的参数 方法如下

query(String sql, PreparedStatementSetter pss, RowMapper<T> rowMapper)
  List<User> userList = jdbcTemplate.query("select * from user where id = ?", preparedStatement -> preparedStatement.setInt(1,id), new BeanPropertyRowMapper<>(User.class));
query(PreparedStatementCreator psc, RowMapper<T> rowMapper)

jdbctempleate demo gitjdbctempleate

猜你喜欢

转载自blog.csdn.net/github_38151745/article/details/84197389
今日推荐