美文网首页
使用Spring JDBC框架对查询结果封装

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

作者: mark_x | 来源:发表于2019-09-26 17:10 被阅读0次

    总结

    • 数据库查询结果封装为类对象, 使用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>(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<String, String[]> 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框架对查询结果封装

          本文链接:https://www.haomeiwen.com/subject/cfknuctx.html