您的位置:首页 > 移动开发

关于Spring的RowMapper

2015-10-26 12:05 661 查看
之前学习Spring的时候 连接数据库总是结合hibernate 用hibernate连接数据库 然后也通过hibernate建立实体类与数据库映射关系

如果单单用Spring的时候 从网上找了N久 发现RowMapper是可以的

这样的话增删改还好 直接执行sql就可以

但是查询的时候就特别麻烦

先写一个例子

public UserInfo sum(String demo1, String demo2) {

        UserInfo res = null;

        List<UserInfo> list = new ArrayList<UserInfo>();

        try {

            sql = "select * from USERINFO t where t.USER_NAME = ?" ;

            list = jdbcTemplate.query(sql, new RowMapper<UserInfo>(){

                public UserInfo mapRow(ResultSet rs, int rowNum) throws SQLException {  

                    UserInfo user = new UserInfo();  

                    user.setUserId(rs.getInt("user_Id"));  

                    user.setUserName(rs.getString("user_Name"));

                    user.setUserPassword(rs.getString("user_Password"));

                    return user;  

                }

            });

            System.out.println(list.get(0).getUserId()+"+"+list.get(0).getUserName()+"+"+list.get(0).getUserPassword());

            res = list.get(0);

            }

        catch (Exception e) {

            tm.rollback(trans);//回滚事件

            e.printStackTrace();

            }

            tm.commit(trans); //提交事务

        

    return res;

    }

其中UserInfo类里的字段是

    public int userId;

    public String userName;

    public String userPassword;

这三个字段 还有与其对应的GET、SET方法

从上面一段代码中我们能知道如果用到RowMapper的时候 我们需要知道数据库 并写入到代码中 具体为什么这么写 这里就不说明了 网上一查一大堆

但是如果我们运用这个表需要很多次 各种查询 那我们岂不是每次都需要这么写  这么写就会感觉特别不爽 每次都得自己去写数据库的字段 与实体类的字段对应

于是上网去查 发现网上很多都是说 用注解直接就可以办到 但是我用了 没成功 可能是没找到Jar包 反正不管怎么说 就是注解没用上 这下就愁人了

没有注解 又不想用RowMapper自己手动的填映射

找来找去无意中发现了一个类

感觉还是很不错的

BeanPropertyRowMapper类

其实原理还是RowMapper类 只不过就是不需要咱们自己填写映射就可以了 但是 运用的方法需要适当改一下

请参照上面的代码 做一下对比

public UserInfo sum(String demo1, String demo2) {

        UserInfo res = null;

        List<UserInfo> list = new ArrayList<UserInfo>();

        try {

           sql = "select * from USERINFO t where t.USER_NAME = ?" ;

           list = (List<UserInfo>)jdbcTemplate.query(sql,

                    new Object[]{"1"},new BeanPropertyRowMapper(UserInfo.class));

            System.out.println(list.get(0).getUserId()+"+"+list.get(0).getUserName()+"+"+list.get(0).getUserPassword());

            res = list.get(0);

            }

        catch (Exception e) {

            tm.rollback(trans);//回滚事件

            e.printStackTrace();

            }

            tm.commit(trans); //提交事务

        

    return res;

    }

很说明问题了 这个不需要手动写映射而是Spring自动写映射 所以这个方法相对容易很多

需要注意的是:BeanPropertyRowMapper是根据字段名和实体类中的标准Setter方法进行映射滴。也就是说,我们需要使表中的字段名和实体类的成员变量名称一致。 需要加载Spring2.5以上版本支持
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring