反解析Map.toString()后字符串
反解析Map.toString()后字符串最近在开发中遇到了这样一种场景,需要将Map转化成String类型保存到数据库中,后面需要从数据库中拿出来进行查询和追加。简单的通过Map.toString()的方式转换成String类型,查找常用工具类发现无法将toString后的map转换回去,所以自己就参考网上的方法,用解析字符串的方式转换回map,具体代码如下:
12345678910111213141516171819202122public class MapConvertUtils { private MapConvertUtils() { throw new IllegalStateException("Utility class"); } public static Map<String, String> mapStringToMap(String str) { str = str.substring(1, str.length() - 1); ...
自定义持久层框架
自定义持久层框架一、JDBC问题分析1、数据库配置信息存在硬编码问题(不经常发生改变)
解决方案:配置文件
2、频繁创建释放数据库连接
解决方案:连接池
3、SQL语句、设置参数、获取结果参数均存在硬编码问题(经常发生改变)
解决方案:配置文件
4、需要手动封装返回结果集,较为繁琐
解决方案:反射、内省
二、自定义持久层框架设计思路使用端:也就是我们的开发项目,需要引入自定义持久层框架的jar包提供两部分配置信息:数据库配置信息、sql配置信息(sql语句、参数类型、返回值类型)
使用配置文件来提供这两部分配置信息:
sqlMapConfig.xml:存放数据库配置信息(存放mapper.xml的全路径,只需加载一次配置文件)
mapper.xml:存放sql配置信息
自定义持久层框架本身:本质是对JDBC进行了封装
加载配置文件:根据配置文件的路径,加载配置文件成字节输入流,存储在内存中。创建Resources类,InputStream getResourceAsStream(String path)
创建Resources类,根据配置文件的路径,将配置文件加载成字节输入流,存储 ...
Spring Boot其它支持
Spring Boot 静态资源映射Spring Boot 默认为我们提供了 3 种静态资源映射规则:
WebJars 映射
默认资源映射
静态首页(欢迎页)映射
WebJars 映射为了让页面更加美观,让用户有更多更好的体验,Web 应用中通常会使用大量的 JS 和 CSS,例如 jQuery,Backbone.js 和 Bootstrap 等等。通常我们会将这些 Web 前端资源拷贝到 Java Web 项目的 webapp 相应目录下进行管理。但是 Spring Boot 项目是以 JAR 包的形式进行部署的,不存在 webapp 目录,那么 Web 前端资源该如何引入到 Spring Boot 项目中呢?
WebJars 可以完美的解决上面的问题,它可以 Jar 形式为 Web 项目提供资源文件。
WebJars 可以将 Web 前端资源(JS,CSS 等)打成一个个的 Jar 包,然后将这些 Jar 包部署到 Maven 中央仓库中进行统一管理,当 Spring Boot 项目中需要引入 Web 前端资源时,只需要访问 WebJars 官网,找到所需资源的 pom 依赖, ...
Spring Cloud初识
什么是Spring CloudSpring Cloud 是分布式微服务架构的一站式解决方案,它提供了一套简单易用的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务系统的构建。
Spring Cloud 被称为构建分布式微服务系统的“全家桶”,它并不是某一门技术,而是一系列微服务解决方案或框架的有序集合。它将市面上成熟的、经过验证的微服务框架整合起来,并通过 Spring Boot 的思想进行再封装,屏蔽调其中复杂的配置和实现原理,最终为开发人员提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。
Spring Cloud 中包含了 spring-cloud-config、spring-cloud-bus 等近 20 个子项目,提供了服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理等领域的解决方案。
Spring Cloud 本身并不是一个拿来即可用的框架,它是一套微服务规范,共有两代实现。
Spring Cloud Netflix 是 Spring Cloud 的第一代实现,主要由 Eureka、Ribbon、Feign、 ...
gate.io country
Set集合Set 集合中的对象不按特定的方式排序,只是简单地把对象加入集合。Set 集合中不能包含重复的对象,并且最多只允许包含一个 null 元素。
Set 实现了 Collection 接口,它主要有两个常用的实现类:HashSet 类和 TreeSet类。
HashSet类HashSet 具有以下特点:
不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化。
HashSet 不是同步的,如果多个线程同时访问或修改一个 HashSet,则必须通过代码来保证其同步。
集合元素值可以是 null。
当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据该 hashCode 值决定该对象在 HashSet 中的存储位置。如果有两个元素通过 equals() 方法比较返回的结果为 true,但它们的 hashCode 不相等,HashSet 将会把它们存储在不同的位置,依然可以添加成功。也就是说,两个对象的 hashCode 值相等且通过 equals() 方法比较返回结果为 ...
Java反射与注解
Java反射机制Java程序运行要经历编译期和运行期,反射是指在程序运行期可以动态获取类的属性和方法,以及可以动态调用对象的方法的功能。
反射优缺点优点:
能够运行时动态获取类的实例,大大提高系统的灵活性和扩展性。
与 Java 动态编译相结合,可以实现无比强大的功能。
对于 Java 这种先编译再运行的语言,能够让我们很方便的创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代码的链接,更加容易实现面向对象。
缺点:
反射会消耗一定的系统资源,因此,如果不需要动态地创建一个对象,那么就不需要用反射;
反射调用方法时可以忽略权限检查,获取这个类的私有方法和属性,因此可能会破坏类的封装性而导致安全问题。
对象序列化对象序列化(Serialize)指将一个 Java 对象写入 IO 流中,与此对应的是,对象的反序列化(Deserialize)则指从 IO 流中恢复该 Java 对象。如果想让某个 Java 对象能够序列化,则必须让它的类实现 java.io.Serializable 接口。
Serializable 接口是一个空接口,实现该接口无须实现任何方法,它只是告 ...