自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 换个姿势聊一聊CRUD

本文不去讲CRUD的基础知识,我们来换个姿势聊一聊CRUD操作。我想很多人可能会面临下面这些问题:批量插入数据,一条失败全部回滚,但想忽略失败的数据继续插入怎么办?存在更新数据,不存在插入数据,一定要在每次插入数据之前读一次数据库进行判断吗,批量插入时又怎么办?子查询有没有可能带来性能问题?如何避免?多表连接查询,一个相同的查询条件写在WHERE子句和写在连接条件子句中有何区别?UPDATE操作可以使用表连接吗?可以同时更新多张表吗?DELETE操作可以使用表连接吗?可以同时删除多张表吗?

2020-07-06 16:11:32 1156 1

原创 MySQL存储引擎选择

MySQL存储引擎有很多,本文只围绕工作中常用的MySQL存储引擎InnoDB、MyISAM、Memory以及一个比较新的存储引擎TokuDB进行说明。1. MyISAM描述: MySQL5.1以前的默认存储引擎优点:读取速度快支持全文索引缺点:使用表锁保证数据一致性,带来很多性能问题,高并发性能差不支持事务不支持外键崩溃后无法安全恢复适用场景:对于只读的数据,或者表比较小、可以忍受崩溃所带来的修复操作,可以使用此存储引擎。2. Memory描述: 将数据存放在内存中

2020-07-06 10:27:08 348

原创 微服务介绍及spring cloud微服务架构概述

1 单体应用架构1.1 单体架构概述针对web应用而言,一个应用程序中包含了应用程序的所有功能。所有的程序、配置文件、页面、静态资源等都打包成了一个程序(通常打包成jar包或war包),部署到Tomcat上运行。单体应用架构图如下所示:1.2 单体架构优缺点优点:易于部署:只需要将应用打包成jar包或war包即可,直接部署单个jar包或war包到Tomcat即可。易于横向扩展:当应用负载压力大时,将这个应用复制几份,分别部署在不同的服务器上,再通过负载均衡即可提高应用的并发能力。缺点:

2020-06-01 16:53:43 525

原创 [4] docker容器打包成镜像、镜像备份、镜像迁移(恢复)、发布到阿里云仓库

如果你学习了前面的的三篇文章:[1] 外行人都能看的懂的Docker简介[2] 一篇文章带你入门Docker[3] docker应用部署实战(MySQL、Tomcat、Redis、RabbitMQ)那恭喜你,你现在已经可以将自己的应用程序+运行环境打包好放到docker里了。然而,做到这一步显然还不够。你需要将你的docker镜像对外提供出去,这样才能放到其他主机上去跑。本节我们就来实战一下将容器打包成Docker镜像,并提供对外拷贝的.tar包或将其直接发布到阿里云仓库。1.容器保存为镜像命令

2020-05-15 12:00:40 24060 1

原创 [3] docker应用部署实战(MySQL、Tomcat、Redis、RabbitMQ)

前面2篇文章介绍了Docker的基本概念,以及Docker的基本操作命令:Docker简介Docker入门本节就来和大家一起实战一下,将以部署MySQL、Tomcat、Redis、RabbitMQ为例进行实战。1.实战部署MySQL[1] 拉取镜像docker pull mysql:5.7可以看到镜像成功被拉取到了本地仓库[2] 创建MySQL容器docker run -id --name=mysql_57 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=12

2020-05-13 11:49:58 900

原创 [2] 一篇文章带你入门Docker

大多数Docker入门相关文章都是从一串命令输出一个“Hello World”开始的。本文则是按照Docker镜像、Docker容器再到“Hello World”进行循序渐进的讲解。阅读本文者需要对Linux命令很熟悉,还需要明白镜像、仓库、容器三大概念。1. 镜像操作入门1.1 概念镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的...

2020-04-22 14:49:43 981

原创 [1] 外行人都能看的懂的Docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。1. Docker解决了什么问题?在软件开发中,环境配置往往是比较麻烦的。同一套代码,要想在其他机器上运行,往往需要安装并配置程序运行所需的各种依赖,稍有不慎,安装错了版...

2020-04-20 16:50:56 813

原创 MyBatis教程[8]----使用MyBatis-Plus简化开发

前面用了7篇博客,讲完了mybatis。掌握了前面7篇博客的内容,便可以自如应对spring下的mybatis开发了。然而,很多时候Mybatis的表现并不是那么完美,比如很多简单的CURD语句还需要开发者手动完成;不支持分页功能,需要开发者写代码实现分页逻辑等等。。。。这时候,就不得不提MyBatis-Plus了,MyBatis-Plus正是为简化Mybatis的开发而诞生的。1. MyB...

2020-04-07 18:20:07 861

原创 MyBatis教程[7]----xml映射配置补充

本篇文章针对前面没有讲到的XML映射配置文件做一个补充说明。1. selectKey自动生成主键对于不支持自动生成主键列的数据库和可能不支持自动生成主键的 JDBC 驱动,MyBatis 有另外一种方法来生成主键。这里有一个简单(也很傻)的示例,它可以生成一个随机 ID(不建议实际使用,这里只是为了展示 MyBatis 处理问题的灵活性和宽容度):<insert id="insert...

2020-04-07 15:01:48 195

原创 MyBatis教程[6]----一级缓存、二级缓存

目录1. 为什么要使用缓存2. 一级缓存(本地会话缓存/Session缓存)3. 二级缓存(Mapper缓存)4. 二级缓存实战1. 为什么要使用缓存针对频繁被查询的数据,将这部分数据放到内存中,这样的好处是增加查询速度(毕竟从内存中直接拿数据比从磁盘中读数据库快多了),减轻数据库(磁盘)压力。缓存应该使用在读操作多于写操作的应用场景中,当然如果系统里的写操作居多,也没有必要使用缓存。缓存的存...

2020-04-07 10:33:31 196

原创 MyBatis教程[5]----resultMap高级结果映射、自动映射

目录1.回顾resultType1.1 使用回顾1.2 简化全类名1.3 局限性2.resultMap简单使用3.resultMap高级结果映射4.一条SQL语句实现多表关联映射4.1 实体类创建4.2 数据表创建4.3 查询语句编写4.4 数据访问层代码编写5.多条语句组合实现多表关联映射5.1 实现Major实体的数据访问层5.2 实现Club实体的数据访问层5.3 Student数据访问层调...

2020-04-03 15:06:11 3463 3

原创 MyBatis教程[4]----分页原理及实现

目录1.需求明确2.编写Page类3.编写Dao层查询数据4.编写Service层得到分页数据5.HTTP接口获取分页数据实战MyBatis的分页查询需要手动实现,MyBatis并没有提供现成的分页功能。接下来跟着本文章来一步一步实现它。1.需求明确首先要明确分页查询SQL语句怎么写:SELECT * FROM `user` LIMIT startIndex,countstartIn...

2020-03-17 17:37:05 637

原创 MyBatis教程[3]----动态SQL

目录1.if标签2.choose、when、otherwise标签3. where、trim、set标签4. foreach4.1 批量插入4.2 查找集合中存在的记录5.Debug技巧在第二篇教程结尾时,我们有简单的使用动态SQL语句。在这一节,我们将详细讨论它。1.if标签在这里直接贴出来我们上一节所写的代码 <!-- 1=1: 永远为真,目的是拼接后面的AND语...

2020-03-17 11:21:25 269

原创 MyBatis教程[2]----完成CRUD操作

目录0.编写CRUD接口1.完成新增操作2.完成删除操作3.完成更新操作4.使用动态SQL语句完成查询操作CRUD即create, read, update,delete,本文在上一篇文章的基础上继续讨论。上一篇教程链接:MyBatis教程[1]0.编写CRUD接口先把接口全部写出来@Mapperpublic interface UserMapper { /** *...

2020-03-16 18:31:05 208

原创 MyBatis教程[1]----项目构建并完成第一个查询操作

目录前言0.环境说明1.创建SpringBoot工程2.目录结构创建3.创建实体类4.创建映射接口5.编写映射配置文件6.配置数据源和映射文件路径7.测试前言本人的MyBatis系列教程均采用当下流行的SpringBoot + MyBatis配置文件版 + 阿里Druid连接池的组合进行讲解,其他组合方式不在本教程讨论范围内。此外,需要学习者有一定的SpringBoot基础,如对此不太了解,可...

2020-03-16 16:11:54 270

原创 说一说数据库三大范式

1. 第一范式(每列原子性)第一范式要求所有的域都是原子性的,即每一列都不可(不须)分割。以学生表为例,学生表有姓名、学号、年龄、性别、家庭住址等信息组成。在这个表中,可以看作所有列都不可分割(假设地址中的省、市、区、详细地址在本应用中是组合在一起的,不会拆分开来用。从这一点来看,地址列不可/不须分割),所以是满足第一范式的。第一范式的合理性也需要结合实际需求来,上表满足第一范式是有一个前...

2020-01-16 17:27:28 2213

原创 MySQL约束

文章目录导言1. 主键约束1.1 创建主键约束2. 非空约束3. 默认约束4. 唯一约束导言上一节提到了MySQL的主键约束,这一节再来讲一讲MySQL的其他约束。本节将针对MySQL的主键约束、唯一约束、默认约束、非空约束进行讲解。1. 主键约束主键约束的关键字为PRIMARY KEY,主键约束所约束的是一个列或多个列的组合。被约束的一列或多列具有唯一性,可以通过主键来标识某一行。主键约...

2020-01-14 16:44:05 240 1

原创 MySQL外键约束

文章目录1. 导言1. 导言上一节详细介绍了MySQL的查询操作,其中有涉及到对多张表的操作。我们不得不想以下问题:添加employee时,有没有可能将dept_id添加为一个不存在的部门id?如果有可能,如何避免?如果错误的删除了部门表中的某一列,而恰恰有某个员工属于该部门,那会出现什么问题,该如何避免?解决上述问题的方式很简单,只需要对employee表添加外键约束即可,在新创...

2020-01-14 15:02:02 293

原创 MySQL多表查询讲解

文章目录开始之前多表联合查询连接查询内连接查询左外连接查询右外连接查询全连接查询其他查询方式子语句查询开始之前多表联合查询连接查询内连接查询左外连接查询右外连接查询全连接查询其他查询方式子语句查询...

2020-01-13 16:45:19 273

原创 SpringBoot学习篇13[整合Redis、自定义RedisTemplate、操作Redis、自定义Redis工具类]

文章目录1.引入依赖2.配置Redis3.操作Redis3.1 操作字符串3.2 操作复杂数据类型4.自定义Redis4.1 自定义RedisTemplate4.2 使用自定义RedisTemplate5.自定义Redis工具类1.引入依赖有以下两种方式:方式1:在新建项目时勾选以下依赖即可方式2:手动将以下依赖添加进pom.xml文件中<dependency> &l...

2019-12-26 12:04:14 949

原创 SpringBoot学习篇12[发送简单邮件、发送附件、发送内联资源]

文章目录1.准备工作1.1 开启第三方登录邮箱1.2 引入依赖2.配置MailSender3.发送简单邮件4.发送附件5.发送内联资源Spring框架提供了一种使用JavaMailSender接口发送电子邮件的简单抽象方法,而Spring Boot为其提供了自动配置以及启动程序模块。1.准备工作1.1 开启第三方登录邮箱以qq邮箱为例:进入邮箱设置—帐户,页面并打开以下全部服务1.2...

2019-12-25 09:31:29 415

原创 SpringBoot学习篇11[异步任务、定时任务]

目录1.异步任务1.1 使用异步任务1.2 配置异步任务2.定时任务2.1 使用定时任务2.2 cron表达式详解2.3 配置定时任务1.异步任务在项目开发中,针对耗时业务逻辑,往往采用多线程来处理此任务。在Spring中使用异步任务极为方便,只需要一个@Async注解即可将任务加入线程池运行,极大的提高了开发效率。1.1 使用异步任务默认情况下,无需做任何额外配置,只需要以下两步便可使用...

2019-12-24 16:30:37 300 1

原创 SpringBoot学习篇10[整合Mybatis注解版、整合阿里Druid连接池、整合Mybatis配置文件版、事务]

目录1. 环境说明2. 整合Mybatis注解版2.1 配置Mybatis2.2 编写接口,实现增删改查操作2.3 编写测试类,测试代码2.4 编写service,调用Mapper2.5 编写Controller调用Service3. 整合阿里Druid连接池3.1 引入Druid依赖3.2 切换连接池为Druid连接池3.3 配置Druid3.4 数据监控4. 整合Mybatis配置文件版...

2019-12-18 19:16:13 289

原创 SpringBoot学习篇9[热部署]

1. 开启热部署在日常开发中,为了提高开发效率,往往启用SpringBoot的热部署。开启SpringBoot热部署也非常简单,仅需要两步:1.1 禁用Thymeleaf缓存spring.thymeleaf.cache=false1.2 添加spring-boot-devtools插件<dependency> <groupId>org.springframew...

2019-12-17 14:38:40 100

原创 SpringBoot学习篇8[使用外置Tomcat容器]

目录新建项目时选择war包打开Project Structure—>Modules—>Web双击序号3标注的内容,并点击确定,这一步的目的是指定web资源目录所在位置点击上方+号,添加web.xml文件指定web.xml文件创建位置为web资源目录下的WEB-INF文件夹下点击Apply后再点击确定编辑服务器配置添加外置Tomcat容器配置Tomca...

2019-12-17 14:19:23 195

原创 SpringBoot学习篇7[自定义Servlet三大组件---Servlet、Filter、Listener]

目录1. 自定义Servlet1.1 自定义步骤1.2 Servlet参数配置2. 自定义Filter3. 自定义Listener1. 自定义Servlet1.1 自定义步骤步骤:编写类,继承HttpServlet,重写doGet、doPost方法编写自定义配置类使用ServletRegistrationBean对象注册之前编写的Servlet在自定义配置类中将ServletReg...

2019-12-17 10:46:05 352

原创 SpringBoot学习篇6[文件上传、文件下载]

目录开始之前一 静态内容1.1 静态资源的查找路径1.2 修改资源文件映射路径1.2 欢迎页面1.3 自定义图标二 模板引擎2.1 Spring Boot支持的模板引擎2.2 使用Thymeleaf模板引擎2.2.1 引入Thymeleaf2.2.2 Thymeleaf标准表达式语法2.2.2.1 message表达式2.2.2.2 变量表达式2.2.2.3 选择表达式2.2.2.4 链接2.2....

2019-12-16 17:07:13 338

原创 SpringBoot学习篇5[国际化、统一异常处理]

目录1 Spring Boot对国际化的支持1.1 语言包创建1.2 根据本地语言自动切换语言包1.3 实现手动切换2 统一异常处理2.1 静态资源页面展示错误页面2.2 模板引擎页面展示错误页面,2.3 优先级2.4 错误页面可以获取到的内容2.5 添加自定义错误信息1 Spring Boot对国际化的支持1.1 语言包创建右键resources->new->directo...

2019-12-16 13:58:01 1517

原创 SpringBoot学习篇4[RESTful介绍、Controller编写、视图解析器、拦截器、参数转换器]

目录1.1 RESTful风格接口介绍1.2 编写Controller1.3 前端提交数据给后端1.3.1 获取单个值1.3.2 表单提交数据到对象1.3.3 获取PathValue1.3.4 获取前端提交的JSON数据到对象1.3.5 数据校验器1.3.6 Controller支持的内部对象1.3.7 小结1.4 后端传递数据给前端界面1.4.1 利用Model对象传递数据1.4.2 利用Map...

2019-12-16 13:50:48 579 1

原创 SpringBoot学习篇3[静态资源、Thymeleaf模板引擎]

开始之前在开始之前,先创建项目spring-boot-web添加Spring Web和Thymeleaf依赖勾选那两项是为了在Maven中引入以下两个依赖:创建好后的项目目录如下(框起来的部分可以删除):一 静态内容1.1 静态资源的查找路径默认情况下,Spring Boot从类路径中名为/static、/public、/resources或/META-INF/resourc...

2019-12-16 11:59:04 437

原创 SpringBoot学习篇2[日志配置]

目录一 SpringBoot默认日志配置1.1 日志输出实战1.2 控制台输出1.3 文件输出二 常用日志配置的修改2.1 输出级别2.2 修改日志输出格式2.3 日志滚动输出三 自定义日志配置一 SpringBoot默认日志配置SpringBoot为Java Util Logging,Log4J2和Logback提供了默认配置。SpringBoot默认配置日志输出到控制台,同时还提供可选文件...

2019-12-02 17:41:04 1597

原创 SpringBoot学习篇1[配置文件知多少]

这里写自定义目录标题前言使用IDEA新创建SpringBoot项目新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导...

2019-11-28 16:02:32 276

原创 教你如何使用IDEA + Maven 搭建SSM Web项目(超详细)

教你如何使用IDEA + Maven 搭建SSM Web项目前言1. 环境2. 前期准备3. 开始创建工程4. 调整IDEA自动创建的工程目录4.1 创建源代码路径4.2 创建test路径4.3 创建resource路径4.4 整个的目录结构4.5 修改pom.xml文件4.6 增加Mybatis配置文件4.7 增加数据库连接基本参数配置文件4.8 增加Spring配置文件4.9 配置web.x...

2019-10-31 19:56:07 1963 1

原创 Qt布局管理器之表单布局(QFormLayout)

QFormLayout顾名思义,主要用来做表单的输入及显示。和前面讲到的QBoxLayout、QGridLayout类似,QFormLayout可以插入widget、layout,直接用QGridLayout也可以做出QFormLayout的效果。下面开始介绍QFormLayout用作表单应用时相关的接口函数。基本方法在末尾新增左侧添加标签,右侧添加widget或layout...

2019-08-16 16:50:50 2956

原创 Qt布局管理器之网格布局(QGridLayout)

Qt网格布局和水平、垂直布局类似,QGridLayout将控件布局在网格中。QGridLayout和QHBoxLayout类似,可以插入Widget、插入子Layout、设置拉伸系数等,不同的是QGridLayout多了一个行、列的概念。在插入widget、插入子Layout、设置拉伸系数时都需要规定行或列。如果说QHBoxLayout和QVBoxLayout是建立在一维坐标系上的,那QGridL...

2019-08-16 11:41:42 5444

原创 Qt布局管理器之水平布局和垂直布局(QBoxLayout)

Qt的标准布局包括水平布局、垂直布局、网格布局、表单布局,水平布局中的所有子控件中心轴在一条水平直线上,垂直布局中的所有子控件中心轴在一条垂直直线上,网格布局用来在网格中布局子控件,表单布局常用来做表单的输入。如下是将这几个布局结合起来设计出来的界面的例子(截取自Qt帮助手册):可以看到,编程者利用Qt的标准布局便可以设计出排列有序、功能丰富的程序界面。接下来我们针对Qt的标准布局...

2019-08-13 15:42:51 9860 2

原创 Qt之QTimer(定时器)

QTimer在界面中不可见,在UI设计器中也找不到它,只能通过纯代码实现,主要作用是定时特定的时间。想要掌握QTimer只需掌握setInterval(设置定时时间,单位ms)、start(启动定时器),和定时时间到时所发出的信号timeout()即可。程序设计的思路:1.先设定定时周期2.绑定timeout()信号到自定义槽函数3.调用start函数启动定时器下面是wi...

2019-08-13 09:39:47 46353

原创 Qt之QThread介绍(常用接口及实现、自动释放内存、关闭窗口时停止线程运行、同步互斥)

在程序设计中,为了不影响主程序的执行,常常把耗时操作放到一个单独的线程中执行。Qt对多线程操作有着完整的支持,Qt中通过继承QThread并重写run()方法的方式实现多线程代码的编写。针对线程之间的同步与互斥问题,Qt还提供了QMutex、QReadWriteLock、QwaitCondition、QSemaphore等多个类来实现。本篇博客将针对以下几个方面进行讲解[1]QThread...

2019-08-09 15:48:19 14567

原创 Qt之QSlider介绍(属性设置、信号、实现滑块移动到鼠标点击位置)

QSlider是滑动条控件,最常见的应用就是视频播放器中的进度条。QSlider允许用户通过鼠标进行拖动、点击(需要重写mousePressEvent事件实现),下面将从这几个方面对QSlider进行介绍:[1]属性设置[2]信号[3]实现滑块移动到鼠标点击位置[1]常用属性设置QSlider继承自QAbstractSlider,它的绝大多数属性都是从QAbstractS...

2019-08-07 15:45:03 44101 9

原创 Qt之QComboBox(添加纯文本item、添加带图标的item、信号、item携带自定义数据、可编辑属性)

QComboBox作为下拉列表框,也是常用的控件之一,最常见的就是win10文件浏览器上的地址输入栏、QQ登录框等。本篇文章将从以下几个方面介绍QComboBox:[1]添加纯文本item[2]添加带图标的item[3]信号[4]item携带自定义数据[5]编辑[1]添加纯文本itemQComboBox添加纯文本列表项可以单个插入(以QString方式)、多个插入(以Q...

2019-08-06 18:35:25 15984

空空如也

空空如也

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

TA关注的人

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