自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学不死的程序员

只要学不死,就往死里学!

  • 博客(36)
  • 收藏
  • 关注

转载 用大白话告诉你ArrayList的底层原理

一、ArrayList的数据结构ArrayList的底层数据结构就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。二、ArrayList的线程安全性对ArrayList进行添加元素的操作的时候是分两个步骤进行的,即第一步先在object[size]的位置上存放需要添加的元素;第二步将size的值增加1。由于这...

2019-04-13 10:37:55 648

原创 拦截器和过滤器的区别

过滤器和拦截器的区别:①拦截器是基于java的反射机制的,而过滤器是基于函数回调。  ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。  ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。  ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。  ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被...

2019-03-25 16:19:43 2131

原创 RSA签名,验签的理解

一、公钥加密假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用数字2,就是我的私钥,来解密。这样我就可以保护数据了。我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文...

2019-03-24 17:41:37 2845

原创 mybatis标签之trim标签

trim标记是一个格式化的标记,主要用于拼接sql的条件语句(前缀或后缀的添加或忽略),可以完成set或者是where标记的功能。trim属性主要有以下四个prefix:在trim标签内sql语句加上前缀suffix:在trim标签内sql语句加上后缀prefixOverrides:指定去除多余的前缀内容,如:prefixOverrides=“AND | OR”,去除trim标签内sql...

2019-03-24 17:33:49 5726 2

原创 mybatis的常用动态sql标签

一. 定义 sql 语句select 标签属性介绍:id :唯一的标识符.parameterType:传给此语句的参数的全路径名或别名 例:com.test.poso.User 或 userresultType :语句返回值类型或别名。注意,如果是集合,那么这里填写的是集合的泛型,而不是集合本身(resultType 与 resultMap 不能并用)<select id=...

2019-03-24 17:29:17 82674 9

原创 @valid数据校验注解的使用

Java Bean Validation 最佳实践参数校验是我们程序开发中必不可少的过程。用户在前端页面上填写表单时,前端js程序会校验参数的合法性,当数据到了后端,为了防止恶意操作,保持程序的健壮性,后端同样需要对数据进行校验。后端参数校验最简单的做法是直接在业务方法里面进行判断,当判断成功之后再继续往下执行。但这样带给我们的是代码的耦合,冗余。当我们多个地方需要校验时,我们就需要在每一个地方...

2019-03-24 17:22:00 17823

转载 Http get与pos

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。你轻轻松松的给出了...

2019-03-24 16:58:02 1687

原创 Http POST 提交数据的四种方式解析

http.jpg我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。HTTP 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种...

2019-03-24 16:55:38 641

转载 四种常见的 POST 提交数据方式(application/x-www-form-urlencoded,multipart/form-data,application/json,text/xml)

转载:https://www.topjishu.com/6324.htmlHTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式。我们知道,HTTP 协议是以 ASCII 码传输,建...

2019-03-24 16:47:21 8323 1

原创 关于Cookie的原理、作用,区别

    1,客户端第一次访问浏览器的时候,浏览器在本次响应头中给客户端一个cookie.    2,一旦浏览器取到cookie之后,会将cookie保存到本地,之后访问这个服务器的所有请求都将会将cookie放在请求头中发给服务器.这样服务器就可以识别用户(1)每一个服...

2019-03-24 16:39:40 1072

原创 Session的生命周期和工作原理

Session是用于存放用户与web服务器之间的会话,即服务器为客户端开辟的存储空间。由于客户端与服务器之间的会话是无状态的机制,Session则可用于关联访问,因此多用与用户登录等功能上。我们可以调用request的getsession()方法来使用session,通过setAttribute()注入值://引号中的"xxx"为页面中name标签里的值,逗号后面的是Servlet中的变量...

2019-03-21 15:53:46 521

原创 简单理解token机制

在简单理解cookie/session机制这篇文章中,简要阐述了cookie和session的原理。本文将要简单阐述另一个同cookie/session同样重要的技术术语:token。什么是tokentoken的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前...

2019-03-21 15:42:35 1751 1

原创 DATETIME与TIMESTAMP的一些区别与问题

今天遇到一个问题,明明数据有更新,update_time字段却还停留在创建数据的时候。按常理来说这个字段应该是自动更新的才对。查了一下表结构,`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP发现update_time字段的类型是datetime由此牵扯出两个问题,(1)timestamp与datet...

2019-03-21 10:43:02 545

原创 MySQL中 int、bigint、smallint 和 tinyint 的区别详细介绍

tinyint从 -2^7 (-128) 到 2^7 - 1 (127) 的整型数据。存储大小为 1 个字节。unsigned 是从 0 到 255 的整型数据。所以建表的时候 只能是tinyint(3),哪怕你建tinyint(100),他最大还是3位这么多。 smallint从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。...

2019-03-21 10:27:12 769

原创 MySQL探秘:SQL语句执行过程详解

当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的。一旦理解了这一点,很多查询优化工作实际上就是遵循一些原则能够按照预想的合理的方式运行。 如下图所示,当向MySQL发送一个请求的时候,MySQL到底做了什么:客户端发送一条查询给服务器。服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。服务器端进行SQL解...

2019-03-21 10:25:05 232

原创 mybatis学习笔记-对原生jdbc程序中的问题总结

mybatis学习笔记1-对原生jdbc程序中的问题总结jdbc编程步骤问题总结参考代码本文总结jdbc编程的一般步骤,总结这样编程存在的问题,并附上典型地jdbc示例demojdbc编程步骤加载数据库驱动创建并获取数据库链接创建jdbc statement对象设置sql语句设置sql语句中的参数(使用preparedStatement)通过statemen...

2019-03-20 13:48:56 169

转载 【MyBatis学习15】MyBatis的逆向工程生成代码

1. 什么是逆向工程  mybatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po..)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。2. 使用逆向工程  使用mybatis的逆向工程,需要导入...

2019-03-20 10:44:11 158

转载 【MyBatis学习14】MyBatis和Spring整合

  前面十几篇博文总结了mybatis在开发中的相关技术,但在实际中都是和spring整合开发的,所以这里总结一下mybatis和spring的整合方法,并在整合后进行测试。1. 整合的环境  这都是老掉牙的问题了,不管是开发还是整合,首先环境肯定得有,环境嘛,除了java环境和开发环境外,那就是jar包咯,关于mybatis和spring整合的jar包,我已经上传到下载频道了==>传...

2019-03-20 10:42:39 164

转载 【MyBatis学习13】MyBatis中的二级缓存

1. 二级缓存的原理  前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的。为了更加清楚的描述二级缓存,先来看一个示意图:   从图中可以看出: sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到该UserMapper的二级缓...

2019-03-20 10:31:24 240

转载 【MyBatis学习12】MyBatis中的一级缓存

  缓存的作用是减轻数据库的压力,提高数据库的性能的。mybatis中提供了一级缓存和二级缓存,先来看一下两个缓存的示意图:   从图中可以看出: 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。 ...

2019-03-20 10:22:44 145

翻译 【MyBatis学习11】MyBatis中的延迟加载

1. 什么是延迟加载  举个例子:如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。 所以延迟加载即先从单表查询、需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。   我们来对比一下: 关联查询:SELECT orders.*, user.user...

2019-03-20 10:16:48 98

翻译 【MyBatis学习10】高级映射之多对多查询

  本文来总结一下mybatis中的多对多映射,从第8节的文章中可以看出,用户表和商品表示多对多关系,它们两的多对多是通过订单项和订单明细这两张表所关联起来的,那么这一节主要来总结一下用户表和商品表之间的多对多映射。   首先在上一节的基础上继续写sql,SELECT orders.*, user.`username`, user.`sex`, user.`address`...

2019-03-20 10:09:55 159

翻译 【MyBatis学习09】高级映射之一对多查询

  上一篇博文总结了一下一对一的映射,本文主要总结一下一对多的映射,从上一篇文章中的映射关系图中可知,订单项和订单明细是一对多的关系,所以本文主要来查询订单表,然后关联订单明细表,这样就有一对多的问题出来了。   首先还是先写sql语句,在写sql语句的时候遵循两点: 查询的主表是哪个? 订单表 查询的关联表是哪个? 订单明细表   明确了主表和关联表,下面就可以写sq...

2019-03-20 10:08:52 121

翻译 【MyBatis学习08】高级映射之一对一查询

  从这一篇博文开始,将总结一下mybatis中的几个高级映射,即一对一、一对多、多对多查询,这篇先总结一下mybatis中的一对一查询。   为了模拟这些需求,事先要建立几个表,不同的表之间将对应上面提到的不同的映射,为此,我建立4个表,如下:DROP TABLE IF EXISTS `items`;DROP TABLE IF EXISTS `orders`;DROP TABLE IF...

2019-03-20 10:03:38 177

翻译 【MyBatis学习07】动态sql

1. 动态sql  动态sql是mybatis中的一个核心,什么是动态sql?动态sql即对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。就拿上一篇博文中对用户的综合查询一例来说:select * from user where user.sex = #{user.sex} and user.username like '%${user.username}%'1 ...

2019-03-20 10:01:13 103

翻译 【MyBatis学习06】输入映射和输出映射

  在前面几篇博文的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结。我们知道mybatis中输入映射和输出映射可以是基本数据类型、hashmap或者pojo的包装类型,这里主要来总结一下pojo包装类型的使用,因为这个在开发中比较常用。1. 输入映射  输入映射,是在映射文件中通过parameterType指...

2019-03-20 09:47:58 138

转载 【MyBatis学习05】SqlMapConfig.xml文件中的配置总结

  经过上两篇博文的总结,对mybatis中的dao开发方法和流程基本掌握了,这一节主要来总结一下mybatis中的全局配置文件SqlMapConfig.xml在开发中的一些常用配置,首先看一下该全局配置文件中都有哪些可以配置的东西: 配置内容 作用 <properties> 用来加载属性文件 <settings> 用来设置全局参数...

2019-03-20 09:45:36 116

转载 【MyBatis学习04】mapper代理方法开发dao

  上一篇博文总结了mybatis使用 原始dao的方法存在的一些弊端,我们肯定不会去用它,那么mybatis中该如何开发dao呢?如题所述,这篇博文主要来总结一下使用mapper代理的方法来开发dao的步骤。   使用mapper代理的方法来开发dao时,程序员只需要干两件事即可: 需要编写mapper.xml映射文件 需要编写mapper接口(相当于dao接口)  ...

2019-03-20 09:39:28 139

翻译 【MyBatis学习03】原始dao开发方法及其弊端

<p>  <font size="3">上一篇博文总结了一下mybatis的入门,接下来就要开发dao方法了,这篇博文主要总结一下mybatis中原始dao开发的方法,最后并总结一下原始dao开发方法的弊端。mybatis中dao开发应该使用mapper代理的方法,这将在下一篇博文中介绍。 <br>原始dao开发思路比较简单,写个dao接口和d...

2019-03-19 20:41:59 122

转载 【MyBatis学习02】走进MyBatis的世界

我的个人博客站点:http://www.itcodai.com  今天是端午节,祝大家端午节快乐~玩了一天刚回来,该写篇博客了~   mybatis是个持久层的框架,用来执行数据库操作的,无外乎增删改查,上一节对mybatis有了宏观上的了解后,这一篇博客主要通过一个小示例来入门mybatis,先看一下要写的示例需求: 根据用户id查询用户...

2019-03-19 20:35:33 143

转载 【MyBatis学习01】宏观上把握MyBatis框架

  今天开始学习mybatis框架,博客主要记录学习过程中的一些总结,如有错误之处,欢迎留言指正~先用mybatis的鸟鸟来镇个楼,咳咳~~   mybatis框架是一个持久层框架,是Apache下的顶级项目。mybatis可以让开发者的主要精力放在sql上,通过mybatis提供的映射方式,自由灵活的生成满足需要的sql语句。MyBatis可以将向preparedStatement中的输...

2019-03-19 11:22:41 112

原创 JDBC 操作数据库

package org.java.dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/** * 里面编写了所有的关于数据库操作的方法...

2018-12-02 13:48:56 111

原创 Java基础

一、java发展创始人:詹姆斯*高斯林(java之父)开始是C++程序员互联网时代的产物起初名字叫做OAK(老橡树)后来更名位java(爪哇)java应用领域javaSE(J2SE) java基础javaME(J2ME) 移动设备开发(如:安卓)javaEE(J2EE) 企业级开发二、JdkJdk 1.1(也称之为jdk1.0) 1997年Jdk1...

2018-12-02 12:20:29 130

原创 hello, world

Hello World 中文意思是『你好,世界』。因为《The C Programming Language》中使用它做为第一个演示程序,非常著名,所以后来的程序员在学习编程或进行设备调试时延续了这一习惯。最初的&quot;hello, world&quot;打印内容有个标准,即全小写,有逗号,逗号后空一格,且无感叹号。不过沿用至今,完全遵循传统标准形式的反而很少出现。...

2018-12-01 20:11:45 137

原创 数据库表字段命名规范

摘要:当前研发工作中经常出现因数据库表、数据库表字段格式不规则而影响开发进度的问题,在后续开发使用原来数据库表时,也会因为数据库表的可读性不够高,表字段规则不统一,造成数据查询,数据使用效率低的问题,所以有必要整理出一套合适的数据库表字段命名规范来解决优化这些问题。本文是一篇包含了数据库命名、数据库表命名、数据库表字段命名及SQL语言编码的规范文档,针对研发中易产生的问题和常见错误做了一个整理和...

2018-11-30 13:38:56 820

翻译 map泛型 map不指定泛型的区别

map泛型 map不指定泛型 与 Map&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;Object,Object&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;的区别private void viewDetail(){ Map map1 = new HashMap(); Map&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;

2018-11-29 16:43:18 6975

空空如也

空空如也

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

TA关注的人

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