问答文章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

一共23种设计模式! 引用《软件秘笈-设计模式那点事》书籍: 按照目的来分,设计模式可以分为创建型模式、结构型模式和行为型模式。 创建型模式用来处理对象的创建过程;结构型模式用来处理类或者对象的组合;行为型模式用来对类或对象怎样交互和怎样分配职责进行描述。 创建型模式用来处理对象的创建过程,主要包含以下5种设计模式:  工厂方法模式(Factory Method Pattern)  抽象工厂模式(Abstract Factory Pattern)  建造者模式(Builder Pattern)  原型模式(Prototype Pattern)  单例模式(Singleton Pattern) 结构型模式用来处理类或者对象的组合,主要包含以下7种
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
西宁出发经甘南、川西到云南自驾游最佳路线 有没有哪些摇滚比较好的女歌手? 王红都唱歌哪些歌曲? 王红是李春波的老婆吗? 周五买的基金周一有收益嘛? 成语:过隙白驹是什么意思?有什么样的典故和故事? 如何评价华语乐坛王菲,林忆莲,李玟,张惠妹,那英的唱功地位 如何评价王菲和李玟的性格对比?人生阅历有多大的不同? 李玟去世:广告语 ldquo 大家好才是真的好 rdquo 是不是李玟的作品? 地脚线用什么颜色的好 地脚线和什么颜色搭配 惠普电脑在用期间突然关机后,再也开不了机了,是什么问题? 惠普笔记本电脑开不了机 指示灯不亮屏幕黑屏 死亡矿坑的影片介绍 死亡矿坑电影 死亡矿坑的影片资料 (死亡矿坑)电影连接发给我谢谢 之前设置过一个无线路由器,换了一个用还要重新设置吗 有一布美国电影,一群军人去一个秘密基地,遇到了日本的僵尸 什么电 世界经典恐怖鬼片排行榜 有没有相关的影视百度网盘资源? 2013年最新恐怖电影有什么好推介 求一部电影一群探险家被一群游击队发现赶进一个日本废弃的矿区,里面有吃人的日本试验品和一群日本武士 日本战败几十年后一个富二代带着一群雇佣军去山里寻找日本遗留的黄金小日本复活的电影? 《死亡矿坑》这部电影能告诉我们什么道理呢? 这是什么电影 求好心人分享百度云 死亡矿坑的影片评价 我刚上初中,求关于《我的老师》作文,描述女老师的。500个字左右。不要写成诗。急啊,麻烦解答。 跪求印度尼西亚动作电影大全,【在线观看】免费百度云资源 192.168.100.2登录怎么改密码? 我想用电磁炉炸鸡排和鸡米花,不知道开多少瓦力,炸几分钟 液晶电视屏幕图像模糊,现个框子是什么原因? 主角身份神子或圣子的耽美文 知道骗子的银行卡号,怎样才能把这个账号锁定 求雪国圣子和心瘾两部小说的txt 求文,雪国圣子 雪国圣子讲的什么故事 有骗子发短信给我骗钱,有他的银行卡的帐号,我该怎样让他的卡锁死 雪国圣子 txt 雪国圣子是1v2吗 雪国圣子百度云 求雪国圣子txt! 求雪国圣子的百度云资源 轻氧轻燕燕窝,最近非常火,有人吃过吗,感觉怎么样? 求雪国圣子txt百度云!!!感激不尽 雪国圣子的网盘能不咩 初二学生品德评语(50字)《65份》 市十五中毕业生公民道德素养自评评语和家长评语怎么写,一百字左右, oppoA7手机屏幕长按某个应用底部会出现框框怎么删除多余的框框? OPPOa7怎么把下面的菜单键弄消失? 我OPPOA7的手机桌面上出现了菜单,怎么也关闭不掉! OPPOa7手机下面三键盘怎么取消掉?