懒人系列——增删改查封装(一)
来源:互联网 发布:mac电脑性能在线测试 编辑:程序博客网 时间:2024/06/10 07:45
作为一个懒人就不废话了,新入职的一个小公司数据库表不复杂,查询也基本是单表,但是表的字段很长(想象一下项目就几张表,分表不均)。对于数据库的操作第一个想到的是hibernate,mybatis这些框架(别问我为什么,懒啊),但是想想又没对就几张表的事你给我加个框架???(据说要求jdbc的性能)。用原生的jdbc,意味着大量的代码,意味着。。。最终想起似乎有个叫DBUtils东东据说性能约等于jdbc??(关于DBUtils本人了解其实也不多,毕竟以前都是ORM框架搞事。。。)嗯,选它 了。最后连接池配好走起。
但是,很快问题就来了。十多个字段啊!问号数得我脑袋晕+_+,SQL语句写到一半(我刚刚写到那个属性了来着?心里想着对象操作的好啊!)忍无可忍又无法改数据库的情况下,开始想懒办法了(咳咳,好像绕多了,毕竟第一次写博文有点小紧张)
直接来代码好了:
/** * 更新任意对象(表记录)的所有列(属性) * @param obj 要更新的记录对象(表名) * @return res 影响的列 */public static int newUpdate(Object obj,String sigin){int res = 0;System.out.println("更新 中.......");int num = 0;StringBuffer sqlbuffer = new StringBuffer();//用于存储字段值//StringBuffer valuebuffer = new StringBuffer();ArrayList<String> valuelist = new ArrayList<String>();sqlbuffer.append("UPDATE ");String signvalue = null;try {Class tableclass = Class.forName(obj.getClass().getName());sqlbuffer.append(tableclass.getSimpleName().toLowerCase()+" SET ");//linux下MySql默认区分大小写Field[] fields = tableclass.getDeclaredFields();for(int i = 0; i < fields.length; i++){fields[i].setAccessible(true);if(sigin.equals(fields[i].getName())){signvalue = fields[i].get(obj) + "";}sqlbuffer.append(fields[i].getName() + " = ");if(i < fields.length - 1){valuelist.add(toString(fields[i].get(obj)));//valuebuffer.append(fields[i].get(obj));sqlbuffer.append("? , ");}else{//valuebuffer.append(fields[i].get(obj));valuelist.add(toString(fields[i].get(obj)));sqlbuffer.append("?");}}String sql = sqlbuffer.toString() + " where "+ sigin +" = ? ";//valuebuffer.toString();////Object[] param = new Object[valuebuffer.length() + 2];//for(int i = 0; i < param.length; i++){//if(i < valuebuffer.length()){////param[i] = valuebuffer.;////}//}//param[valuebuffer.length()] = sigin;//param[valuebuffer.length() + 1] = signvalue;String[] params = new String[valuelist.size() + 1];for(int i = 0; i < valuelist.size(); i++){params[i] = valuelist.get(i);}params[valuelist.size()] = signvalue;QueryRunner qr = new QueryRunner();res = qr.update(connection, sql, params);System.out.println(sql);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("影响的行:" + res);return res;}
/** * toString防止空指针 */public static String toString(Object obj){String message = null == obj ? "null" : obj + "";return message;}当然代码还有很大的优化空间(比如那个Class.forname。。。以及存储和循环)。整个代码说起来也简单,通过传入任意映射对象Object,通过class获取其属性列表和值最后和sql进行拼接,第二个参数相当于sql语句中的where 判断,从而完成传入任意映射对象,对数据库对应记录的修改功能(其他的逻辑是一样的就不列举了)
当然,上面的代码肯定只适合单表。那么多表又怎么办呢?其实也很简单,只要排除常规类型获取属性和加join就可以了,这里就不列举了,给个片段就行了(我才不会说是我懒没完善。。。)
for(Field field : fields){field.setAccessible(true);System.out.println(field.getName());System.out.println(field.getType());field.getType().toString();try {Class childc = field.get(obj).getClass();if(childc.getPackage().getName().indexOf("java.lang") < 0){System.out.println("找到关联的类:" + childc.getSimpleName()); Field[] fds = childc.getDeclaredFields();//......
阅读全文
0 0
- 懒人系列——增删改查封装(一)
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一)
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一)
- 用户组管理系列(一):增删改查
- oracle学习(一)——增删改查
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(三):两个Viewmodel搞定增删改查
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(三):两个Viewmodel搞定增删改查
- JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)
- 通用DAO之MyBatis封装,封装通用的增删改查(一)
- 通用DAO之MyBatis封装,封装通用的增删改查(一)
- mybatis增删改查封装
- SSM 封装base(一) 公用增删查改
- MySQL—增删改查
- MongoDB—增删查改
- String—增删查改
- Mybatis学习使用(一) —— 增删查改
- mvc增删改查(一)
- 数据库增删改查(一)
- Ubuntu16.04+Titan X+CUDA8.0+cudnn5.1+Caffe
- 数组划分
- Spring源码解析--Spring配置文件解析BeanDefinitionParserDelegate(四)
- 如何在wicket框架下设置勾选框组checkGroup
- 详解JavaScript中数组的reduce方法
- 懒人系列——增删改查封装(一)
- android studio 导入新的工程后远程依赖修改没有效果?
- SSH物流开发系统设计:搭建框架并实现登录
- 面向对象设计原则之里氏代换原则
- 【慕课网】分页页码制作学习笔记
- hdu5781 沈阳day6训练赛
- js判断是不是空对象
- 文章标题
- Tinify API批处理压缩PNG和JPG(Java版本)