select语句如何在Spring中使用JdbcTemplate.query(String query,ResultSetExtractor rs)方法

时间:2017-01-04 11:32:11

标签: java spring

使用Spring JdbcTemplate我执行这样的select语句。

JdbcTemplate jTemplate = container.getBean("jt", JdbcTemplate.class);
String query = "select *from TB_CUMM_DEAL_CCY_DET where REF_NUM ='1452454'";
jTemplate.query(query, new MyResultSetExtractor());

在此代码中jTemplate.query(query, new MyResultSetExtractor());如何执行。请解释一下。

谢谢。

MyResultSetExtractor.java:

public class MyResultSetExtractor implements ResultSetExtractor {

    @Override
    public Object extractData(ResultSet rs) throws SQLException,
            DataAccessException {
        String refNo = null;
        while(rs.next()) {
            refNo = rs.getString(2);
            System.out.println(refNo);
        }

        return refNo;
    }
}

1 个答案:

答案 0 :(得分:0)

ResultSetExtractor将只返回整个ResultSet的一个结果对象。这是与RowMappe的主要区别,RowMappe每行检索一个对象。

你在ResultSetExtractor中做的是迭代每一行(rs.next())。在那里,你必须创建代表整行的对象。为此,您有get方法提供一种特定的数据类型,并且还接收一个指示列号的int或一个指示列名的String作为参数。

让我们举一个简单的例子。我们在一个名为Person的数据库中有一个表,它有两个String列:name和surname。

您的对象是:

  var yourEntity = new YourEntity() { Id = id, DateProp = dateTime };
  using (var db = new MyEfContextName())
  {
    db.YourEntities.Attach(yourEntity);
    db.Entry(yourEntity).Property(x => x.DateProp).IsModified = true;
    db.Configuration.ValidateOnSaveEnabled = false;
    db.SaveChanges();
  }

您的ResultSetExctractor:

public class Person {

    private String name;
    private String surname;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

}

更简单的替代方案,使用RowMapper:

public class MyResultSetExtractor implements ResultSetExtractor<List<Person>> {

    @Override
    public List<Person> extractData(ResultSet rs) throws SQLException,
            DataAccessException {
        List<Person> result = new ArrayList<>();
        while(rs.next()) {
            Person person = new Person();
            person.setName(rs.getString(1));
            person.setSurname(rs.getString("surname"));
            result.add(person);
        }

        return result;
    }
}