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

JDBC用到了哪些设计模式

发布网友 发布时间:2022-04-08 18:01

我来回答

2个回答

懂视网 时间:2022-04-08 22:22

class DAO { public int update(String sql, Object ... args){ Connection conn = null; PreparedStatement ps = null; int rowNum = 0; try{ conn = JDBCUtils.getConnection(); ps = conn.prepareStatement(sql); for(int i = 0; i < args.length; i++){ ps.setObject(i + 1, args[i]); } rowNum = ps.executeUpdate(); return rowNum; }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtils.release(conn, ps, null); } return rowNum; } public <T> T get(Class<T> clazz, String sql, Object ...args){ T entity = null; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try{ conn = JDBCUtils.getConnection(); ps = conn.prepareStatement(sql); for(int i = 0; i < args.length; i++){ ps.setObject(i + 1, args[i]); } rs = ps.executeQuery(); Map<String, Object> map = new HashMap<String, Object>(); List<String> columnLabels = getColumnLabels(rs); if(rs.next()){ for(String columnLabel : columnLabels){ Object columnValue = rs.getObject(columnLabel); map.put(columnLabel, columnValue); } } if(map.size() > 0){ entity = clazz.newInstance(); for(Map.Entry<String, Object> entry : map.entrySet()){ String fieldName = entry.getKey(); Object value = entry.getValue(); //使用BeanUtils工具类来为属性赋值 BeanUtils.setProperty(entity, fieldName, value); /**使用反射的方式为属性赋值 Field field = clazz.getDeclaredField(key); field.setAccessible(true); field.set(entity, value);*/ } return entity; } }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtils.release(conn, ps, rs); } return entity; } public <T> List<T> getForList(Class<T> clazz, String sql, Object ... args){ List<T> list = new ArrayList<>(); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try{ conn = JDBCUtils.getConnection(); ps = conn.prepareStatement(sql); for(int i = 0; i < args.length; i++){ ps.setObject(i + 1, args[i]); } rs = ps.executeQuery(); /** * 将得到的ResultSet结果集转换为Map<String, Object>列表, * 其中key值为rs表的别名,value值为对应别名的值 */ List<Map<String, Object>> data = handleResultSetToMapList(rs); /** * 将MapList转换为对应的BeanList */ list = transferMapListToBeanList(clazz, data); }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtils.release(conn, ps, rs); } return list; } private <T> List<T> transferMapListToBeanList(Class<T> clazz,List<Map<String, Object>> data) throws Exception { List<T> list = new ArrayList<>(); if(data.size() > 0){ for(Map<String, Object> map : data){ T entity = clazz.newInstance(); for(Map.Entry<String, Object> entry : map.entrySet()){ String fieldName = entry.getKey(); Object value = entry.getValue(); BeanUtils.setProperty(entity, fieldName, value);; } list.add(entity); } } return list; } public static <E> E getForValue(String sql, Object ... args){ E entity = null; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try{ conn = JDBCUtils.getConnection(); ps = conn.prepareStatement(sql); for(int i = 0; i < args.length; i++){ ps.setObject(i + 1, args[i]); } rs = ps.executeQuery(); if(rs.next()){ return (E)rs.getObject(1); } }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtils.release(conn, ps, rs); } return entity; } /** * 将获取到的结果集处理成MapList * @param rs * @return * @throws Exception */ private List<Map<String, Object>> handleResultSetToMapList(ResultSet rs) throws Exception { List<String> columnLabels = getColumnLabels(rs); List<Map<String, Object>> data = new ArrayList<Map<String, Object>>(); while(rs.next()){ Map<String, Object> map = new HashMap<String, Object>(); for(String columnLabel : columnLabels){ Object columnValue = rs.getObject(columnLabel); map.put(columnLabel, columnValue); } data.add(map); } return data; } /** * 根据结果集获取所有列的别名 * @param rs * @return * @throws Exception */ private List<String> getColumnLabels(ResultSet rs) throws Exception{ List<String> list = new ArrayList<>(); ResultSetMetaData rsmd = rs.getMetaData(); for(int i = 0; i < rsmd.getColumnCount(); i++){ list.add(rsmd.getColumnLabel(i + 1)); } return list; } }

 

JDBC--DAO设计模式

标签:

热心网友 时间:2022-04-08 19:30

至少有:
1. 静态工厂
DriverManager.getConnection(...)
2. 单例
DriverManager.getDriver(...)
3. 针对resultset及其子类/接口,有不少修饰模式
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人类如何才能悬浮在空中? - 知乎 人体悬浮术是真的存在吗 人体怎样才能真正的在空中悬浮 小孩c蛋白反应高是什么原因 (2014?南海区二模)如图所示,物重G为2000N,小红用800N的拉力花2s的时间... 苹果13系列升级iOS15.5好吗? 出生2o12年11月20日2点姓石光字辈取名 求龙凤胎名字:2012年6月21日(农历5月初3)凌晨0点40分出生,大的为龙,小... by和take有什么区别 takeby后面跟交通工具的区别 比亚迪OA密码 格力空调遥控器上77F是什么意思? 在优酷超前点播联系不上服务器什么意思? - 信息提示 优酷会员开通完什么时候到帐 吃西兰花禁忌 十个月宝宝能吃西蓝花吗 淘宝网的淘金币所有的网站都打不开 求解释 求解决办法 为什么我总是打不开淘金币的页面? 优酷无法搜索,淘金币页面无法完全显示 淘宝淘金币页面图片不显示 淘宝网打开后一片空白。其它网站正常。这是怎么回事? 淘宝 淘金币页面 全额兑换页面打不开了怎么回事 什么品牌的床好用? 淘宝网淘金币页面打不开,请高手帮忙看一下是浏览器原因吗? 求助,淘宝的淘金币商品页面进不去 什么品牌的床比较好 知乎 我的淘宝的淘金币页面打不开,怎么回事啊 ?求助啊 魅蓝e淘宝无法领淘金币,打开页面空白,还会自动跳转。 手机淘宝的淘金币打开总是空白页怎么回事 格力空调遥控器出现华氏度,请问按那个键转换摄氏度?谢谢啦 比亚迪宿舍的wifi用户名和密码是多少 比亚迪Office无线网络密码多少? 比亚迪账号怎么注销 实践考核课程是什么意思 自考实践考核是什么 具体考核内容有哪些 自考的实践考核流程是怎么样的? 我的中信银行信用卡被起诉了诉前财产保全了还能协商吗? 比亚迪qcj715oa车标志多大 信用卡被财产保全了还可以转账进去吗 自考还有 社会实践考核一说?啥意思? 信用卡被冻结之后还款要怎么还? 自考中加考一定要考吗?实践考核是如何进行的? 信用卡积分可以兑换现金吗? 实践考核流程? 信用卡被冻结后如何还款? 广东自考的实践考核是什么回事? 建设银行说我满5万积分可以兑换现金?是怎么个意思? 什么是实践性环节考核? 中信信用卡积分兑换