SSM
文章平均质量分 77
sping & mybatis
zhifeng687
这个作者很懒,什么都没留下…
展开
-
Spring Bean生命周期思维导图
参考:Spring Bean 的生命周期原创 2022-03-30 00:48:08 · 370 阅读 · 0 评论 -
Spring IOC执行流程思维导图
IOC执行流程图执行流程的各个步骤原创 2022-03-30 00:41:55 · 1043 阅读 · 0 评论 -
Spring MVC原理思维导图
Spring mvc执行原理程说明:(1)客户端(浏览器)发送请求,直接请求到DispatcherServlet。(2)DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler。(3)解析到对应的Handler后,开始由HandlerAdapter适配器处理。(4)HandlerAdapter会根据Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。(5)处理器处理完业务后,会返回一个ModelAndView对象.原创 2017-06-16 10:55:41 · 4997 阅读 · 1 评论 -
mybatis bind标签实现优雅模糊查询
bind:可以将OGNL(对象图导航语言)表达式的值绑定到一个变量中,方便后来引用这个变量的值使用Mybatis bind可以实现Mysql的模糊查询字符串拼接(like)<sql id="columnSql"> <trim suffixOverrides=","> <!-- suffixOverrides此时的作用是去除最后一个逗号 --> id, username, password, sex, </trim></sq转载 2016-04-10 22:32:40 · 344 阅读 · 0 评论 -
Spring 参数校验的异常处理
对于不同的参数解析方式,Spring 抛出的异常也不同,而且这些异常没有继承关系,异常的内部也各不相同,只能对每种异常单独处理。感觉这块地方 spring 没有设计好,处理起来比较麻烦。跟参数相关的异常主要有三个需要手动处理。org.springframework.validation.BindException org.springframework.web.bind.MethodArgumentNotValidException javax.validation.ConstraintViol转载 2017-01-09 02:28:07 · 1192 阅读 · 0 评论 -
spring mvc异常处理源码解读 ——HandlerExceptionResolver
2.常见全局异常处理在 Spring 中常见的全局异常处理,主要有三种:(1)注解 ExceptionHandler(2)继承 HandlerExceptionResolver 接口(3)注解 ControllerAdvice在后面的讲解中,主要以 HTTP 错误码:400(请求无效)和 500(内部服务器错误)为例,先看一下测试代码以及没有任何处理的返回结果,如下:图 1:测试代码图 2:没有异常的错误返回2.1 注解 Exce.转载 2016-05-05 10:02:39 · 10157 阅读 · 0 评论 -
MyBatis解决列名和属性名不一致问题
如果查询时使用 resultType 属性,表示采用 MyBatis 的Auto-Mapping(自动映射)机制,即相同的列名和属性名会自动匹配.因此, 当数据库表的列名和类的属性名不一致时,会导致查不到数据.解决该问题可以有两种方式:1. 列别名2. 使用<resultMap>标签<resultMap>用于自定义映射关系,可以由程序员自主制定列名和属性名的映射关系.一旦使用<resultMap>, 表示不再采用自动映射机制....转载 2016-11-12 23:15:26 · 464 阅读 · 0 评论 -
Spring MVC 类型转换器和转换器工厂
Spring MVC框架的 Converter<S,T> 是一个可以将一种数据类型转换成另一种数据类型的接口,这里 S 表示源类型,T 表示目标类型。开发者在实际应用中使用框架内置的类型转换器基本上就够了,但有时需要编写具有特定功能的类型转换器。内置的类型转换器在SpringMVC 框架中,对于常用的数据类型,开发者无须创建自己的类型转换器,因为 Spring MVC 框架有许多内置的类型转换器用于完成常用的类型转换。Spring MVC 框架提供的内置类型转换包括以下几种类型。...转载 2017-03-20 12:53:29 · 611 阅读 · 0 评论 -
Mybatis解决foreach标签内list为空的问题
在工作中,我们经常会因为在mybatis中的不严谨写法,导致foreach解析后的sql语句产生in()或values()的情况,而这种情况不符合SQL的语法,最终会导致bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException的问题。看到这个报错,大家肯定就会意识到是sql语句的问题,那么我们该如何解决这个问题呢?网络上有一些现成的解决方案:1、对list判n转载 2017-02-14 17:05:08 · 3614 阅读 · 0 评论 -
mybatis中使用小于号<
在mybatis中sql是写在xml映射文件中的,如果sql中有一些特殊字符的话,在解析xml文件的时候就会被转义,如若不希望被转义,那该怎么办呢?方法一:使用特殊转义字符例如,>=开始日期 并且<=结束日期> > 大于号< < 小于号 <if test="searchTimeBegin != null and searchTimeBegin != ''"> AND tcci.cons...转载 2016-10-05 21:44:37 · 3320 阅读 · 0 评论 -
AutoLoadCache – 再谈缓存的穿透、数据一致性和最终一致性问题
缓存是用于解决高并发场景下系统的性能及稳定性问题的银弹。本文主要是讨论我们经常使用的分布式缓存 Redis 在开发过程中的相关思考。1. 如何将业务逻辑与缓存之间进行解耦?大部分情况,大家都是把缓存操作和业务逻辑之间的代码交织在一起的,比如(代码一):从上面的代码可以看出以下几个问题:缓存操作非常繁琐,产生非常多的重复代码; 缓存操作与业务逻辑耦合度非常高,不利于后期的维护; 当业务数据为 null 时,无法确定是否已经缓存,会造成缓存无法命中; 开发阶段,为了排查问题,经常需转载 2015-09-24 00:34:53 · 12037 阅读 · 0 评论 -
Spring Bean 初始化之BeanPostProcessor、InitializingBean和init-method
你可以直接看这里:http://reactnative.cn/docs/native-component-ios.html#content1.React Native 原生UI组件.jpg原生开发,发展到今天已经非常成熟完善,已有组件成千上万,极大的提高了开发效率。React Native 在Facebook的React.js conf 2015上提出,至今不到转载 2017-02-15 18:30:16 · 1657 阅读 · 0 评论 -
Spring Bean 初始化之InitializingBean, init-method 和 PostConstruct
概述从接口的名字上不难发现,InitializingBean 的作用就是在 bean 初始化后执行定制化的操作。Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下三种:通过实现 InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法; 通过 <bean> 元素的 init-method/destroy-method 属性指定初始化转载 2017-02-16 17:09:12 · 1089 阅读 · 0 评论 -
BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor
一、InitializingBean接口说明InitializingBean接口为bean提供了属性初始化后的处理方法,它只包括afterPropertiesSet方法,凡是继承该接口的类,在bean的属性初始化后都会执行该方法。package org.springframework.beans.factory;/** * Interface to be implemented by...转载 2015-12-09 21:23:39 · 509 阅读 · 0 评论 -
Spring事务传播机制
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:表1事务传播行为类型 事务传播行为类型说明PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事转载 2016-06-04 21:47:11 · 317 阅读 · 0 评论 -
quartz线程管理的源码分析
概述quartz启动后有多个线程同时在跑。启动时会启动主线程、集群线程、检漏线程、工作线程。主线程负责查询到需要触发的线程,并放入到线程队列。一、主线程QuartzScheduleThread关于QuartzScheduleThread是quartz启动时开始启动,用于trigger的获取、触发,并放入到线程池中执行。二、线程池SimpleThreadPool线程池的初使化:new...原创 2015-12-23 12:51:42 · 770 阅读 · 0 评论 -
mybatis 使用mapper代理开发DAO
开发思路:1.程序员需要编写mapper.xml映射文件2.程序员只需要编写mapper接口(相当于dao接口),需要遵循一些开发规范3.mybatis可以自动生成mapper接口的实现类代理对象二.开发规范以及过程1.在mapper.xml中,namespace等于mapper接口地址2.mapper.java接口中的方法名和mapper.xml中的statement的ID一直3.mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterTy转载 2016-01-19 16:43:58 · 715 阅读 · 0 评论 -
MyBatis解决动态传入表名和字段名参数的问题
动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理。下面让我们先来熟悉下mybatis里#{}与${}的用法: 在动态sql解析过程,#{}与${}的效果是不一样的:#{ } 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符。 如以下sql语句select * from user where name = #{name};.转载 2016-01-20 16:21:39 · 1981 阅读 · 0 评论 -
Spring解析Dubbo标签
1. 要了解Dubbo是如何解析标签的,首先要清楚一点就是Spring如何处理自定义标签的,因为Dubbo的标签可以算是Spring自定义标签的一种情况; 2. Spring通过两个接口来解析自定义的标签:NamespaceHandler和BeanDefinitionParser接口;NamespaceHandler负责namespace的处理,而BeanDefinitionParser负责Be...转载 2018-03-23 16:00:57 · 501 阅读 · 0 评论 -
spring MVC之ContextLoaderListener监听tomcat启动并初始化IOC容器
在spring Web中,需要初始化IOC容器,用于存放我们注入的各种对象。当tomcat启动时首先会初始化一个web对应的IOC容器,用于初始化和注入各种我们在web运行过程中需要的对象。当tomcat启动的时候是如何初始化IOC容器的,我们先看一下在web.xml中经常看到的配置:<context-param> <param-name>contextConfi...转载 2018-03-22 10:42:12 · 1870 阅读 · 0 评论 -
springMVC之HttpMessageConverter
@RequestBody、@ResponseBody注解可以直接将输入解析成java对象、将输出解析成Json,但HTTP 请求和响应是基于文本的,意味着浏览器和服务器通过交换原始文本进行通信,而这里其实就是HttpMessageConverter发挥着作用。转载 2017-08-27 17:43:31 · 1172 阅读 · 0 评论 -
mybatis-spring官方文档
第三章 SqlSessionFactoryBean在基本的 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来替代。Setup要创建工厂 bean,放置下面的代码在 Spring 的 XML 配置文件中:<bean id="sqlSessio...转载 2017-01-04 20:03:37 · 7212 阅读 · 0 评论 -
quartz2.3任务管理的源码分析
概述quartz在任务管理中,先把任务存在某个地方(QuartzSchedulerResources),等到时机到了(触发trigger),再由调度线程(QuartzSchedulerThread)把该任务取出来放到线程池中运行。因为主线程的QuartzScheduler会操作QuartzSchedulerResources,把任务存入quartz;调度线程也会操作QuartzSchedu...原创 2015-12-30 16:41:38 · 587 阅读 · 0 评论 -
Jackson 框架
Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架。Jackson 社 区相对比较活跃,更新速度也比较快, 从 Github 中的统计来看,Jackson 是最流行的 json 解析器之一 。 Spring MVC 的默认 json 解析器便是 Jackson。 Jackson 优点很多。 Jackson 所依赖的 jar 包较少 ,简单易用。与其他 J...转载 2015-12-23 12:09:50 · 3038 阅读 · 0 评论 -
springMVC之@ControllerAdvice和ResponseBodyAdvice
当使用HandlerInterceptor拦截器的postHandle()对controller的返回值进行拦截处理时,如果controller的方法被@ResponseBody修饰,则无法拦截controller方法的返回值。通过实现ResponseBodyAdvice接口,则带@ResponseBody或者ResponseEntity的控制器方法可以在执行完成之后,response写入输出流(通过HttpMessageConverter)之前,完成对response的拦截。原创 2016-10-09 11:05:52 · 2270 阅读 · 1 评论 -
springMVC:HandlerInterceptor拦截器的使用
HandlerInterceptor接口主要定义了三个方法: 1. boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object handle)方法:该方法将在请求处理之前进行调用,只有该方法返回true,才会继续执行后续的Interceptor和Controller,当返回值为true 时就会继续调用下一个Interceptor的preHandle 方法,如果已经是最后一个Interceptor的时转载 2016-10-09 10:45:56 · 2123 阅读 · 0 评论 -
SpringMVC是如何查找方法的参数名的
表单中input的参数名和Controller的参数变量名保持一致,就能完成数据绑定,如果不一致可以使用@RequestParam注解。需要注意的是,如果Controller方法参数中定义的是基本数据类型,但是从页面提交过来的数据为null或者”"的话,会出现数据转换的异常。也就是必须保证表单传递过来的数据不能为null或”",所以,在开发过程中,对可能为空的数据,最好将参数数据类型定义成包装类型。转载 2016-08-04 17:41:08 · 917 阅读 · 0 评论 -
继承PropertyPlaceholderConfigurer实现自定义解析占位符策略
spring提供的PropertyPlaceholderConfigurer都是根据指定的配置文件解析占位符,在实际生产环境中,更常见的需求是从数据库中加载配置信息,根据加载的配置信息解析占位符。本文将讨论如何继承PropertyPlaceholderConfigurer,实现自定义解析占位符的策略继承Spring的PropertyPlaceholderConfigurer,重写方法,实现从数据库...原创 2016-07-04 15:59:26 · 1298 阅读 · 0 评论 -
基于@AspectJ和Schema的AOP
SessionFactory在Hibernate中实际上起到了一个缓冲区的作用 他缓冲了HIbernate自动生成SQL语句和其他的映射数据 还缓冲了一些将来有可能重复利用的数据 为了能创建一个SessionFactory对象 应该在Hibernate初始化的时候创建一个Configuration类的实例 并将已经写好的映射文件交给他处理 这样Configuration对象就可以创建转载 2016-07-04 15:10:57 · 985 阅读 · 0 评论 -
spring的事务管理器有几种
接下来让我们学习一下如何在Spring配置文件中定义事务管理器:声明对本地事务的支持:a)JDBC及iBATIS、MyBatis框架事务管理器bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> property name="dataSource转载 2016-07-26 09:50:28 · 3577 阅读 · 0 评论 -
Spring可扩展的XML Schema机制(spring实现自定义标签)
从Spring2.0开始,Spring提供了XML Schema可扩展机制,用户可以自定义XML Schema文件,并自定义XML Bean解析器,并集成到Spring Ioc 容器中完成XML自定义扩展,需要下面几个步骤:可扩展XML Schema机制.png创建一个 XML Schema 文件,描述自定义的合法构建模块,也就是xsd文件自定义个处理器类,并实现NamespaceHandler接...转载 2016-05-22 13:04:54 · 1004 阅读 · 0 评论 -
使用Redis缓存和Google Guava本地缓存注意事项(深拷贝和浅拷贝)
1、问题场景及说明系统中同时使用 Redis 缓存和 Guava本地缓存。用 Guava 缓存将 Redis 缓存包了一层。可以提升效率,但是也会引出一些问题。问题:同一个本地缓存Map,获取到的值有时会不一致。不同机器可能不一致,同一机器也可能不一致。很神奇,但是数据库里都是对的。后来发现,因为有一个请求会对该缓存进行remove操作,导致缓存改变。如果这个请求到某个机器上,该台机器上的缓存就会被修改。同时缓存过期时间为一分钟,过期之后获取到的缓存是正常的。如果该台机器没有再次接收到请求转载 2016-01-20 17:19:53 · 1545 阅读 · 0 评论 -
springMVC之InternalResourceViewResolver
InternalResourceViewResolver用于访问诸如JSP、HTML、XHTML这样的view。它扩展了UrlBasedViewResolver,因此有2个属性:prefix和suffix。UrlBasedViewResolver使用前缀和后缀中定义的值,将逻辑视图转换成真实路径的资源URL。有2种方式配置InternalResourceViewResolver:XML配置和java配置。原创 2016-09-20 10:17:56 · 8288 阅读 · 0 评论 -
spring @Transactional注解
默认情况下,数据库处于自动提交模式。每一条语句处于一个单独的事务中,在这条语句执行完毕时,如果执行成功则隐式的提交事务,如果执行失败则隐式的回滚事务。对于正常的事务管理,是一组相关的操作处于一个事务之中,因此必须关闭数据库的自动提交模式。不过,这个我们不用担心,spring会将底层连接的自动提交特性设置为false。转载 2016-09-20 10:58:35 · 340 阅读 · 0 评论 -
使用PropertyPlaceholderConfigurer指定配置文件和@Value 注解获取properties值
为了简化读取properties文件中的配置值,spring支持@value注解的方式来获取,这种方式大大简化了项目配置,提高业务中的灵活性。一、两种使用方法1、@Value("#{configProperties['key']}")2、@Value("${key}")二、配置2.1 @Value("#{configProperties['key']}")使用2.1.1配置文件:[html] vi...转载 2015-12-23 00:26:47 · 4514 阅读 · 0 评论 -
Spring事件驱动模型
1、在spring的配置文件中导入命名空间 xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context...转载 2015-12-22 23:51:04 · 1165 阅读 · 0 评论 -
HttpClient连接池原理
一、背景HTTP协议是无状态的协议,即每一次请求都是互相独立的。因此它的最初实现是,每一个http请求都会打开一个tcp socket连接,当交互完毕后会关闭这个连接。HTTP协议是全双工的协议,所以建立连接与断开连接是要经过三次握手与四次挥手的。显然在这种设计中,每次发送Http请求都会消耗很多的额外资源,即连接的建立与销毁。于是,HTTP协议的也进行了发展,通过持久连接的方法来进行socket连接复用。从图中可以看到:在串行连接中,每次交互都要打开关闭连接 在持久连接中,第一次转载 2015-12-20 12:13:07 · 8633 阅读 · 0 评论 -
spring MVC之Annotated Controllers
概述@PostMapping要与@RequestBody结合使用摘自:spring MVC doc API1.4. Annotated ControllersSame in Spring WebFluxSpring MVC provides an annotation-based programming model where@Controllerand@RestC...翻译 2017-08-07 15:41:53 · 471 阅读 · 0 评论 -
Spring IoC 核心流程
基础概念1、IoC 和 DIIoC (Inversion of Control),即控制反转。这不是一种新的技术,而是 Spring 的一种设计思想。在传统的程序设计,我们直接在对象内部通过 new 来创建对象,是程序主动去创建依赖对象;而在 Spring 中有专门的一个容器来创建和管理这些对象,并将对象依赖的其他对象注入到该对象中,这个容器我们一般称为 IoC 容器。所有的类的创建、销毁都由 Spring 来控制,也就是说控制对象生存周期的不再是引用它的对象,而是 Spring。对转载 2017-06-06 19:43:25 · 357 阅读 · 0 评论 -
filter,interceptor,controllerAdvice,aspect,controller执行顺序
1、filter,这是java的过滤器,和框架无关的,是所有过滤组件中最外层的,从粒度来说是最大的。配置方式,有直接实现Filter+@component,@Bean+@configuration(第三方的filter)2、interceptor,spring框架的拦截器配置方式,@configuration+继承WebMvcConfigurationSupport类添加过滤器。3、aspect,可以自定义要切入的类甚至再细的方法,粒度最小。加个注解用效果更佳。4、controllerA转载 2017-06-05 19:29:26 · 370 阅读 · 0 评论