最后:学习总结——MyBtis知识脑图(纯手绘xmind文档)
学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)
除此之外,前文所提及的Alibaba珍藏版mybatis手写文档以及一本小小的MyBatis源码分析文档——《MyBatis源码分析》等等相关的学习笔记文档,也皆可分享给认可的朋友!
关联文章:
===================================================================
知其然,知其所以然
=================================================================
此博文的依据:hutool-5.6.5版本源码
cn.hutool
hutool-core
5.6.5
方法名称:DateUtil.date(java.util.Date)
===============================================================================================
{@link Date}类型时间转为{@link DateTime}
如果date本身为DateTime对象,则返回强转后的对象,否则新建一个DateTime对象
/**
-
{@link Date}类型时间转为{@link DateTime}
-
如果date本身为DateTime对象,则返回强转后的对象,否则新建一个DateTime对象
-
@param date Long类型Date(Unix时间戳)
-
@return 时间对象
-
@since 3.0.7
*/
public static DateTime date(Date date) {
if (date instanceof DateTime) {
return (DateTime) date;
}
return dateNew(date);
}
判断传入的date是否是DateTime类型,如果是,直接转换成DateTime对象
如果不是,则执行DateUtil.dateNew((date)
方法名称:DateUtil.DateUtil.dateNew(java.util.Date)
===========================================================================================================
根据已有{@link Date} 产生新的{@link DateTime}对象
/**
-
根据已有{@link Date} 产生新的{@link DateTime}对象
-
@param date Date对象
-
@return {@link DateTime}对象
-
@since 4.3.1
*/
public static DateTime dateNew(Date date) {
return new DateTime(date);
}
//DateTime 类
/**
-
给定日期的构造
-
@param date 日期
*/
public DateTime(Date date) {
this(
date,//
(date instanceof DateTime) ? ((DateTime) date).timeZone : TimeZone.getDefault()
);
}
代码里写了一个多目运算,(date instanceof DateTime) ? ((DateTime) date).timeZone : TimeZone.getDefault()。
传入的date是否是DateTime类型,如果是,直接取DateTime对象的时区,如果不是,取系统默认时区。
然后调用这个方法DateTime(Date date, TimeZone timeZone)
//DateTime 类
/**
-
给定日期的构造
-
@param date 日期
-
@param timeZone 时区
-
@since 4.1.2
*/
public DateTime(Date date, TimeZone timeZone) {
this(ObjectUtil.defaultIfNull(date, new Date()).getTime(), timeZone);
}
ObjectUtil.defaultIfNull(date, new Date()).getTime()
要拆成2个调用
1、ObjectUtil.defaultIfNull(date, new Date())
2、Date.getTime()
ObjectUtil.defaultIfNull是Hutool封装的一个工具类,用来判断数据对象是否为null,如果是,返回默认值
源码如下
/**
-
如果给定对象为{@code null}返回默认值
-
ObjectUtil.defaultIfNull(null, null) = null
-
ObjectUtil.defaultIfNull(null, “”) = “”
-
ObjectUtil.defaultIfNull(null, “zz”) = “zz”
-
ObjectUtil.defaultIfNull(“abc”, *) = “abc”
-
ObjectUtil.defaultIfNull(Boolean.TRUE, *) = Boolean.TRUE
-
@param 对象类型
-
@param object 被检查对象,可能为{@code null}
-
@param defaultValue 被检查对象为{@code null}返回的默认值,可以为{@code null}
-
@return 被检查对象为{@code null}返回默认值,否则返回原值
-
@since 3.0.7
*/
public static T defaultIfNull(final T object, final T defaultValue) {
return (null != object) ? object : defaultValue;
}
最后会调用这个方法
/**
-
给定日期毫秒数的构造
-
@param timeMillis 日期毫秒数
-
@param timeZone 时区
-
@since 4.1.2
*/
public DateTime(long timeMillis, TimeZone timeZone) {
super(timeMillis);
this.timeZone = ObjectUtil.defaultIfNull(timeZone, TimeZone.getDefault());
}
从**DateTime(long timeMillis, TimeZone timeZone)中源码中,可看出,在Date(long date)**基础上,多加了timeZone的赋值。
方法名称:DateUtil.DateUtil.date(long)
==============================================================================================
Long类型时间转为{@link DateTime}
只支持毫秒级别时间戳,如果需要秒级别时间戳,请自行×1000
/**
-
Long类型时间转为{@link DateTime}
-
只支持毫秒级别时间戳,如果需要秒级别时间戳,请自行×1000
-
@param date Long类型Date(Unix时间戳)
-
@return 时间对象
*/
public static DateTime date(long date) {
return new DateTime(date);
}
/**
-
给定日期毫秒数的构造
-
@param timeMillis 日期毫秒数
-
@since 4.1.2
*/
public DateTime(long timeMillis) {
this(timeMillis, TimeZone.getDefault());
}
从**DateTime(long timeMillis, TimeZone timeZone)中源码中,可看出,在Date(long date)**基础上,多加了timeZone的赋值。
方法名称:DateUtil.DateUtil.date(java.util.Calendar)
============================================================================================================
{@link Calendar}类型时间转为{@link DateTime}
始终根据已有{@link Calendar} 产生新的{@link DateTime}对象
/**
-
{@link Calendar}类型时间转为{@link DateTime}
-
始终根据已有{@link Calendar} 产生新的{@link DateTime}对象
-
@param calendar {@link Calendar}
-
@return 时间对象
*/
public static DateTime date(Calendar calendar) {
return new DateTime(calendar);
}
//DateTime类
/**
-
给定日期的构造
-
@param calendar {@link Calendar}
*/
public DateTime(Calendar calendar) {
this(calendar.getTime(), calendar.getTimeZone());
this.setFirstDayOfWeek(Week.of(calendar.getFirstDayOfWeek()));
}
读者福利
由于篇幅过长,就不展示所有面试题了,感兴趣的小伙伴
更多笔记分享
alendar.getTime(), calendar.getTimeZone());
this.setFirstDayOfWeek(Week.of(calendar.getFirstDayOfWeek()));
}
读者福利
由于篇幅过长,就不展示所有面试题了,感兴趣的小伙伴
[外链图片转存中…(img-dFalV9rM-1715788495437)]
[外链图片转存中…(img-z2ILZ3LR-1715788495437)]
[外链图片转存中…(img-PJl8UpFP-1715788495438)]
更多笔记分享
[外链图片转存中…(img-q3YlVq51-1715788495438)]