我们知道,从本质上来说,MyBatis就是一个映射器,它分为两部分映射:SQL语句映射和查询结果的映射。在组装SQL语句的时候,往往需要各种参数,可以使用@param注解来映射参数,也可以使用XML的parameterType属性来映射参数,但最终都离不开XML语句中的SQL参数占位符。关于@param注解和parameterType属性的详细介绍,请...

备注:本文更新日期为2020年7月31日前言本文仅限于徒弟使用,其目的是对Java整个生态和相关技术进行多维度的介绍。因为我个人对“3”这个数字有特殊的研究和认识,所以本文的论述将会处处贯穿“3”这个量化思想,例如划分了三个成长步骤,推荐了三本书,推荐了三篇技术论文,推荐了三本个人专著,介绍了三种学习态度,强调了三种数据结构等等。正文对于Java开发者...

1、Java注解的个人学习经验总结Java注解诞生于Java 5,其官方文档是这样说的:Java注解用于为Java代码提供元数据。作为元数据,注解不直接影响代码的执行。注解通常拿来与注释做对比:注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻...

我们知道,世界的每个地区都有自己的本地时间,因为时间的依据往往是根据太阳的角度而定,不同地方的人看到的太阳角度是不同的,所以本地时间的出现是合情合理的,也是客观必然的。我们还知道,整个地球共分为二十四时区,也就是说,每个时区都有自己的本地时间,但是本地时间不能应用在互联网通信中,在互联网通信中,统一使用一个标准时间,称为通用协调时(UTC, Unive...

背景介绍之前有人问过数据结构怎么学,这里我给出自己的答案,每个人的思维习惯不同,生活阅历不同,所以本文内容仅供参考。1、格局我是站长,今天来给大家谈谈数据结构的学习之道吧。为了学好数据结构,很多人都在刷题,这种做法对吗?对。但是这种做法太浅薄了。刷题的行为就是一块敲门砖,门敲开了,砖扔了,日后在工作中很少再用到数据结构。很多人通过刷题,拿到了offer...

备注:站长认为“事务”是一门独立的学问,建议把sql事务,分布式事务,mybatis事务,spring事务,redis事务等放到一起学习,从不同的角度和侧面去深入的学习事务,这样的学习效果才是最科学的。和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制。一个事务从开始到执行会经历以下三个阶段:开始事务->命令入队->执...

前言一千个读者有一千个哈姆雷特,一万个Java用户,则能找出一万种“坑爹”功能。对于个人而言,每个人的思维习惯不同,感受到的结果不同,我认为违反思维常识而“坑爹”的功能,也许在他人眼里合乎情理、自然顺畅,所以请读者根据自己的情况自选阅读。正文作为一门面向对象的编程语言,Java 凭借其简单易用、功能强大的特点刚一出世变受到了编程爱好者的青睐。后来,随着...

1、场景介绍在电商中,经常出现下面的场景:统计出每一个各户的所有订单并按每一个客户下的订单的金额降序排序,同时给每一个客户的订单进行编号。这样就知道每个客户下几单了,最高金额是多少。这种情况下需要使用SQL的分组排序的功能:row_number() over() 函数,其语法格式:row_number() over(partition by 分组列 o...

备注:分布式内参,顾名思义,仅对站长徒弟公开。站长收徒的内容,看似平淡无奇,实则高深莫测。以MyBatis为例,一个零基础的菜鸟,短则一两周、长则一个月就能玩转它,但是MyBatis中文网做了两年多,两者的深度完全不在一个层面。1、简介:分布式内参的特色是“分布式理论学习+ZooKeeper学习+动手实战”,其内容延续了站长的一贯风格---严谨,务实,...

1、前言在我们日常的开发中,通常都是使用数据库来进行数据的存储,由于一般的Web系统中通常不会存在高并发的情况,所以并没有什么问题。可是,一旦出现大并发量的数据请求,比如一些商品抢购的情景,或者是节假日访问量瞬间变大的时候,单一使用数据库来保存数据的系统会因为磁盘读/写速度比较慢的问题而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间...

导读本文参考自简书的某位作者,并做了增删。我一般称为“一级索引”和“二级索引”,这样好记一点。正确的称谓是:集聚索引和非聚集索引。顾名思义,叶子节点存放主索引和数据的树,称为集聚索引树;叶子节点存放辅助索引和主索引的树,称为非集聚索引树。备注:一和二体现了主次和先后关系,聚焦和非聚焦体现不出来,我建议称为:“一级索引”和“二级索引”。1、一级索引索引和...

1、背景介绍最近被一个群成员问到了MySQL的IF()函数,上网搜索了一下,发现IF()函数与CASE函数一脉相承。之前有专门的文章写过CASE函数【请参考:《SQL CASE WHEN 用法的深度解析》】,再次看到CASE函数与IF函数并列出现,倍感亲切。2、场景分析新建一张客户表,如下:sex:1-男,2-女,3-未知;level是客户的级别:1-...

1、MyBatis的参数映射配置MyBatis的参数映射利用的属性是:parameterType。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数。2、简单类型,不需要设置 parameterType对于大多数简单的使用场景,你都不需要使用复杂的参数,比如:<select id=&quo...

很久之前,在芬兰有一个研发数据库的公司,名叫Innobase。公司开发了一款数据库产品InnoDB。这是一个完整的数据库,功能非常的完备。开发出来之后,创始人是想将这个数据库卖掉的,但是没有找到买家。后来,另外一个芬兰技术大牛,跑到瑞典创立了数据库公司MySQL。MySQL的理念是开源和共享。MySQL从设计之初,存储引擎就是可插拔的,允许公司或者个人...

备注:本文更新于2020年6月18日前言本文是对 SQL CASE WHEN 用法的深度解析,重新理解case when then else end用法。在SQL的世界中CASE WHEN语句相当于if-else语句。虽然看似简单,但是CASE WHEN并不容易掌握,CASE的用法分为两种形式:简单CASE函数和CASE条件表达式函数。简单CASE函数...

前言传统模式下,开发和运维会有比较清晰的边界,开发人员负责服务运行稳定,运维人员负责服务运行的基础设施稳定。而进入到云原生时代,特别是容器化和 Service Mesh 落地之后,服务框架、服务治理、灰度发布等稳定性密切相关的能力都作为基础设施下沉了,开发和运维的边界开始变得模糊。所以,企业 IT 人员的职责也应该相应的进行重新划分,也就是说开发人员也...

备注:如果指定了 @SelectKey 注解,那么 MyBatis 就会忽略掉由 @Options 注解所设置的生成主键。很多时候新增一条数据,仅仅知道操作结果(新增成功)是远远不够的,更多的时候需要这条新增数据的主键,以便下文使用。通常的办法是:先新增,后将其查询出来,这在MySQL中有专门的函数可以获取到:SELECT LAST_INSERT_ID...

在MySQL的数据类型中,Tinyint的取值范围分两种情况:带符号的范围是-128到127,无符号的范围是0到255。Tinyint占用1字节的存储空间,即8位。那么Tinyint的取值范围怎么来的呢?我们先看无符号的情况。无符号的最小值即全部8位(bit)都为0,换算成十进制就是0,所以无符号的Tinyint的最小值为0。无符号的最大值即全部8bi...

1、SQL 介绍SQL是一个标准的数据库语言,是面向集合的描述性非过程化语言。SQL里面一切皆集合。SQL以关系代数为基础发展出来的一门语言,关系代数主要是"集合。SQL语句形式:select .... from ....。集合在SQL当中的表现形式:每一个select语句都是一个集合,写在from后面的每个表、子查询、视图可以算作一个集合。SQL功能...

Mybatis 本质就是一个sql映射器,主要映射两部分东西:方法入参和返回结果。Mybatis中提供了两个常用的内置参数:_parameter和_databaseId。前者主要用于方法参数映射,后者主要用于配置开关的作用。mybatis的内置参数_parameter保存了对应传入的对象:<insert id="insertUser&q...