【DB系列】Mybatis系列教程之CURD基本使用姿势

mybatis作为数据的ORM框架,在国内的应用市场还是非常可观的,当初刚开始工作时使用spring + mybatis进行开发,后来也使用过hibernate, jdbctemplate, jooq,mybatisplus等其他的一些框架,

就个人使用感触来讲jooq的使用姿势和写sql差不多,基本上可以会写sql的无需额外的培训,立马可以上手;

hibernate最大的特点就是借助方法名来映射sql语句,非常有特点,但是当查询条件复杂一些的话,对小白而言就没有那么友好了;

而jdbctemplate,这个在小项目,轻量的db操作中,用起来还是很爽的,非常灵活,但是也有一些点需要特别注意,比如queryForObject,查不到数据时抛异常而不是返回null;

至于mybatis以及衍生的mybatis-plus,也就是接下来的主角了,它的特点如何,为什么受到国内大量开发者的追捧,将它作为db操作的第一ORM框架,让我们看完之后再说

查看更多

分享到

【DB系列】借助redis来实现延时队列(应用篇)

延时队列,相信各位小伙伴并不会陌生,jdk原生提供了延时队列的使用,当然我们这里介绍的不是这种;在实际的项目中,如果我们有延时队列的场景,可以怎样去实现呢

举一个简单的例子,如下单15分钟内,若没有支付,则自动取消订单

本文将介绍一种非常非常简单的实现方式

查看更多

分享到

【WEB系列】SpringBoot之拦截器Interceptor使用姿势介绍

在SpringMVC中,拦截器与Filter两者的应用场景好像差不多,最大的区别可能是前者属于Spring的特产,而后者则是Servlert三剑客中的一个,它们本质的区别在于两者发生的时机不一致

  • Filter: 在执行Servlet#service方法之前,会执行过滤器;执行完毕之后也会经过过滤器
  • Interceptor: 对会话进行拦截,可以在调用Handler方法之前,视图渲染之前,方法返回之前三个时机触发回调

基于上面的触发时间的不同,两者可以做的事情也不尽相同

  • Filter: 操作Request/Response
  • Interceptor: 操作Request/Response/handler/modelAndView/exception

接下来本文将来看一下,在SpringMVC中拦截器的使用姿势

查看更多

分享到

【中间件】SpringBoot实战基于异常日志的邮件报警

相信所有奋斗在一线的小伙伴,会很关心自己的系统的运行情况,一般来说,基础设施齐全一点的公司都会有完善的报警方案,那么如果我们是一个小公司呢,不能因为基础设施没有,就失去对象的感知能力吧;如果我们的系统大量异常却不能实时的触达给我们,那么也就只会有一个结果–杀个程序猿祭天

本文简单的介绍一种实现思路,基于error日志来实现邮件的报警方案

查看更多

分享到

【中间件】SpringBoot系列之邮件发送姿势介绍

邮件发送,在实际的项目开发中,可能用的不是特别多,如果没有特定的需求,相信也没有多少小伙伴会特意的去关注,那么如果现在我们希望针对项目做一个异常的报警系统,当出现异常的时候,可以向指定的小伙伴发送邮件提醒,那么让我们来实现这个功能,可以怎么办呢?

这里介绍一下如何使用SpringBoot封装好的MailSender来实现邮件发送

查看更多

分享到

【基础系列】SpringBoot应用篇@Value注解支持配置自动刷新能力扩展

在我们的日常开发中,使用@Value来绑定配置属于非常常见的基础操作,但是这个配置注入是一次性的,简单来说就是配置一旦赋值,则不会再修改;
通常来讲,这个并没有什么问题,基础的SpringBoot项目的配置也基本不存在配置变更,如果有使用过SpringCloudConfig的小伙伴,会知道@Value可以绑定远程配置,并支持动态刷新

接下来本文将通过一个实例来演示下,如何让@Value注解支持配置刷新;本文将涉及到以下知识点

  • BeanPostProcessorAdapter + 自定义注解:获取支持自动刷新的配置类
  • MapPropertySource:实现配置动态变更

查看更多

分享到

【DB系列】SpringBoot系列Mybatis之插件机制Interceptor

在Mybatis中,插件机制提供了非常强大的扩展能力,在sql最终执行之前,提供了四个拦截点,支持不同场景的功能扩展

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)

本文将主要介绍一下自定义Interceptor的使用姿势,并给出一个通过自定义插件来输出执行sql,与耗时的case

查看更多

分享到

【DB系列】SpringBoo系列Mybatis之自定义类型转换TypeHandler

在使用mybatis进行db操作的时候,我们经常会干的一件事情就是将db中字段映射到java bean,通常我们使用ResultMap来实现映射,通过这个标签可以指定两者的绑定关系,那么如果java bean中的字段类型与db中的不一样,应该怎么处理呢?

如db中为timestamp, 而java bean中定义的却是long

  • 通过BaseTypeHandler来实现自定义的类型转换

查看更多

分享到

【DB系列】SpringBoot系列Mybatis之Mapper接口与Sql绑定几种姿势

通常我们在使用Mybatis进行开发时,会选择xml文件来写对应的sql,然后将Mapper接口与sql的xml文件建立绑定关系,然后在项目中调用mapper接口就可以执行对应的sql

那么如何将Mapper接口与sql进行绑定呢?本文将介绍四种常见的姿势

  • 默认策略
  • SpringBoot配置参数mybatis.mapper-locations
  • <mapper>指定
  • SqlSessionFactory指定

查看更多

分享到

【DB系列】SpringBoot系列Mybatis之Mapper注册的几种方式

SpringBoot项目中借助Mybatis来操作数据库,对大部分java技术栈的小伙伴来说,并不会陌生;我们知道,使用mybatis,一般会有下面几个

  • Entity: 数据库实体类
  • Mapper: db操作接口
  • Service: 服务类

本片博文中的注解,放在Mapper上,你知道注册Mapper有几种方式么(这个问题像不像”茴”字有几个写法😬)

查看更多

分享到

【DB系列】SpringBoot缓存注解@Cacheable之自定义key策略及缓存失效时间指定

上一篇博文介绍了Spring中缓存注解@Cacheable @CacheEvit @CachePut的基本使用,接下来我们将看一下更高级一点的知识点

  • key生成策略
  • 超时时间指定

查看更多

分享到

【DB系列】缓存注解@Cacheable @CacheEvit @CachePut使用姿势介绍

Spring在3.1版本,就提供了一条基于注解的缓存策略,实际使用起来还是很丝滑的,本文将针对几个常用的注解进行简单的介绍说明,有需要的小伙伴可以尝试一下

本文主要知识点:

  • @Cacheable: 缓存存在,则使用缓存;不存在,则执行方法,并将结果塞入缓存
  • @CacheEvit: 失效缓存
  • @CachePut: 更新缓存

查看更多

分享到