自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 docker Mysql 主从复制安装教程

创建一个桥接网络docker network create somenetwork // docker 默认创建的网络模式就是桥接模式 也可以通过 -d 参数指定例如:docker network create -d bridge somenetwork2// 创建完后 运行 docker network ls 查看是否创建成功拉取 mysql 镜像docker pull mysql:5.7 // 因为我嫌 8.0 版本配置密码太麻烦,为了省事,我选了 5.7 版本// 执行

2021-12-31 22:44:35 917

原创 Nginx 入门教程

正向代理与反向代理 正向代理:代理客户端与服务器端进行交互 反向代理:代理服务器端与客户端进行交互 负载均衡策略: 轮询:tomcat1\tomcat2\tomcat3 会轮流处理请求 加权轮询:相比轮询,增加了一个权重参数,权重参数大的服务器,会被分配处理更难多的请求 IP_hash:请求的客户端的 IP 进行 hash 计算,根据 hash 结果将同一台客户端的请求交由同一台服务器处理,可以解决多个服务器端处理同一个..

2021-11-28 16:40:18 629

原创 Java 中的容器

List(链表):常用的 ArrayList 和 LinkedListArrayList 底层采用数组方式存储:ArrayList.class 部分源码// ArrayList 将所有的元素存储到 elementData 数组中transient Object[] elementData;// 实际存储方法public boolean add(E e) { // 存储前进行剩余容量判断,防止数组元素溢出 ensureCapacityInternal(size + 1);

2020-09-28 21:59:18 133

原创 Redis-6.0.5 版本搭建集群

在开始集群搭建之前,默认认为你已经可以在本机虚拟机成功下载并运行过一个 Redis 单机节点。如果还没有,请先下载并成功运行一个单机 Redis 节点,详细教程请点击这里集群搭建:首先,我们新建一个 cluster 文件夹:[root@localhost ~]# mkdir cluster然后我的文件目录如下:将默认的 redis.conf 文件复制一份到该目录下,进行集群配置的修改:[root@localhost cluster]# cp /root/redis-6.0.5/redis

2020-07-14 01:17:08 1201

原创 Redis-6.0.5 Linux 安装

由于 Redis 依赖 gcc ,所以,首先需要确定服务器是否安装 gcc ,命令如下:[root@localhost ~]# gcc -v如果没有安装,则会显示如下:则需要先安装 gcc[root@localhost redis-6.0.5]# yum -y install gcc然后查看 gcc 版本[root@localhost ~]# gcc -v不出意外,应该安装的是较低版本的 gcc这里我们需要装高版本的 gcc ,下面给 gcc 升级,命令如下:[root@loca

2020-07-12 22:52:15 665

原创 Shiro 源码流程简解

首先,先上一个 Demo :Demo 链接 :ShiroDemopom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.2.RELEASE</version>

2020-07-10 16:12:44 242

原创 MyBatis 总结

MyBatis 的执行流程大概可以拆分为如下几个部分:初始化配置解析 mybatis-config.xml 文件根据 mybatis-config.xml 文件中的配置,依次解析 Mapper.xml 文件将 Mapper.xml 与 接口 通过 xml 文件的 namespace 属性来进行绑定**【重点】**;该篇有介绍 XML 文件和 接口进行绑定做了一些介绍 》》》 MyBatis 动态代理解析 Mapper.xml 中的 SQL 语句;将 SQL 语句根据标签进行拆分开;【重点

2020-07-01 18:19:30 106

原创 SpringBoot 集成 MyBatis 及简解

Demo 介绍首先在 pom.xml 文件中引入相关的依赖:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.2.RELEASE</version> </parent>

2020-06-29 18:01:44 155

原创 PageHelper执行流程及自定义MyBatis插件实现

PageHelper 通过集成 MyBatis 的 Interceptor 接口,来实现分页插件的功能。首先要使用 PageHelper ,需要的 pom.xml 文件中引入 PageHelper 的依赖:<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.

2020-06-28 23:25:32 755

原创 MyBatis 入门 (二级缓存脏读)

关于 MyBatis 二级缓存数据脏读问题为方便理解,本章涉及示例代码已上传至 gitee==>获取示例代码请点击这里。。。拉取示例代码时,请拉取所有分支,master 分支只是做了示例的初始化关于二级缓存的数据脏读,产生的原因是因为二级缓存的作用域是基于 Mapper 文件的。即:现在假设一种情况:我们要同时查询出包含用户角色信息的用户信息,这是,我们会通过连接查询,对用户表和角色表进行连接查询,关联条件是:user.role_id = role.id;当用户数据查询出来以后,会将缓存

2020-06-26 18:12:07 2045 1

原创 MyBatis 入门 (MyBatis 缓存应用之RedisCache)

Redis 缓存为方便理解,本章涉及示例代码已上传至 gitee==>获取示例代码请点击这里。。。拉取示例代码时,请拉取所有分支,master 分支只是做了示例的初始化MyBatis 与 Redis 的集成,我们在这里只简单介绍,因为在日常的开发中,通常是通过 Spring 系列框架来完成整合 MyBatis 与 Redis 的,所以,这里不在配置方面多做介绍,重点关注是如何实现将 MyBatis 的查询结果存入 Redis 中的,在后续 Spring 整合 MyBatis 时,我们会着重介绍

2020-06-25 22:49:58 1192

原创 MyBatis 入门 (MyBatis 缓存应用之Ehcache)

Ehcache 缓存为方便理解,本章涉及示例代码已上传至 gitee==>获取示例代码请点击这里。。。拉取示例代码时,请拉取所有分支,master 分支只是做了示例的初始化该节仅作了解,推荐使用 Redis 实现方式在 MyBatis 的二级缓存中使用 Ehcache ,只需如下配置即可,使用默认配置,即基于虚拟机内存实现缓存存储:// 在对应的 XML 文件中如下配置// 将缓存的 type 设置为 Ehcache 实现类<cache type="org.mybatis.cac

2020-06-25 01:09:44 299

原创 MyBatis 入门 (MyBatis 缓存应用之二级缓存)

二级缓存为方便理解,本章涉及示例代码已上传至 gitee==>获取示例代码请点击这里。。。拉取示例代码时,请拉取所有分支,master 分支只是做了示例的初始化MyBatis 的二级缓存的种类大致可以分为三种:MyBatis 框架默认的二级缓存实现基于 JVM 虚拟机存储的 Ehcache 缓存基于 Redis 的分布式缓存在上一小节中提到过 MyBatis 中是通过 cacheEnabled 属性来设置是否启用二级缓存的,默认该值为 true ,即启用,接下来通过一张图来理解一下

2020-06-23 17:33:16 220

原创 MyBatis 入门 (MyBatis 缓存应用)

为方便理解,本章涉及示例代码已上传至 gitee==>获取示例代码请点击这里。。。拉取示例代码时,请拉取所有分支,master 分支只是做了示例的初始化MyBatis 的缓存一共有两种,一级缓存、二级缓存;一级缓存为框架的默认缓存,不可修改配置,二级缓存可以修改和配置,要理解 MyBatis 的缓存过程,首先需要对 MyBatis 的执行器有一定的了解,下图为 MyBatis 的各执行器之间的关系:当初始化 MyBatis 配置的时候,会创建一个 CachingExecutor 类型的对象,

2020-06-22 19:00:24 171

原创 MyBatis 的高级结果映射

MyBatis 的高级结果映射为方便理解,本章涉及示例代码已上传至 gitee==>获取示例代码请点击这里。。。拉取示例代码时,请拉取所有分支,master 分支只是做了示例的初始化MyBatis 的高级结果映射主要是针对一对一,一对多的表关系结果映射。一对一结果映射在使用多表联查的时候,想要将联查出来的另一个表的数据映射到主表映射对象上,需要在主表的实体对象中增加一个从表的对象属性,并添加 set、get 方法。实现一对一映射共有三种方式:SQL 别名方式实现映射SQL 别名与

2020-06-21 19:43:47 205

原创 MyBatis 入门 (九)

其他动态标签以下介绍两个标签,由于在实际开发中不经常使用,这里只介绍简单用法: 标签的使用:以模糊查询为例:当数据库为 MySQL 数据库时,模糊查询关键字为: concat(’%’,property,’%0’);具体代码如下:MySQL 模糊查询<if test = "userName != null and userName != ''"> and user_name like concat('%',#{userName},'%')</if>

2020-06-21 13:47:55 163

原创 MyBatis 入门 (参数绑定特别版)

MyBatis 接口参数与 XML SQL 参数实现动态拼接详解接口参数解析代码流程如下:详情代码段:ParamNameResolver.class/** * @Param config MyBatis 的全局配置对象 * * @Param method 当前被调用的接口方法,由上一级的动态代理类传入 */public ParamNameResolver(Configuration config, Method method) { // 获取方法的参数类型 fi

2020-06-20 17:24:46 638

原创 MyBatis 入门 (八)

foreach 用法为方便理解,本章涉及示例代码已上传至 gitee==>获取示例代码请点击这里。。。先通过一段示例代码了解一下基本使用:<select id="selectByIds" resultType="SysUser"> select * from sys_user where 1 = 1 <if test="_parameter != null and _parameter.size() > 0 "&g

2020-06-19 18:46:59 326

原创 深夜放毒,这张图里的东西你都会了吗?

我:“图里这些我都认识,但是我都还没来得及看呢。”面试官:“嗯,好,那你先回去等消息吧~~~~”

2020-06-19 01:22:20 130

原创 MyBatis 入门 (七)

MyBatis 动态 SQL为方便理解,本章涉及示例代码已上传至 gitee==>获取示例代码请点击这里。。。MyBatis 的是通过在 XML 中支持一下几种标签来实现动态 SQL 的:ifchoose(when、otherwise)trim(where、set)foreachbind下面依次介绍:if 用法示例如下:<select id="selectAllUseIf" resultMap="UserEntity" > select * from

2020-06-18 19:04:21 171

原创 MyBatis 入门 (六)

Use MyBatis By Annotation@Select先上一段示例代码:public interface SysPrivilegeMapper { // other Methods ... @Select(value = {"select id, ", "privilege_name privilegeName,", "privilege_url privilegeUrl", "from sys_pri

2020-06-17 22:37:26 151

原创 MyBatis 动态代理

MyBatis 动态代理MyBatis 框架的动态代理是通过两个步骤完成的:加载配置文件时,通过扫描到的接口类创建代理工厂类,并将其依次放到一个 Map 中:大致的创建动态代理类的流程图如下:MapperRegistry.classpublic <T> void addMapper(Class<T> type) { if (type.isInterface()) { if (hasMapper(type)) { thr

2020-06-16 16:27:04 245

原创 MyBatis 入门 (四)

为方便理解,本章涉及示例代码已上传至 gitee==>获取示例代码请点击这里。。。Use Update<update> 标签的使用方法和 <insert> 标签大致相同,这里只贴出简单的示例代码,更多用法后续介绍<update id="updateById" parameterType="SysUser"> update sys_user set user_name = #{userName}, user_p

2020-06-16 16:23:36 87

原创 MyBatis 入门 (三)

Use Insert为方便理解,本章涉及示例代码已上传至 gitee==>获取示例代码请点击这里。。。首先先来实现一个简单的 Insert 查询:public interface SysUserMapper { // other methods ... Integer insertInfo(SysUser sysUser);}<insert id="insertInfo" parameterType="SysUser" > insert int

2020-06-15 17:14:39 363 1

原创 MyBatis 入门 (二)

Use MyBatis By XML为了方便理解,代码已上传至 giteehttps://gitee.com/shizhiqian0021/MyBatisDemo.git现在数据库新建 5 张表,分别是:用户表,角色表,权限表,角色权限表,用户角色表create table `sys_user`( `id` BIGINT not null auto_increment comment '用户ID', `user_name` VARCHAR(50) COMMENT '用户名', `user_pa

2020-06-14 18:35:45 284

原创 Mybatis 入门(一)

Mybatis入门A Simple Demo1. 首先我们在数据库中建一个 mydemo 库,在其下建一个表,建表示例 SQL 如下:DROP TABLE IF EXISTS `country`;CREATE TABLE `country` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `countryname` varchar(255) DEFAULT NULL COMMENT '国名', `countrycode

2020-06-13 14:59:07 3379 3

原创 三、了解 Java 多线程 (入门篇)

今天来聊聊 Java 中的锁:举个例子:两个线程,一次 start 后,执行同一个对象的同一段方法,会出现什么样的后果?我们写一段代码看看:public class Demo { public static void main(String[] args) { UserInfo userInfo = new UserInfo(10, "小明"); Thread thread = new Thread() { @Overrid

2020-05-13 23:53:06 240 3

原创 二、了解 Java 多线程 (入门篇)

今天,来聊一聊线程的 sleep() 方法和 wait() 方法的区别:首先,先看源码:可以看出,sleep() 方法是 Thread 类的方法,底层是直接调用的 C++文件去执行线程的 sleep();而wait()方法则是 Object类的方法,而我们知道,Java中Object类是所有类的父类,也就意味着,所有的类都有 wait() 方法。wait()方法的底层也是调用的 C++ 文件的方法去执行。共同点:sleep()方法与 wait()方法都可以让线程暂停一段时间:...

2020-05-09 15:49:04 115

原创 一、了解 Java 多线程 (入门篇)

进程与线程 :进程:从操作系统而言:进程既是操作系统进行资源分配和调度的一个独立单位。线程:进程中独立运行的子任务。例如:运行微信程序,则为开启一个进程;与微信中的某一好友开启视频聊天,则为开启一个线程,我们还可以在视频聊天的同时,打开一篇公众号文章阅读,这就是又开启了一个线程。总结:一个进程中必然包含一个以上线程。存在一个线程则必然存在一个进程。为什么要使用多线程:...

2020-05-08 16:14:54 109

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除