为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

犯罪嫌疑人X 2021-09-03 16:23:10
大家晚上好,我正在尝试使用控制器/服务/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 次购买返回给我。现在明白了吗?我将树立榜样以便更好地理解。
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

我找到了解决方案......这个例子与另一个实体,但它有效!


           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

            });

62


63

            // Displaying The SQL Records

64

            for (Contact contactDetail : listContacts) {

65

                System.out.println(contactDetail.toString());

66

            }

67


查看完整回答
反对 回复 2021-09-03
?
精慕HU

TA贡献1845条经验 获得超8个赞

似乎问题在于对 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对象列表。


查看完整回答
反对 回复 2021-09-03
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

Rowmapper 实现:


public class CustomerMapper implements RowMapper<Customer>{


  List<Customer> customerList = new ArrayList<Customer>();


 public Customer mapRow(ResultSet rs, int arg1) throws SQLException {      

  Customer customer = new Customer();

    while (rs.next()) {

        if (rs.getString("ID") != null)

        customerList.add(rs.getString("ID"));

    }

    customer.setEtpId(customerList);

    return customer;

  }

}


查看完整回答
反对 回复 2021-09-03
  • 3 回答
  • 0 关注
  • 321 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信