JdbcTemplate 如何使用在 Mapper 中实现 RowMapper 返回列表?

大家晚上好,我正在尝试使用控制器/服务/Dao/DaoImpl/ 和 Mapper 来实现一个 jdbctemplate 模型......但是通过模型我看到映射器需要实现 RowMapper 或 ParameterizedRowMapper 并且两者都有一个没有的 maprow 方法返回一个列表。因为我需要一个列表,所以我在映射器中实现了一个方法来获取我需要的列表。但我不知道该怎么称呼它。在 customerList 方法中,我必须像这样在查询中传递 CustomerMapper:

jdbcTemplate.query (sql, new CustomerMapper(), id);

并且客户映射器必须实现 RowMapper 或 ParameterizedRowMapper 以便 jdbcTemplate.query 接受它,并且必须与 RowMapper 或 ParameterizedRowMapper 一起使用 maprow 方法。

当我在进入 CustomerMapper 类时通过 listCustomer 调用 Mapper 方法时,它会自动进入第一个 mapRow 方法,并且不会进入我想要的 listCustomer 方法,它会返回我需要的列表。

知道如何帮助我做到这一点吗?

我需要返回客户列表。只是这个!但是按照这种形式的实施......

抱歉,我没有对示例进行完整查询,但是如果解释不当,我很抱歉。好吧,我需要的是传递客户编号以在购买表中进行选择,并将该客户的所有购买带给我。

例如。

Select * from table purchases p where p.customerid = 4;

这将是查询,所以让我们假设它返回 5 条记录。我希望映射器将购买对象(不是客户)的清单与该客户进行的 5 次购买返回给我。

现在明白了吗?

我将树立榜样以便更好地理解。


犯罪嫌疑人X
浏览 322回答 3
3回答

心有法竹

我找到了解决方案......这个例子与另一个实体,但它有效!           String sqlSelectQuery = "SELECT name, email, address, telephone FROM contact";52            List listContacts = jdbcTemplateObj.query(sqlSelectQuery, new RowMapper() {53                public Contact mapRow(ResultSet result, int rowNum) throws SQLException {54                    Contact contactObj = new Contact();55                    contactObj.setName(result.getString("name"));56                    contactObj.setEmail(result.getString("email"));57                    contactObj.setAddress(result.getString("address"));58                    contactObj.setPhone(result.getString("telephone"));59                    return contactObj;60                }61            });6263            // Displaying The SQL Records64            for (Contact contactDetail : listContacts) {65                System.out.println(contactDetail.toString());66            }67

精慕HU

似乎问题在于对 RowMapper 的理解。由于 Jdbc 不知道您希望如何将行映射到对象,因此它会要求您提供映射。所以 RowMapper 的唯一责任是提供这个映射。没有其他的。在mapRow下面更改您的喜欢。public Customer mapRow(ResultSet rs, int arg1) throws SQLException {     Customer customer = null;     if (rs.getString("ID") != null){        customer = new Customer()        customer.setEtpId(rs.getString("ID"));        ......        ......     }     return customer;}JdbcTemplate 将应用此映射器来映射具有对象的行。如果您有多行,它将Customer使用此 rowMapper将所有行转换为s的列表。JdbcTemplate 将透明地执行此操作,因此您无需担心。编辑:编辑后,您解释说您需要来自purchases表的给定客户的购买信息列表。对于这种情况,您实际上需要一个PurchaseRowMapper. 这将purchases使用名为 (maybe) 的类映射表中的记录PurchaseInformation。这将返回一个PurchaseInformation对象列表。

慕桂英3389331

Rowmapper 实现:public class CustomerMapper implements RowMapper<Customer>{&nbsp; List<Customer> customerList = new ArrayList<Customer>();&nbsp;public Customer mapRow(ResultSet rs, int arg1) throws SQLException {&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; Customer customer = new Customer();&nbsp; &nbsp; while (rs.next()) {&nbsp; &nbsp; &nbsp; &nbsp; if (rs.getString("ID") != null)&nbsp; &nbsp; &nbsp; &nbsp; customerList.add(rs.getString("ID"));&nbsp; &nbsp; }&nbsp; &nbsp; customer.setEtpId(customerList);&nbsp; &nbsp; return customer;&nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java