精华内容
下载资源
问答
  • java开发中上传下载,很多地方用。每次都去写的话会很麻烦。这里写一个通用方法,以后遇到了只要准备好对应参数,调方法即可。 一、文件上传: /** * 文件上传工具类 */ public class FileUpload { /** * @param...

    java上传下载通用方法总结之FileUtils.copyInputStreamToFile(一)

    java开发中上传下载,很多地方用。每次都去写的话会很麻烦。这里写一个通用方法,以后遇到了只要准备好对应参数,调方法即可。
    这里引入的是

    <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.7</version>
            </dependency>
    
    一、文件上传:
    /**
     * 文件上传工具类
     */
    public class FileUpload {
        /**
         * @param file     多媒体文件
         * @param filePath 文件上传到的目的路径
         * @param fileName 文件名称(不包括扩展名,即后缀)
         * @return
         */
        public static String fileUpload(MultipartFile file, String filePath, String fileName) throws IOException {
            //扩展名
            String exeName = "";
    
                if (file.getOriginalFilename().lastIndexOf(".") >= 0) {
                    exeName = file.getOriginalFilename().
                            substring(file.getOriginalFilename().lastIndexOf("."));
                }
                copyFile(file.getInputStream(), filePath, fileName + exeName);
    
    
            return fileName + exeName;
        }
    
        /**
         * @param inputStream 文件流
         * @param dir         目的文件夹
         * @param realName    文件全名
         * @return
         * @throws IOException
         */
        private static File copyFile(InputStream inputStream, String dir, String realName) throws IOException {
    
            File destFile = new File(dir, realName);
            return copyFile(inputStream, destFile);
        }
    
        private static File copyFile(InputStream inputStream, File destFile) throws IOException {
            if (null == inputStream) {
                return null;
            }
            if (!destFile.exists()) {
                if (!destFile.getParentFile().exists()) {
                    destFile.getParentFile().mkdir();
                }
                destFile.createNewFile();
            }
            FileUtils.copyInputStreamToFile(inputStream, destFile);
            return destFile;
        }
     }
    

    这里就是公共方法了。调用的时候,可以这样:(注意:这里的fileName只是纯名字,无后缀)

      @PostMapping("/upload")
        public R upload(@RequestBody MultipartFile file){
    
            String filePath="E:\\2020-in-beijing\\uploadanddownload";
            String fileName = "我的上传文件";
            String s = null;
            try {
                s = FileUpload.fileUpload(file, filePath, fileName);
            } catch (IOException e) {
                e.printStackTrace();
                return R.error("上传失败!");
            }
            return R.ok("上传成功!").put("data",s);
        }
    
    二 文件下载
    package com.sinux.cc.fileuploadanddownload;
    
    import org.apache.tomcat.util.http.fileupload.RequestContext;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    import javax.print.DocFlavor;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    
    /**
     * 文件下载工具类
     */
    public class FileDownload {
        /**
         * @param response
         * @param filePath 文件完整路径包括:文件完整名,扩展名
         */
        public static void fileDownLoad(HttpServletResponse response, String filePath) {
            OutputStream os = null;
            try {
                File file = new File(filePath);
                if (!file.exists()) {
                    return;
                }
                String fileName = file.getName();
                response.setContentType("application/octet-stream;charset=ISO8859-1");
                //解决中文乱码
                String fileNameStr = new String(fileName.getBytes("utf-8"), "ISO8859-1");
                response.setHeader("Location", fileNameStr);
                response.setHeader("Content-Disposition", "attachment;filename=" + fileNameStr);
                os = response.getOutputStream();
                download(os, filePath);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (null != os) {
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
        }
    
        private static void download(OutputStream os, String filePath) {
            File file = new File(filePath);
            if (!file.exists()) {
                return;
            }
            FileInputStream is = null;
            try {
                is = new FileInputStream(file);
                int BUFFERSIZE = 2 << 10;
                int length = 0;
                byte[] buffer = new byte[BUFFERSIZE];
                while ((length = is.read(buffer, 0, BUFFERSIZE)) >= 0) {
                    os.write(buffer, 0, length);
                }
                os.flush();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (null != os) {
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (is != null) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        /**
         * 浏览器下载
         */
        public static void download(InputStream in, String fileName) {
            HttpServletResponse res =
                    ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
    
    
            try {
                res.reset();
                res.setCharacterEncoding("utf-8");
                res.setContentType("application/octet-stream");
                res.setHeader("Content-Disposition", "attachment;filename=" + fileName);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            byte[] buffer = new byte[1024];
            BufferedInputStream bi = null;
            OutputStream os = null;
            try {
                os = res.getOutputStream();
                bi = new BufferedInputStream(in);
                int i = bi.read(buffer);
                while (i != -1) {
                    os.write(buffer, 0, buffer.length);
    
                    i = bi.read(buffer);
                }
                os.flush();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (null != bi) {
                    try {
                        bi.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    这里提供了多种文件下载的方法:择其善者而用之

    展开全文
  • Java通用范例开发金典》

    千次阅读 2009-01-15 23:22:00
    Java通用范例开发金典》一书已由电子工业出版社出版 书籍完整源代码的下载地址为:http://download.csdn.net/source/971588书籍作者技术博客为:http://blog.csdn.net/leeshuqing技术论坛为:...

    《Java通用范例开发金典》一书已由电子工业出版社出版

     

     

     

    书籍完整源代码的下载地址为:http://download.csdn.net/source/971588

    书籍作者技术博客为:http://blog.csdn.net/leeshuqing

    技术论坛为:http://www.njmars.net

    作者邮箱为:leeshuqing@163.com

     

    本书以程序开发人员在编程中可能遇到的实际问题(案例)和开发中应该掌握的技术为主线,全面介绍了运用Java语言进行程序开发的各方面的应用案例和经验技巧。.

    本书共19章,分别为类基础、字符处理、数组与集合、窗体效果、窗体组件、访问系统信息、时间处理、文件处理、流处理、加密解密、网络处理、访问数据库、XML、图像处理、声音处理、网页显示、高级网页处理、访问数据库的网页、应用程序演示等。 ..

    每个实例都突出实用性,其中大部分是程序开发人员梦寐以求的解决方案。本书范例选取精心、代码规范,具有典型的代表性,可移植性强。此外,所有范例的关键步骤讲解详细,“注意”、“提示”、“技巧”等特色段落丰富,便于读者轻松掌握。

    本书适合广大Java程序员参考学习,同时还可作为高等院校相关专业师生的参考书。

    展开全文
  • 这里给java开发童鞋们分享一个可以将普通java对象转换成.proto生成的java对象的方法,大家在编写完.proto文件后生成java对象后,肯定都遇到过一个问题,就是不同的对象构造方法不一样,以下为本人写的一个通用方法:...

    protobuf的优势这里就不细说了,这里给java开发童鞋们分享一个可以将普通java对象转换成.proto生成的java对象的方法,大家在编写完.proto文件后生成java对象后,肯定都遇到过一个问题,就是不同的对象构造方法不一样,以下为本人写的一个通用方法:

       /**
         * 该方法将javabean对象转换成protobuf对应的bean
         * 
         * @param javaBean
         * @param protoBuilder
         */
        @SuppressWarnings({ "unchecked", "rawtypes" })
        public static Object javaBeanToProtoBean(Object javaBean, Object protoBuilder) {


            try {
                Method mm = protoBuilder.getClass().getMethod("getDescriptorForType");


                Descriptors.Descriptor descriptor = (Descriptor) mm.invoke(protoBuilder);


                Field[] fields = javaBean.getClass().getDeclaredFields();


                for (Field item : fields) {
                    try{
                    String fName = item.getName();
                    item.setAccessible(true);
                    Object jObject = item.get(javaBean);
                    if(null == jObject){
                       break;
                    }
                    FieldDescriptor fd = descriptor.findFieldByName(fName);
                    if(null != fd){
                        if(fd.isRepeated()){
                            boolean isDefined = false;
                                Method[] mmm = protoBuilder.getClass().getMethods();
                                for(Method mItem : mmm){
                                    
                                    try{
                                        String mName = mItem.getName();
                                        String mName1 = "add" + StringUtil.firstToUpperCase(fName);
                                        if(mName1.equals(mName) && mItem.getParameterTypes().length == 1){
                                            Class[] ccList = mItem.getParameterTypes();
                                            Class cc = ccList[0];
                                            Method me = cc.getMethod("newBuilder");
                                            Object oBuilder = me.invoke(null);//获取自定义对象builder
                                            
                                            List<Object> dList = (List<Object>) jObject; //数据为List集合
                                            List<Object> pBeanList = new ArrayList<Object>();
                                           for(Object oItem : dList){
                                              Object pBean = javaBeanToProtoBean(oItem,oBuilder);
                                              pBeanList.add(pBean);
                                           }
                                           Method mee = protoBuilder.getClass().getMethod("addAll"+StringUtil.firstToUpperCase(fName),Iterable.class);
                                           mee.invoke(protoBuilder, pBeanList); 
                                            isDefined = true;
                                        }   
                                    }catch(Exception e){
                                        
                                    }
                                
                                }    
                         
                          if(!isDefined){
                            try{
                                Method me = protoBuilder.getClass().getMethod("addAll"+StringUtil.firstToUpperCase(fName),Iterable.class);
                                me.invoke(protoBuilder, jObject);
                            }catch(Exception e){
                                LOG.info("this repeated field is a user-defined field");
                                e.printStackTrace();
                            }
                            } 


                        }else{
                            boolean isDefined1 = false;
                            try{
                                //自定义对象继续需要通过builder来解析处理,回调
                                Method bM = protoBuilder.getClass().getMethod("getFieldBuilder", FieldDescriptor.class);
                                Object subBuilder = bM.invoke(protoBuilder, fd);
                                Object pBean = javaBeanToProtoBean(jObject,subBuilder); 
                                Method me = protoBuilder.getClass().getMethod("setField", FieldDescriptor.class, Object.class);
                                me.invoke(protoBuilder, fd, pBean);
                                isDefined1 = true;
                            }catch(Exception e){
                                LOG.info("this required field is not a user-defined field");
                            }
                            
                            if(!isDefined1){
                                Method me = protoBuilder.getClass().getMethod("setField", FieldDescriptor.class, Object.class);
                                me.invoke(protoBuilder, fd, jObject);
                            }
                            
                        }
                    }
                    }catch(Exception e){
                        LOG.error("javaBeanToProtoBean method  item reflect error, item name:"+item.getName());
                    }
                }
                
                Method buildM = protoBuilder.getClass().getMethod("build");
                Object rObject =  buildM.invoke(protoBuilder);
            /*    Method byteM = rObject.getClass().getMethod("toByteArray");
                Object byteObject =  byteM.invoke(rObject);
                byte[] pbByte = (byte[]) byteObject;  
                String pbStr = new String(Base64.getEncoder().encode(pbByte), "UTF-8");*/
                return rObject;
            } catch (Exception e) {
                e.printStackTrace();
                LOG.error("convert javabean to protobuf bean error,e:", e);
                return null;
            }

        }


    此方法入参和返回结果都是Object类型,可以适用不同类型java对象  ,

     public static Object javaBeanToProtoBean(Object javaBean, Object protoBuilder) 

    javaBean是已知普通java对象,protoBuilder是proto对象生成的builder 返回结果就是protoBuilder.build()出来的对象

    注:编写的proto文件格式与javaBean对象要严格一一对应(参数名称和结构)

    展开全文
  • Java 反射封装增删改查通用方法

    千次阅读 2019-02-11 18:50:57
    博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主威威喵原创,请多支持与指教。... JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,...

    博主声明:

    转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主 威威喵 原创,请多支持与指教。

    本文首发于此   博主威威喵  |  博客主页https://blog.csdn.net/smile_running

    • JDBC简介

          JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。(官方语言描述,看看就好。)

          JDBC,它就像驱动一样,数据库比如:mysql、oracle、db2、sqlSever等,不同的产商肯定实现的方式都不一样,那就要求程序员得每一个数据库的操作都得学会,只有这样才能跟上需求的改变。所以,JDBC,它就站出来了。它为每个产商提供相同的接口,不管数据库底层如何实现。相当于在数据库与应用程序中间加了一层,这就是 JDBC。那么,加了这一层,程序员们就可以通过 JDBC 固定 API 来操作各种不同数据库了,相当机智。

    • JDBC 连接 MySQL 数据库

    代码如下:

    public class JdbcUtils {
    
    	public static Connection getConnection() throws Exception {
    		/**
    		 * 步骤:
    		 *  1. 声明  driver、jdbcUrl、user、password 四个变量
    		 *  2. 新建 jdbc.properties 配置文件,使其在不改源码情况下,变更数据库
    		 *  3. 获取 jdbc.properties 文件参数,利用Java反射和输入流方式获取
    		 *  4. Class.forName(driver);加载驱动
    		 *  5. 获取连接实例
    		 */
    		String driver = null;
    		String jdbcUrl = null;
    		String user = null;
    		String password = null;
    
    		InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
    		Properties properties = new Properties();
    		properties.load(inputStream);
    		driver = properties.getProperty("driver");
    		jdbcUrl = properties.getProperty("jdbcUrl");
    		user = properties.getProperty("user");
    		password = properties.getProperty("password");
    		Class.forName(driver);
    		Connection conn = (Connection) DriverManager.getConnection(jdbcUrl, user, password);
    		return conn;
    	}
    
    	public static void release(Statement statement, Connection conn, ResultSet result) {
    		try {
    			if (statement != null) {
    				statement.close();
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		try {
    			if (conn != null) {
    				conn.close();
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		try {
    			if (result != null) {
    				result.close();
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    }

        这里我写了一个Jdbc获取连接的工具类,只要调用 getConnection() 方法就可以连接成功了。注意一点:MySQL 数据库连接参数为如下(也就是上面代码中注释部分 jdbc.properties 文件内容),否则将连不上,MySQL 端口和用户名都是默认的。

    上图的 person 代表的是你的数据库名称。

    • JDBC 增、删、改、查

        数据库为上文 user 表(图在上面)

    • 增、删、改方法

    public class JdbcTest {
    
    	/**
    	 * 提供: 增 、删、改3个功能的通用方法
    	 * 
    	 * @param sql 
    	 * @param args sql 中占位符的值,可以用多个逗号隔开
    	 */
    	public void update(String sql, Object... args) throws Exception {
    		Connection connection = null;
    		PreparedStatement preparedStatement = null;
    
    		try {
    			connection = JdbcUtils.getConnection();
    			System.out.println(sql);
    			preparedStatement = connection.prepareStatement(sql);
    			
    			for (int i = 0; i < args.length; i++) {
    				preparedStatement.setObject(i + 1, args[i]);
    			}
    			preparedStatement.executeUpdate();
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			JdbcUtils.release(preparedStatement, connection, null);
    		}
    	}
    
    	@Test
    	public void insert() throws Exception {
    		String sql = "INSERT INTO user(user_name,sex,user_role,password,id_card,register_time)"
    				+ " VALUES(?,?,?,?,?,?)";
    		
    		update(sql,"小红","女","VIP用户","xh","654...","2019-01-25 14:02:03");
    	}
    
    	@Test
    	public void delete() throws Exception {
    		// 删除 user 表中 user_name 为小红的信息
    		String sql = "DELETE FROM user WHERE user_name=?";
    		update(sql,"小红");
    	}
    
    	@Test
    	public void modify() throws Exception {
    		// user 表中 user_name 为小红 的用户,将其  user_role 改为 普通用户
    		String sql = "UPDATE user set user_role=? WHERE user_name=?";
    		update(sql,"普通用户","小红");
    	}
    }
    
    • 通用查询方法封装

        利用面向对象编程的思想,我们新建了一个 User 类,此类变量为 user 表对应的列名,代码如下:

    package com.xww;
    
    public class User {
    
    	public String userName;
    	public String password;
    	public String registerTime;
    	public String sex;
    	public String userRole;
    	public String idCard;
    
    	public User(String userName, String password, String registerTime, 
    			String sex, String userRole, String idCard) {
    		super();
    		this.userName = userName;
    		this.sex = sex;
    		this.userRole = userRole;
    		this.password = password;
    		this.idCard = idCard;
    		this.registerTime = registerTime;
    	}
    
    	public String getUserName() {
    		return userName;
    	}
    
    	public void setUserName(String userName) {
    		this.userName = userName;
    	}
    
    	public String getSex() {
    		return sex;
    	}
    
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    
    	public String getUserRole() {
    		return userRole;
    	}
    
    	public void setUserRole(String userRole) {
    		this.userRole = userRole;
    	}
    
    	public String getPassword() {
    		return password;
    	}
    
    	public void setPassword(String password) {
    		this.password = password;
    	}
    
    	public String getIdCard() {
    		return idCard;
    	}
    
    	public void setIdCard(String idCard) {
    		this.idCard = idCard;
    	}
    
    	public String getRegisterTime() {
    		return registerTime;
    	}
    
    	public void setRegisterTime(String registerTime) {
    		this.registerTime = registerTime;
    	}
    
    	@Override
    	public String toString() {
    		return "User [userName=" + userName + ", password=" + password + ", registerTime=" + registerTime + ", sex="
    				+ sex + ", userRole=" + userRole + ", idCard=" + idCard + "]";
    	}
    }
    

        那么查询 user 表的方法就可以写为这样(不够灵活):

    	public User query(String sql) {
    		Connection connection = null;
    		PreparedStatement preparedStatement = null;
    		ResultSet resultSet = null;
    		User user = null;
    
    		try {
    			connection = JdbcUtils.getConnection();
    			System.out.println(sql);
    			preparedStatement = connection.prepareStatement(sql);
    			resultSet = preparedStatement.executeQuery();
    
    			while (resultSet.next()) {
    				user = new User(resultSet.getString(2), resultSet.getString(3), resultSet.getString(4),
    						resultSet.getString(5), resultSet.getString(6), resultSet.getString(7));
    				System.out.println(user.toString());
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			JdbcUtils.release(preparedStatement, connection, resultSet);
    		}
    		return user;
    	}

         这样的确可以获取到 user 表,但是这个方法并不能通用。例如:我想查询 student 表时,student 表中字段名与 user 表肯定不一样,这样就会产生错误。所以,这种情况就可以利用 Java 反射来实现。可是,User 类中的变量相当于 user 表中的列名,如果让 User 类将变量名强制写成 user 表中一样,那就显得很局限,不能够通配。那么,就得用到 JDBC 提供的另一个接口了。

    (1)ResultSetMetaData 接口

        它用于获取 ResultSet 结果集的元数据,用处是在于从查出的结果集中获取相应的列数、列名等。常用方法如下:

    • getColumnName(int column):获取指定列的名称
    • getColumnCount():返回当前 ResultSet 对象中的列数。
    • getColumnTypeName(int column):检索指定列的数据库特定的类型名称。
    • getColumnDisplaySize(int column):指示指定列的最大标准宽度,以字符为单位。
    • isNullable(int column):指示指定列中的值是否可以为 null。
    • isAutoIncrement(int column):指示是否自动为指定列进行编号,这样这些列仍然是只读的。

    (2)利用 sql 语句添加别名的方式

        比如我要查询 user 表中 ‘小王’ 的详细信息,原本的 sql 语句:

    >  SELECT * FROM user WHERE user_name='小王'

        要改为添加别名的方式,注意:别名一定是与User类中定义变量名一致,否则在反射时将找不到字段:

    >  SELECT user_name userName,password password,register_time registerTime,sex sex,user_role userRole,id_card idCard FROM user WHERE user_name='小王'

    查出来的结果如下图:

        字段名都与 User 类中的变量名相一致了。

    (3)利用 Java 反射给 User 类中的每个属性变量赋予值 .

        那么,经过这几翻的处理,我们的 User 类终于可以匹配数据库了。这个虽说可以实现通用查询,映射到实体类中,但明显在 sql 语句中那么点缺乏简练。整个查询代码如下:

    public class JdbcTest {
    
    	/**
    	 * 利用 Java 反射机制,写的一个通用查询方法
    	 * 
    	 * @param sql
    	 */
    	public <T> T query(Class<T> clazz, String sql, Object... args) {
    		T entity = null;
    
    		Connection connection = null;
    		PreparedStatement preparedStatement = null;
    		ResultSet resultSet = null;
    		User user = null;
    
    		try {
    			connection = JdbcUtils.getConnection();
    //			System.out.println(sql);
    			preparedStatement = connection.prepareStatement(sql);
    			if (args != null) {
    				for (int i = 0; i < args.length; i++) {
    					preparedStatement.setObject(i + 1, args[i]);
    				}
    			}
    
    			resultSet = preparedStatement.executeQuery();
    			ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
    			Map<String, Object> values = new HashMap<String, Object>();
    
    	
    			if (resultSet.next()) {
    				for (int i = 0; i < resultSetMetaData.getColumnCount(); i++) {
    					String columnLable = resultSetMetaData.getColumnLabel(i + 1);
    					Object columnValue = resultSet.getObject(i + 1);
    					values.put(columnLable, columnValue);
    				}
    			}
    
    			System.out.println("--->数据库:"+values);
    			if (values.size() > 0) {
    				entity = (T) clazz.newInstance();
    				for (Entry<String, Object> entry : values.entrySet()) {
    					String fieldName = entry.getKey();
    					Object fieldValue = entry.getValue();
    					Field field = clazz.getDeclaredField(fieldName);
    					field.setAccessible(true);
    					field.set(entity, fieldValue);
    				}
    			}
    
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			JdbcUtils.release(preparedStatement, connection, resultSet);
    		}
    		return entity;
    	}
    
    	@Test
    	public void qurey() {
    		String sql = "SELECT user_name userName,password password,register_time registerTime,"
    				+ "sex sex,user_role userRole,id_card idCard FROM user WHERE user_name=?";
    		User user = query(User.class, sql, "小王");
    		System.out.println("--->反射到 User 类中:"+user.toString());
    	}
    }

    (4)BeanUtils 工具包

        BeanUtils 工具包是 Apache 出的一个辅助工具,主要方便对于 JavaBean 进行一系列的操作。例如:

    1. 可以对 JavaBean 的 getter()/setter() 方法进行赋值操作
    2. 可以将Map集合对象直接转为 JavaBean 对象,需要属性名一致
    3. 可以实现两个 JavaBean 对象的拷贝操作

        BeanUtils 工具类的常用方法如下:

    • BeanUtils.setProperty(bean, name, value);实现对象的赋值操作
    • ConvertUtils.register(Converter converter , ..);当需要将String数据转换成引用数据类型(自定义数据类型时),需要使用此方法实现转换
    • BeanUtils.populate(bean,Map);实现将Map拷贝到对象中
    • BeanUtils.copyProperties(newObject,oldObject);实现对象之间的拷贝

        现在我们导入 beanutils.jar 包和一个依赖的 loggin.jar 包:

        修改上面部分代码:

    将                Field field = clazz.getDeclaredField(fieldName);
                        field.setAccessible(true);
                        field.set(entity, fieldValue);

    修改为         BeanUtils.setProperty(entity, fieldName, fieldValue);

        运行代码,匹配数据库成功,并反射到 User 类中:

    展开全文
  • 获得一组十六进制串依次累加,不需要空格,累加之后取低字节 /*********累加校验和/ public static String makeChecksum(String data) { if (data == null || data.equals("")) { return “”; ...
  • Java源码 JavaWeb开发框架 代码 SSH SSM OA ERP CRM Java项目 功能简介:  A、代码生成器(开发利器)  生成Java各层次的类和JSP等文件,提高开发效率  B、阿里巴巴数据库连接池Druid  ...
  • 1.为了将一些可复用的方法统一使用,修改源码MapperAnnotationBuilder 2.MapperAnnotationBuilder中使用到的内容,包括CrudMapper/CrudProvider/CrudSqlProvider/CrudSqlSource 3.当使用缓存的时候,需要实现...
  • 2017年java开发前景如何及java程序员就业前景如何?这是很多从事或已经从事java开发必须面临的现实问题,根据2016年11月TIOBE开发语言排行榜宣布的流行开发语言的排名结果,Java仍然高居榜首,在国内的软件开发企业中...
  • 如何使用Java开发QQ机器人 方法

    千次阅读 2020-02-26 21:44:49
    使用Java开发QQ机器人- CQ & HTTP API 使用库Q平台下的CQ HTTP API插件以及simple-robot核心标准库作为依赖。 前往项目Github地址点击star以收获作者的感谢:GayHub 如果需要获得更好的阅读体验,请前往 原...
  • 如何使用Java开发QQ机器人 方法

    千次阅读 2020-02-26 21:58:45
    使用Java开发QQ机器人- CQ & HTTP TO CQ 使用库Q平台下的HTTP TO CQ插件以及simple-robot核心标准库作为依赖。 此插件与框架的 简陋 简单介绍:文档处简介 前往项目Github地址点击star以收获作者的感谢:...
  • java中List对象排序通用方法

    千次阅读 2013-03-19 14:15:23
    推荐一个程序员开发、学习的好网站,www.it123.top 欢迎大家转发收藏。 在数据库中查出来的列表中,往往需要对不同的字段重新排序,一般的做法都是使用排序的字段,重新到数据库中查询。如果不到数据库查询,...
  • 白话阿里巴巴Java开发手册高级篇

    万次阅读 多人点赞 2019-11-08 16:25:22
    不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给...
  • java通用换行符

    千次阅读 2019-01-08 11:31:02
    java开发中 Windows下换行符为: \r\n Linux下换行符为:\n Mac下换行符为:\r 可以用通用代码System.getProperty("line.separator")替换 String separator = System.getProperty("line....
  • 阿里巴巴Java开发手册(泰山版)

    千次阅读 2021-04-05 00:18:18
    阿里算是国内互联网Java 相关技术栈使用范围最大的公司,使用Java时间也有二十多年了,前辈们在项目实践中踩了很多坑,他们把项目中认为最合适的规则提炼成通用编码规范-《Java 开发手册》,这个也是经历了多次大...
  • Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 Java是一种简单的,跨平台的,面向对象的...
  • JAVA服务端通用数据导入导出组件V1.0

    千次阅读 2017-12-03 12:04:08
    JAVA服务端通用数据导入导出组件V1.0    工作中经常会遇到对excel这类文件进行导入导出的业务需求, 这些需求其实从根本上看都是对excel的解析处理,因此我特地花了两天时间写了一套通用的导入导出工具组件,为...
  • java解析json字符串的两种方法详解(Android通用)
  • Java通用接口响应封装类

    万次阅读 2020-01-14 00:42:07
    Web开发中,前后分离是个趋势,现在大部分公司研发部门已经在走前后分离的路子了,前后分离开发各司其职能够有效的提高工作效率和开发质量。 REST接口会返回各种各样的数据,如果对接口的格式不加约束,很容易造成...
  • JAVA开发技能要求:

    千次阅读 2018-10-26 16:37:27
    初级JAVA开发: 1.掌握HTML/CSS/JavaScript等WEB开发技术,深入了解WEB/AJAX的工作原理,有JQuery,AngularJS,Bootstrap等框架. 2.掌握数据库设计和开发知识,精通MySQL、Oracl等主流数据库 ,熟悉NoSQL(MongoDB, ...
  • java通用返回对象

    千次阅读 2019-05-12 10:01:40
    代码中定义了 三个成员变量 status : 返回的状态码 ...该类中私有了构造方法,保证了该类的准确性.定义了开发环境中需要返回的几种类型: status; status+msg; status+data; status+msg+data; ...
  • JAVA高端编程研发培训班 JAVA开发视频教程 Java高级开发工程师是做什么的? 初级开发工程师 Java 程序设计基础,包括 J2sdk基础、Java面向对象基础、Java API使用、数据结构及算法基础、Java AWT图形界面程序开发...
  • Java RMI远程方法调用详解

    万次阅读 多人点赞 2016-07-22 17:45:43
    远程方法调用RMI(Remote Method Invocation),是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同...
  • java swing开发窗体程序开发(一)GUI编程

    万次阅读 多人点赞 2019-04-05 21:37:27
    Java SWing就是java提供的一个类库专门用于开发窗体程序的,相对于C#的winform,java swing的开发要比C#更加麻烦,他不像C#拥有可视化的界面编辑工具 而是需要像QT一样纯代码式GUI编程。java的好处就是通用性强,跨...
  • Java开发人员必备十大工具

    千次阅读 2019-10-16 16:13:43
    Java世界中存在着很多工具,从著名的IDE(例如Eclipse,...在本文中,我将重点介绍适用于各种Java开发人员(例如核心Java和Web开发人员)的通用工具。该列表绝没有罗列出完整工具,如果您知道开发人员应该学习的...
  • java开发之服务器端开发

    千次阅读 2017-04-14 19:27:04
    第二种: 服务器端开发 第一个阶段是连接器设计,主要涉及到涉及到网络知识(阻塞式socket和非阻塞式socket)、通信模式(TCP/IP或者UDP)、网络管理(负载、连接状态等)、传输协议设计(特别与其他语言的交互)、I/...
  • 我的Java开发技术总结

    千次阅读 2016-06-04 17:51:48
    我的Java项目开发工具总结
  • Java开发自学教程!japonensisjava东莞

    千次阅读 2021-06-30 16:19:39
    三大内容: Java并发编程 Java高并发编程 高并发系统设计 Java并发编程 1. 概览 2. 进程与线程 ...3. Java 线程 ...Java高并发编程 ...①高并发系统:它的通用设计方法是什么 ②架构分层:我们为什么一定要这
  • Java 开发工具包

    千次阅读 2018-08-22 10:02:55
    关于 Java,你 必须知道的 JVM、JRE 和 JDK
  • JAVA基础再回首(一)——基本概念、JAVA开发工具、JAVA基本语法 学了java,做了android应用开发,现在回想起来,真的是一路坎坷。。我在上章博客中提到了我以后的几个学习计划和目标就是把以前学的java基础和...
  • 开源的Java后端通用型项目,值得收藏!

    千次阅读 多人点赞 2020-12-13 17:33:00
    嗨喽!Java后端编程的各位小伙伴们,由于公众号做了乱序推送改版,为了保证公众号的推文能够第一时间及时送达到大家手上,大家记得将公众号 加星标置顶 ,公众号每天会送上Java技术干货推文...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 308,716
精华内容 123,486
关键字:

java开发通用方法

java 订阅