美文网首页JQuery
BeanPropertyRowMapper

BeanPropertyRowMapper

作者: sky_fighting | 来源:发表于2019-06-01 15:01 被阅读0次

    使用BeanPropertyRowMapper将数据库查询结果转换为Java类对象。

    一、应用

    常应用于使用Spring的JdbcTemplate查询数据库,获取List结果列表,数据库表字段和实体类自动对应。
    示例:

    @Override
    public List<Demo> findAll() {
        String sql = "SELECT * FROM user";
        /**
         * BeanPropertyRowMapper将查询结果转换为类对象
         */
        return jdbcTemplate.query(sql, new BeanPropertyRowMapper(Demo.class));
    }
    
    @Override
    public List<Demo> selectUser(int uid) {
        String sql = "SELECT * FROM user WHERE id = ?";
        /**
         * 带条件查询
         */
        return jdbcTemplate.query(sql, new Object[]{uid}, new BeanPropertyRowMapper(Demo.class));
    }
    

    二、内部实现浅析

    BeanPropertyRowMapper的initialize内部实现

    如上图红框中所示:

    • mapperFields是一个HashMap,用来匹配Java对象的属性和MySQL表的字段名的。mapperFields中存放的是所有可能与MySQL表的字段名映射上的那些Java属性名字。

    • this.mappedFields.put(this.lowCaseName(pd.getName()),pd);
      initialize方法中,BeanPropertyRowMapper会把传入的泛型Java类的所有属性名称的全小写形式放入mapperFields中,

    • String underscoredName = this.underscoreName(pd.getName());
      Java类的属性名转化成下划线分割的形式,如userName会被转化成user_name,这是因为:
      数据库设计字段名称,一般会使用下划线分割形式,如:user_name
      Java类设置属性,一般使用驼峰命名形式,如:userName

    使用BeanPropertyRowMapper自动绑定,需要确保数据库表列名称与Java实体类属性名称相同

    参考文章一
    参考文章二

    相关文章

      网友评论

        本文标题:BeanPropertyRowMapper

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