JDBCTemplate

Posted nyankosensei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBCTemplate相关的知识,希望对你有一定的参考价值。

1. 介绍

  JDBCTemplate是Spring框架提供的对JDBC封装对象,目的是简化JDBC开发,是因为传统JDBC代码有着大量的重复。

 

2. 加载jar包

  如果是Maven/Gradle项目则从Maven中央仓库配置,如果是要手动导入,则从FTP下载。

  (1) Apache Commons Logging:http://repo1.maven.org/maven2/commons-logging/commons-logging/

  <!-- Maven -->
  <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
  <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
  </dependency>

  // Gradle
  // https://mvnrepository.com/artifact/commons-logging/commons-logging
  compile group: ‘commons-logging‘, name: ‘commons-logging‘, version: ‘1.2‘

  (2) Spring Beans:http://repo1.maven.org/maven2/org/springframework/spring-beans/

  <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.1.9.RELEASE</version>
  </dependency>

  // https://mvnrepository.com/artifact/org.springframework/spring-beans
  compile group: ‘org.springframework‘, name: ‘spring-beans‘, version: ‘5.1.9.RELEASE‘

  (3) Spring Core:http://repo1.maven.org/maven2/org/springframework/spring-core/

  (4) Spring JDBC:http://repo1.maven.org/maven2/org/springframework/spring-jdbc/

  (5) Spring Transaction:http://repo1.maven.org/maven2/org/springframework/spring-tx/

    springframework的这几个包的区别就是<artifactId>标签不同。

 

3. 使用JDBCTemplate

  配合JDBCUtils,JDBCTemplate提供了多种功能的封装,极大的简化了语句,只要关心SQL语句即可。

  (1) 创建JDBCTemplate对象

    JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    可以将创建对象语句做成员变量,使用private修饰,这样类中每一个业务就不需要重复创建对象,可以直接使用template了。

  (2) 使用JdbcTemplate提供的方法

    1) upadate(SQL语句, 参数列表):执行DML语句,执行添、删、改语句。返回影响行数。

    tring sql = "UPDATE user SET age = ? WHERE id = ?";
    int count = template.update(sql, 60, 1);

    2) queryForMap(SQL语句, 参数列表):执行DQL语句,执行查询语句。返回被封装到Map集合的数据集。

    /* 注意,这个方法将列名和值作为键值对封装为Map集合
    只能查询唯一一条结果集,如果是多条结果一定不能使用这个方法 */
    String sql = "SELECT * FROM user WHERE id = ?";
    Map<String,Object> map = template.queryForMap(sql, 1);
    System.out.println(map);

    3) queryForList(SQL语句, 参数列表):执行DQL语句,执行查询语句。返回被封装到List集合的数据集。

    /* 用这个方法可以打印多条封装成Map集合的结果集
    其实就是将每一条记录封装成一个Map集合,然后将Map集合装到List集合中 */
    String sql = "SELECT * FROM user WHERE id = ? OR id = ?";
    List<Map<String,Object>> list = template.queryForList(sql, 1, 2);
    for(Map<String,Object> stirngObjectMap : list) 
      System.out.println(stirngObjectMap);
    

    4) query(SQL语句, 参数列表):执行DQL语句,执行查询语句。返回的数据集封装到JavaBean对象。

    /* 使用提供的BeanPropertyRowMapper方法,完成数据到JavaBean的自动封装
    注意:domain类中的数据类型一定要是引用数据类型,否则可能会出错 */
    String sql = "SELECT * FROM user";
    List<类型> list = template.query(sql, 
        new BeanPropertyRowMapper<类型>(类型.class));
    for(类型 user : list)
      System.out.println(user);
    
    /* domain 类 */
    public class User 
        private Integer id;

        public Integer getId()  return id; 

        public void setId(Integer id)  this.id = id; 

        @Override
        public String toString() 
            return "User" + "id=" + id + ‘‘;
        
    

    5) queryForObject(SQL语句, 参数列表):执行DQL语句,执行查询语句。返回的数据集封装为对象。

    /* queryForObject方法一般都是执行聚合函数的方法 */
    String sql = "SELECT COUNT(id) from user";
    Long total = template.queryForObject(sql, Long.class);
    System.out.println(total);

以上是关于JDBCTemplate的主要内容,如果未能解决你的问题,请参考以下文章

spring

spring

spring

获取单条记录的统一模板

ActiveMq-拦截创建消息队列

Spring之事务操作(配置文件)