【Java 】实用方法
1.根据实体类获得想要的字段,适用于编写通用方法
/** * 获取属性名数组 (工具方法) * */ private static String[] getFiledName(Object o){ Field[] fields=o.getClass().getDeclaredFields(); String[] fieldNames=new String[fields.length]; for(int i=0;i<fields.length;i++){ fieldNames[i]=fields[i].getName(); } return fieldNames; } /* 根据属性名获取属性值 (工具方法) * */ private static Object getFieldValueByName(String fieldName, Object o) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + fieldName.substring(1); Method method = o.getClass().getMethod(getter, new Class[] {}); Object value = method.invoke(o, new Object[] {}); return value; } catch (Exception e) { return null; } } // 根据传过来的实体及数据库名字自动形成sql并输出 public String insert(Object t,String sqlname) { StringBuilder ObjName = new StringBuilder(); StringBuilder ObjValue = new StringBuilder(); String[] fieldNames = getFiledName(t); for(int j=0 ; j<fieldNames.length ; j++){ //遍历所有属性 String name = fieldNames[j]; //获取属性的名字 Object value = getFieldValueByName(name,t); if (value == null || "".equals(value) || "null".equals(value)) //这一步是为了剔除掉不未赋值的字段,避免sql冗余,且加强了实体类的复用率 { continue; } ObjName.append(name); ObjValue.append(value); ObjName.append(","); ObjValue.append("','"); } ObjName=ObjName.deleteCharAt(ObjName.length() - 1); ObjValue=ObjValue.delete(ObjValue.length() - 3,ObjValue.length()); String sql="insert into "+sqlname+" ("+ObjName.toString()+") values ('"+ObjValue.toString()+"')"; return sql; } // 修改方法 public String update(Object t,int id,String sqlname) { StringBuilder ObjSetVal= new StringBuilder(); String[] fieldNames = getFiledName(t); for(int j=0 ; j<fieldNames.length ; j++){ StringBuilder ObjName = new StringBuilder(); StringBuilder ObjValue = new StringBuilder(); //遍历所有属性 String name = fieldNames[j]; //获取属性的名字 Object value = getFieldValueByName(name,t); ObjName.append(name); ObjValue.append(value); if (value == null || "".equals(value) || "null".equals(value)) { continue; } ObjSetVal.append(ObjName+"='"+ObjValue+"',"); } ObjSetVal=ObjSetVal.deleteCharAt(ObjSetVal.length() - 1); String sql="update "+sqlname+" set "+ObjSetVal+" where id='"+id+"'"; return sql; } // 删除方法 public String delete(String ids,String sqlname) { String sql="delete from "+sqlname+" where id in ('"+ids.replace(",", "','")+"')"; return sql; }
2.后台对图片的各种转换
前台向后台传图片分为两种方式
1.前台先把图片生成预览图把地址传到后台,这种方法就比较简单,后台只需要把他当字符串被动接受
2.前台把文件转出成Base64的数据流传到后台,主要说一下这种
// 这个方法大概意思就是,把数据流转化为图片并存储在项目的img文件夹下(D:\\Program Files\\Tomcat 8.0\\webapps\\),但是在数据库存的确实远程地址(http://xxx.com/img)
public String base64ToString(String base64String) { try { byte[] bytes1 = decoder.decodeBuffer(base64String); ByteArrayInputStream bais = new ByteArrayInputStream(bytes1); BufferedImage bi1 = ImageIO.read(bais); String name="/"+UUID.randomUUID().toString()+".jpg"; String url=ServletActionContext.getServletContext().getRealPath("/img"); //获得项目下的绝对路径 String HttpUrl=Jtconfig.domain; //获得服务器地址 File w2 = new File(url+name);// 可以是jpg,png,gif格式 ImageIO.write(bi1, "jpg", w2);// 不管输出什么格式图片,此处不需改动 return HttpUrl+"img"+name; } catch (IOException e) { e.printStackTrace(); return null; } }
//图片转64位 public String get_b64_pic(String imgUrl) { //imgFile = "C:/Users/Administrator/Desktop/12.png";// 待处理的图片 InputStream in = null; byte[] data = null; // 读取图片字节数组 try { in = new FileInputStream(imgUrl); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } // 对字节数组Base64编码 BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(data);// 返回Base64编码过的字节数组字符串 }