Mybatis分页
概览本文为基于mybatis和MySql进行分页功能的实现,一共四种方式:
数组分页
sql语句分页
拦截器分页
RowBounds分页
具体实现数组分页原理:进行数据库查询操作时,获取到数据库中所有满足条件的记录,保存在应用的临时数组中,再通过List的subList方法,获取到满足条件的所有记录
1List<E> subList(int fromIndex, int toIndex);
即从list中截取从fromInde [(page-1)*size] 到toIndex [fromIndex+size] 的数据,这里不介绍具体实现。
缺点:数据库查询并返回所有的数据,而我们需要的只是极少数符合要求的数据。当数据量少时,还可以接受。当数据库数据量过大时,每次查询对数据库和程序的性能都会产生极大的影响。
sql分页使用limit语句直接在数据库语言中只检索符合条件的记录,不需要在通过程序对其作处理。
1select * from studeng LIMIT [<offset>,] <row count>
offset:偏移量,(page- ...
MyBatis
概念MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。Mybatis它是个高轻量级的半自动的持久层框架,它更加关注原生sql的编写。所以在实际项目中mybatis可以实现代码和sql的完全解耦。Mybatis还提供了强大的基于OGNL的动态sql语句编写。它支持定制化 SQL、存储过程以及高级映射。所以深受广大程序员的喜爱。
工作原理工作流程如下
OR映射实体对象采用的是面向对象技术,它表达实体的关系是用关联、继承。而RDBMS 是遵循关系的范式理论构建的二维表,主要采用主键和外键的关联方式。因此,对象模型与数据库模型是不一致的,需要在两者之间进行变换即映射。 映射的完成可以按照规则进行人工映射,可以从O映射到R,反之亦然。可以借助开发工具的正、反向工程完成映射。
Mybatis通过映射将对象的属性信息通过一种规范与数据库里的信息实现一一对应。例如:查询结果中的字段名要和类属性名一致,才能将字段映射到类中 ...
MySQL
关系型数据库概念关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解。关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织
创建表创建MySQL数据表需要以下信息:
表名
表字段名
定义每个表字段
示例:
123456789101112// 如果表不存在则创建表CREATE TABLE IF NOT EXISTS `runoob_tbl`( // 字段名(runoob_id) 数据类型(INT) 无符号(UNSIGNED) 自增(AUTO_INCREMENT) `runoob_id` INT UNSIGNED AUTO_INCREMENT, // 非空(NOT NULL) `runoob_title` VARCHAR(100) NOT NULL, `runoob_author` VARCHAR(40) NOT NULL, `submi ...
nginx
概念反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
反向代理为何叫反向代理?
作用
提高了内部服务器的安全(将反向代理作为公网访问地址,Web服务器是内网)
加快了对内部服务器的访问速度
节约了有限的IP资源
nginx使用安装jdk1. 下载jdk文件官网或者华为镜像网站
2. 将文件上传到linux并解压12cd /usr/local/javatar -zxvf jdk-8u201-linux-x64.tar.gz
3. 配置环境变量打开配置文件
1vim /etc/profile
在文件尾部配置
1234567# jdk1.8.0_201JAVA_HOME=/usr/local/java/jdk1.8.0_201JRE_HOME=$JAVA_HOME/jrePATH=$PATH:$JAVA_ ...
Linux常用命令
1:systemctl
systemctl –version,查看版本。
whereis systemctl,查看位置。
systemctl list-unit-files,列出所有可用单元(服务)。
systemctl list-units,列出所有运行中的单元。
systemctl –failed,列出所有失败的单元。
systemctl list-unit-files | grep enable,查看自启动的软件。
systemctl is-enabled mysqld.service,查看某个单元是否开机启动。
systemctl status mysqld.service,查看某个单元的状态。
systemctl start mysqld.service,启动某个单元。
systemctl restart mysqld.service,重启某个单元。
systemctl stop mysqld.service,停止某个单元。
systemctl daemon-reload,修改了某个单元的配置文件后,重载配置文件。
systemctl reload mysqld.servic ...
Linux设置Redis开机自启
初接触Linux,记录设置方法本文以redis为例,但是方法是通用的
1:系统服务下创建service文件1vi /usr/lib/systemd/system/redis-server.service
2:写入内容1234567891011121314[Unit]Description=redis-serverAfter=network.target [Service]Type=forkingTimeoutSec=0ExecStart=/usr/local/redis/src/redis /usr/local/redis/redis.confExecReload=/usr/local/redis/src/redis /usr/local/redis/redis.conf -s reloadExecStop=/usr/local/redis/src/redis /usr/local/redis/redis.conf -s quitPrivateTmp=true [Install]WantedBy=multi-user.target
Description:描述服务Af ...
消息队列
概念队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。
消息队列(Message Queue)消息队列可以简单理解为把要传输的数据放在队列中。
消息队列是分布式系统中重要的组件,其通用的使用场景可以简单地描述为:
当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。
消息队列主要解决了应用耦合、异步处理、流量削锋等问题。
当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,而部分数据库如Redis、Mysql以及phxsql也可 ...
Redis数据类型
五种基本数据类型Redis支持五种基础数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。三种特殊数据类型:geospatial(地理位置),hyperloglog(基数统计),bitmaps(位图场景)
String(字符串)
命令
描述
INCR key
将 key 中储存的数字值增一
DECR key
将 key 中储存的数字值减一
INCRBY key
increment 将 key 所储存的值加上给定的增量值(increment)
DECRBY key
decrement key 所储存的值减去给定的减量值(decrement)
STRLEN key
返回 key 所储存的字符串值的长度。
12345678910111213141516127.0.0.1:6379> set string 1OK# 自增 1127.0.0.1:6379> incr string(integer) 2# 自减 1127.0.0.1:6379> decr string(in ...
Redis缓存穿透,缓存击穿和雪崩
缓存穿透缓存穿透是指查询一个不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存。这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。
穿透解决方案
布隆过滤器 布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先校验,不符合则丢弃,从而避免对底层查询系统的压力
缓存空对象 在存储不命中后,即便返回的空对象也将其缓存起来,同时设置一个过期时间,之后访问这个数据会从缓存中获取,保护后端数据源 但是这种方法存在两个问题:
如果空值能够被缓存,意味着缓存需要更多的空间存储更多的键,因为其中可能有很多空值的键
即便对空值设置了过期时间,还是会存在缓存层和存储层的数据会有一段时间的不一致,对于保持一致性的业务可能有影响
缓存击穿对于一些设置了过期时间的key,如果这些key可能会在某些时间点被超高并发地访问,是一种非常“热点”的数据。这个时候,需要考虑一个问题:缓存被“击穿”的问题,这个和缓存雪崩的区别在于这里针对某一key缓存,后者则是很多key。
缓存在某个时间点过期的时候,恰好在这个时间间隔对这个Ke ...
Redis持久化
概念持久化的功能:Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次Redis重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置。
Redis持久化分为RDB持久化和AOF持久化:前者将当前数据保存到硬盘,后者则是将每次执行的写命令保存到硬盘;由于AOF持久化的实时性更好,即当进程意外退出时丢失的数据更少,因此AOF是目前主流的持久化方式,不过RDB持久化仍然有其用武之地
RDB持久化RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。当Redis重新启动时,可以读取快照文件恢复数据。
触发条件对RDB来说,有手动触发和自动触发两种情况
手动触发手动触发对应save和bgsave命令,两者都会生成RDB文件
savesave命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在Redis服务器阻塞期间 ...