使用Spring JDBC框架对查询结果封装

总结

  • 数据库查询结果封装为类对象, 使用template.queryForObject。数据表与列名与类的实例域对应
  • 表单提交信息封装为类对象, 使用BeanUtils.populate。表单中每条数据的name属性与类的实例域对应

在进行数据库查询时, 往往将查询到的数据封装在一个对象中, 因此根据数据库表的结构, 创建一个JavaBean, 将每条查询结构都封装为一个JavaBean对象

注意: javaBean的实例域必须与数据库表的列名完全一致, 才可以实现数据自动打包!!
如数据表为:


用户数据表

User类的定义中, 实例域就应该是:

    private int id;
    private String username;
    private String password;

使用下面的语句进行查询并自动打包

 User user = template.queryForObject(sql, new BeanPropertyRowMapper(User.class), loginUser.getUsername(), loginUser.getPassword());
// 结果是:
User{id=1, username='superbaby', password='123'}

如果User类中一个变量名定义的不一样, 比如username写成了name, 那么结果就变成了了

User{id=1, username='null', password='123'}

因为从查询结果中得到的username值找不到对应的存储位置, 因此无法存入User类对象, 由于类对象name域没有被赋值, 结果就是默认初始化的值, 就是null

类似的, org.apache.commons.beanutils包下的BeanUtils工具类中有一个方法popular可以实现将map中的数据根据属性对应赋值到对象中, 常用于在login.jsp点击submit按钮提交请求后, 将跳转到对应的servlet进行处理, 在servlet中, 使用

 Map map = request.getParameterMap();  // 获取所有的数据: user:xxx;  password:xxx; verifcode:xxx

可以将所有表单数据封装在map集合中, 其中map的键是jsp页面中表单的"name", 如果这里建的名称与User类中变量的名字不一致, 赋值后的user对象这个属性就会为空.

image.png

比如, User类中用String name标识用户名, 但是在表单中这里写成了name="username", 那么最后user对象中name域就为null。很好理解, 因为没有对应的值呀。

你可能感兴趣的:(使用Spring JDBC框架对查询结果封装)