网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1019|回复: 0
打印 上一主题 下一主题

解析查询类型sql自动封装列表数据

[复制链接]

97

主题

98

帖子

447

积分

版主

Rank: 7Rank: 7Rank: 7

积分
447
跳转到指定楼层
楼主
发表于 2020-7-12 21:30:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、当一个sql是查询类型时,返回值一般都是列表,这种情况下,我们通过反射模拟mybatis的查询语句封装
2、核心代码:
public static List<Object> buildListDataBySql(String sql, Class<?> clazz) {
        List<Object> resList = new LinkedList<Object>();
        Connection conn = DbUtils.getConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()) {
                Object obj = clazz.newInstance();
                Field[] fields = clazz.getDeclaredFields();
                for (Field field : fields) {
                    String methodName = "set" + field.getName().substring(0,1).toUpperCase() +field.getName().substring(1);
                    Column column = field.getAnnotation(Column.class);
                    if (null != column) {
                        if (column.type() == Integer.class) {
                            Integer value = rs.getInt(field.getName());
                            Method setMethod = clazz.getDeclaredMethod(methodName,
                                    Integer.class);
                            setMethod.invoke(obj, value);
                        } else if (column.type() == String.class) {
                            String value = rs.getString(field.getName());
                            Method setMethod = clazz.getDeclaredMethod(methodName,
                                    String.class);
                            setMethod.invoke(obj, value);
                        }
                    } else {
                        //String类型
                        String value = rs.getString(field.getName());
                        Method setMethod = clazz.getDeclaredMethod(methodName,
                                String.class);
                        setMethod.invoke(obj, value);
                    }
                }
                resList.add(obj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                }
            }
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                }
            }
        }
        
        return resList;
    }
3、测试代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String sql = "select * from jiudian where 1= 1 ";
        String searchText = request.getParameter("name");
        if (null != searchText && !"".equals(searchText)) {
            sql = sql + " and name like '%" +searchText+ "%'";
        }
        List<Object> res = DaoUtils.buildListDataBySql(sql, Hotel.class);
        response.getWriter().append(res.toString());
    }


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-12-22 11:55 , Processed in 0.034642 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表