IT乐知
码龄5年
求更新 关注
提问 私信
  • 博客:49,480
    49,480
    总访问量
  • 117
    原创
  • 24
    粉丝
  • 2
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:四川省
加入CSDN时间: 2020-02-27

个人简介:it乐知 · 程序员的私房笔记

博客简介:

IT乐知

博客描述:
it乐知 · 程序员的私房笔记
查看详细资料
个人成就
  • 获得71次点赞
  • 内容获得11次评论
  • 获得244次收藏
创作历程
  • 11篇
    2021年
  • 107篇
    2020年
成就勋章
TA的专栏
  • 笔记
    2篇

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 2

TA参与的活动 0

兴趣领域 设置
  • 大数据
    mysqlredis
  • 后端
    spring架构
  • 搜索
    elasticsearch
  • 服务器
    linux
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

mybatis的$和#详解分析

Cause: java.sql.SQLSyntaxErrorException: Unknown column ‘itlezhi’ in ‘where clause’好久之前的mybatis源码阅读还有一点没有完成,今天准备来收个尾,结果一执行测试代码就报错了。01报错分析报错代码与异常信息如下图:第一瞬间我竟然不知道错在哪里了,感觉就是很正常的一句sql啊,我直接把错误信息“Cause: java.sql.SQLSyntaxErrorException: Unknown column ‘itl.
原创
发布博客 2021.07.16 ·
348 阅读 ·
1 点赞 ·
1 评论 ·
0 收藏

【Java面试题第八期】不会还有人不懂Java最基本的异常处理原理吧?

Java 使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含有异常的信息。Java 对异常进行了分类,不同类型的异常分别用不同的 Java 类表示,所有异常的根类为java.lang.Throwable,Throwable 下面又派生了两个子类:Error 和 Exception,Error 表示应用程序本身无法克服和恢复的一种严重问题,程序只能挂掉,例如,说内存溢出和线程死锁等系统问题。Exception 表示程序还能够克服和恢复的问题,其中又分为系.
原创
发布博客 2021.03.18 ·
248 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【Java面试题第七期】一文回答面试中常见反射问题?

java反射的作用反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。1)在运行时判断任意一个对象所属的类。2)在运行时构造任意一个类的对象。3)在运行时判断任意一个类所具有的成员变量和方法。4)在运行时调用任意一个对象的方法。实现Java反射的类1)Class:表示正在运行的Java应用程序中的类和接口。注意: 所有获取对象的信息都需要Class类来实现。.
原创
发布博客 2021.03.12 ·
324 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【Java面试题第六期】你对注解了解多少?

首先注解是什么?Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法。 Annatation(注解)是一个接口,程序可以通过反射来获取指定程序中元素的 Annotation对象,然后通过该 Annotation 对象来获取注解中的元数据信息。上面是注解的定义,可以从中总结以下几个关键的点:干什么的:用来在程序中对元素(元素就是Java中的类、方法等)关联其他信息的。是什么:它是一个接口,一个特殊的接口。怎么用:通过反射获取元素中的注解.
原创
发布博客 2021.03.09 ·
246 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

【Java面试题第五期】Java中垃圾收集算法有哪些?

​GC这块也是面试的重点,面试长问,实际上如果只一般公司的面试涉及的并不深,最基本的算法还是要了解的,几种收集算法都比较简单,相信大家都知道,这里个大家简单的回顾下。标记-清除这是垃圾收集算法中最基础的,首先标记那些要被回收的对象,然后统一回收。缺点是效率不高,内存碎片多,优点是算法简单。复制算法为了解决效率问题,复制算法将可用内存按容量划分为相等的两部分,然后每次只使用其中的一块,当一块内存用完时,就将还存活的对象复制到第二块内存上,然后一次性清除完第一块内存,下次回收再将第二块上存活对象复制
原创
发布博客 2021.02.26 ·
120 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【Java面试题第四期】使用过哪些JDK命令?

​我们平时使用idea开发,并且项目都是部署到像Tomcat容器上的,所以很少用到JDK自带的一些命令,实际上JDK提供了很多命名用来查看Java程序在运行时的一些信息,这里说一些简单常见的,有兴趣的可以多去了解测试下。jpsjps:Java Virtual Machine Process Status Tool用来查看Java进程 ,相当于Linux下的ps命令,只不过它只列出Java进程。jstatjstat:JVM Statistics Monitoring Tooljstat可以查看J.
原创
发布博客 2021.02.24 ·
131 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【Java面试题第三期】JVM中哪些地方会出现内存溢出?出现的原因是什么?

​ ​内存溢出(Out Of Memory)经常简称为OOM,在jvm中主要分为方法区、堆、栈、本地方法栈、程序计数器这几部分,其中程序计数器是唯一不会出现OOM的,也就是说其他区域都会出现OOM。下面来分别说明几个区域出现OOM的情况及特征。1. java堆溢出(heap)Java堆内存主要用来存放运行过程中所有的对象,该区域OOM异常一般会有如下错误信息:java.lang.OutofMemoryError:Java heap space可以通过dump的内存快照就能分析,到底是由于程序.
原创
发布博客 2021.02.23 ·
1445 阅读 ·
0 点赞 ·
0 评论 ·
5 收藏

【Java面试题第一期】有没有jvm调优经验?调优方案有哪些?

​1. 调优时机:a. heap 内存(老年代)持续上涨达到设置的最大内存值;b. Full GC 次数频繁;c. GC 停顿时间过长(超过1秒);d. 应用出现OutOfMemory 等内存异常;e. 应用中有使用本地缓存且占用大量内存空间;f. 系统吞吐量与响应性能不高或下降。2. 调优原则:a. 多数的Java应用不需要在服务器上进行JVM优化;b. 多数导致GC问题的Java应用,都不是因为我们参数设置错误,而是代码问题;c. 在应用上线之前,先考虑将机器的JVM参数设置到最.
原创
发布博客 2021.01.15 ·
214 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

你知道哪几种垃圾收集器,各自的优缺点?

几种垃圾收集器:Serial收集器:单线程的收集器,收集垃圾时,必须stoptheworld,使用复制算法。ParNew收集器:Serial收集器的多线程版本,也需要stoptheworld,复制算法。ParallelScavenge收集器:新生代收集器,复制算法的收集器,并发的多线程收集器,目标是达到一个 可控的吞吐量。如果虚拟机总共运行100分钟,其中垃圾花掉1分钟,吞吐量就是99%。SerialOld收集器:是Serial收集器的老年代版本,单线程收集器,使用标记整理算法。Parallel.
原创
发布博客 2021.01.12 ·
802 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

【Java面试题第一期】Java常见异常有哪些?

​java.lang.IllegalAccessError:违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。java.lang.InstantiationError:实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常.java.lang.OutOfMemoryError:内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。java.lang.StackOverflow.
原创
发布博客 2021.01.11 ·
146 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Mybatis的SqlSession执行sql过程

​上一篇分析了SqlSession执行sql的过程,其中并没有分析sql是从哪里来的,今天就来仔细分析下。Sql来源从上一篇的最后一步执行sql那里倒推sql的来源,源码主要过程如下图:可以看到最后是通过BoundSql直接获取的sql,然后往前倒推最后发现是通过MappedStatement的getBoundSql方法返回的。MappedStatement在之前分析mapper的时候知道一个执行sql对应一个MappedStatement对象,它封装有mybatis中需要执行一条sql的所有信息,
原创
发布博客 2021.01.08 ·
1097 阅读 ·
1 点赞 ·
1 评论 ·
0 收藏

Mybatis的SqlSession执行sql过程

​上一篇分析了SqlSession的创建过程,接下来就来到最后一步执行sql的过程了。执行sql总览首先还是来看下目前分析的代码所处的位置,具体的代码如下:之前也说过要使用mybatis操作数据库,在代码里面与mybatis相关的代码只需要三步:创建SqlSessionFactory对象,利用SqlSessionFactory对象创建SqlSession,最后利用SqlSession执行sql。到目前为止已经分析到最后一步,接下来详细分析sql是如果得到并执行的。SqlSession执行部分上图
原创
发布博客 2020.12.31 ·
543 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Mybatis的SqlSession创建过程详解

前面mybatis的初始化过程分析完成,接下来是第二步SqlSession的创建。创建过程总览SqlSession创建过程如下图:创建过程还是比较简单的,首先是之前分析的SqlSessionFactory,在mybatis中提供了两个SqlSessionFactory实现:SqlSessionManager和DefaultSqlSessionFactory,通过前面的分析知道默认返回的是DefaultSqlSessionFactory,至于SqlSessionManager后面再说吧。Defaul
原创
发布博客 2020.12.14 ·
840 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Mybatis初始化过程简单总结

前面连续多篇文章都是在数据mybatis的初始化过程,目前基本完成,是时候做一个总结了。​总览首先回顾下最上层的测试代码,实际上目前分析的还在测试代码中与mybatis相关的第一步,具体如下图:目前还在构建SqlSessionFactory这行代码,这行代码涉及了很多流程,前面也分析了很多,这里把分析的主要流程总结如下图:上图中只画出了SqlSessionFactory初始化过程以及mapper的加载过程,由于其他比如Configuration的属性、别名、插件、数据源配置、类型映射处理器的初
原创
发布博客 2020.12.07 ·
224 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Mybatis中SqlSource解析流程详解

前面几篇文章都在详细分析mapper的加载过程,但是始终没有看到sql的解析过程,今天来详细分析下。解析sql的位置前面分析到不管是通过注解还是通过xml方式生成mapper,最终都是调用MapperBuilderAssistant类的addMappedStatement方法,这个方法接受的其中一个SqlSource参数,SqlSource类中就是XML文件或者注解方法中映射语句的实现。那么SqlSource对象是在哪里创建的呢?在通过注解实现mapper的流程中是在MapperAnnotation
原创
发布博客 2020.12.02 ·
448 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Mybatis中mapper的xml解析详解

上一篇文章分析了mapper注解关键类MapperAnnotationBuilder,今天来看mapper的项目了解析关键类XMLMapperBuilder。​基础介绍回顾下之前是在分析configuration的初始化过程,已经进行到了最后一步mapperElement(root.evalNode(“mappers”)),这个方法里有两种解析mapper的方法,一种是解析类,一种是解析xml文件,上一篇文章在讲解析类中的注解,今天说到的就是解析xml的流程,关键代码如下:解析mapper有4种情
原创
发布博客 2020.11.30 ·
1748 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

Mybatis中mapper相关注解解析类详解

上一篇文章分析发现解读mapper关键是两个类MapperAnnotationBuilder和XMLMapperBuilder,今天先来看MapperAnnotationBuilder。​基础介绍根据MapperAnnotationBuilder和XMLMapperBuilder两个的名字大概也可以猜出来他们的作用,MapperAnnotationBuilder应该是来处理mapper注解的,而XMLMapperBuilder是来处理mapper.xml文件的。接着上一篇通过扫描接口添加mapper
原创
发布博客 2020.11.23 ·
772 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Mybatis对mapper的加载流程详解

今天来分析Configuration初始化的最后一部分mapper的加载。​加载方法mapperElementXMLConfigBuilder配置Configuration的parseConfiguration方法还剩最后一行解析代码:mapperElement(root.evalNode(“mappers”));mapperElement方法源码与详解如下图:从源码可以得出一些结论:mappers节点支持mapper和package两种类型子节点;package子节点只需要name一个属性
原创
发布博客 2020.11.16 ·
801 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Mybatis中类型映射处理器详解

上一篇梳理了Configuration初始化分析,今天继续typeHandlers部分。​数据库厂商标识接上一篇文章分析,下一个解析的是databaseIdProvider节点,这个节点好理解,从字面理解就是数据库提供商的id,也就是mybatis需要访问的数据库是那种数据库。我们都知道mybatis只是一个ORM框架,并不是针对具体的数据库,需要兼容多种数据库,所以mybatis可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性。解析在配置文件
原创
发布博客 2020.11.11 ·
499 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

Mybatis中别名、插件与数据源配置

上一篇介绍了Configuration的properties和settings,接下来继续。​设置别名别名也是mybatis中最重要的配置之一,可以通过很简单的一个字符串来代替一个Class,它可以减少很多的重复代码,别名类的源码如下图:可以看到它底层数据结构是一个map,并且初始化的时候已经把常见的别名设置到map中了,在前面讲到的Configuration的初始化时,也设置了很多比如JDBC、POOLED、SLF4J、LOG4J等。在mybatis的配置文件中也可以设置别名,别名的配置及解析
原创
发布博客 2020.11.09 ·
233 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多