问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

有谁能给个封装结果集的例子mysql的并注解一下,学习java的

发布网友 发布时间:2022-05-01 15:37

我来回答

2个回答

热心网友 时间:2022-05-01 17:07

package com.golden.;

import java.lang.reflect.Method;
import java.sql.ResultSet;

/**
 * 行映射器
 * 
 * @author pine
 * 
 */
public class RowMapper {
    
    /**
     * 将结果集中一行映射为对象
     * @param resultSet
     * @param clazz
     * @return T
     */
    public <T> T mappingRow(ResultSet resultSet, Class<T> clazz) {
        class StringHelper{
            /**
             * 首字母大写
             * @param str
             * @return String
             */
            private String toUpperCase(String str){
                String firstLetter = str.substring(0, 1).toUpperCase();
                if (str.length()==1) {
                    return firstLetter;
                }
                return firstLetter.concat(str.substring(1));
            }
            
            /**
             * 获取方法名
             * @param strs
             * @return String
             */
            private String getMethodName(String[] strs){
                StringBuffer methodName = new StringBuffer("set");
                for (String temp : strs) {
                    if (temp.equals("")) {
                        continue;
                    }
                    methodName.append(this.toUpperCase(temp));
                }
                return methodName.toString();
            }
            
            /**
             * 获取方法名
             * @param field
             * @return String
             */
            public String getMethodName(String field){
                return this.getMethodName(field.split("_"));
            }
        }
        StringHelper helper = new StringHelper();
        try {
            T t = clazz.newInstance();
            int columnCount = resultSet.getMetaData().getColumnCount();
            Method[] methods = clazz.getMethods();
            outer:for (int i = 0; i < columnCount; i++) {
                String field = resultSet.getMetaData().getColumnLabel(i+1);
                String methodName = helper.getMethodName(field);
                for (Method method : methods) {
                    if (method.getName().equals(methodName)) {
                        method.invoke(t, resultSet.getObject(i+1));
                        continue outer;
                    }
                }
            }
            return t;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}

 使用的时候:


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.golden..BankDao;
import com.golden..RowMapper;
import com.golden.util.DbcpUtils;
import com.golden.vo.Bank;
//继承RowMapper 
public class BankDaoImpl extends  RowMapper implements BankDao {

    public List<Bank> findBanks(String query, int start, int limit) {
        Connection connection = DbcpUtils.getConnection();
        String sql = "select * from bank  t where (t.bank_no like concat('%',?,'%') or t.bank_name like concat('%',?,'%')) order  by t.id asc  limit ?,?;";
        DbcpUtils.printlnSQL(sql);
        PreparedStatement preparedStatement =null;
        ResultSet resultSet = null;
        try {
            preparedStatement  = connection.prepareStatement(sql);
            preparedStatement.setString(1, query);
            preparedStatement.setString(2, query);
            preparedStatement.setInt(3, start);
            preparedStatement.setInt(4,limit);
            resultSet =preparedStatement.executeQuery();
            List<Bank> banks = new ArrayList<Bank>();
            while (resultSet.next()) {
                banks.add(this.mappingRow(resultSet, Bank.class));//调用封装方法
            }
            return banks;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally{
           DbcpUtils.closeConnection(connection, preparedStatement, resultSet);            
        }
    }

}

热心网友 时间:2022-05-01 18:25

select * from (
(SELECT uid,je,starttime,stoptime,1 as type from (SELECT id from members WHERE referer='4') as m JOIN (SELECT uid,je,starttime,stoptime from `cz` WHERE `status`>0) as c on c.uid=m.id)
union
(SELECT uid,je,starttime,stoptime,2 as type from (SELECT id from members WHERE referer='4') as m JOIN (SELECT uid,je,starttime,stoptime from `withdrawh` WHERE `state`=1) as w on w.uid=m.id) 
)   order by  starttime

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 中国画里,什么花最难画? 半斤鸡翅尖有几个,是翅尖哦 不是连在一起的鸡翅膀,也不是翅中,翅根。 花怎么画而且还是很难的 被盗好友被拉黑怎么办? 外地户口在铜陵上初中要那些手续 怎么焊不粘焊条? 电焊时,焊条老是粘住铁板,有什么原因会造成这样的结 远洋万和公馆别墅怎么样?好不好?值不值得买? 微信被好友拉黑了,我没她手机号码,只有。我该怎么办才能再次联系上她? 君临香格里怎么样 李宁的吟诵的根据,古时就这样吟诵吗? 重庆在遂宁的哪个方向 微信被好友拉黑了,我没她手机号码,只有。我该怎么办才能再次联系上她? 电焊机焊接时,焊条老沾住金属,焊条烧的通红什么原因? 重庆两路口轻轨站到江津东城中央多少公里 重庆北站到重庆陈家坪汽车站有多远 华银·天鹅湖的项目介绍 电焊机焊接时,焊条老沾住金属,焊条烧的通红,挺吓人的,我是新手 白沟中央公馆离香河有多远 卧室门边装有灯的开关,要结婚贴对联不知怎样贴,求帮助 微信支付平台开通支付意愿 中国画里,什么鸟最难画?什么花最难画? 毛呢外套有一点黑色的污垢怎么处理 福建阿石创新材料股份有限公司怎么样? FLOS灯具在香港的代理的地址 梦见黄狗舔手还有粑粑占一手 梦到别人家的狗,在我家不走,身上有屎,我逮它让走,竟然摸了我一手屎,什么寓意? 梦见狗一滩狗把把是什意思? 做梦梦到狗粑粑到一脑袋是否好 把人家店里的新羽绒服穿脏了!主要是衣领搞上头油了怎么快速清洗啊?急!急!急! 榴莲的外壳有何作用? 榴莲壳还有用么!听说还可以煲汤?真的么?怎么弄? 金银花有哪些功效和作用,金银花可排毒养颜 金银花和玫瑰花瓣一起喝有什么功效? 金银花有什么功能功效? 红娘子到底是什么?为什么在农村流传有“红娘子惹不得”的说法? 用洗衣机洗衣服可以用马油皂吗? fueki马油皂 急急急 北京个人放账 北京民间借贷 哪有民间借贷公司?北京朝阳哪有民间借贷公司?