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- ...
对象克隆
为什么要使用对象克隆首先需要说明的是,直接用=符号来复制,只是复制了原有对象的引用,对新对象的修改同样也会作用原对象上。
示例如下:
1234567891011121314151617181920212223242526class A { private String name; public A(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; }}public class CloneTest { public static void main(String[] args) { A a = new A("张三"); A b = a; ...
三种代理模式
概念代理模式(Proxy)是一种设计模式,提供了对目标对象另外的访问方式:即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能,例:统计,log 或对参数进行优化,更改。
这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需要修改,可以通过代理的方式来扩展该方法。
举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接联系明星,而是联系明星的经纪人,来达到同样的目的。明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人)来解决。这就是代理思想在现实中的一个例子。
图片示例:
代理模式的关键点是:代理对象与目标对象。代理对象是对目标对象的扩展,并会调用目标对象。
代理模式的使用场景当无法或不想直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现同一个接口。
三种代理模式Java 代理分为静态代理和动态代理和 Cglib 代理。
静态代理静态代理在使用时,需要定义接口或者父类,被代理对象与代 ...
Java反射
本文转自Java反射并加以修改
概念
JAVA反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。反射主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
程序中一般的对象的类型都是在编译期就确定下来的,而Java反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。即我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。
反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。
反射机制主要提供以下功能:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。
重点:是运 ...
Session和Cookie
本文转发自Session和Cookie的区别与联系并加以修改
1:概念你可能有留意到当你浏览网页时,会有一些推送消息,大多数是你最近留意过的同类东西,比如你想买桌子,上淘宝搜了一下,结果连着几天会有各种各样的桌子的链接。这是因为你浏览某个网页的时候,WEB 服务器会先送一些资料放在你的计算机上,类似于你打的文字,选的一些东西什么的,Cookie 会帮你都纪录下来。当下次你再光临同一个网站,WEB服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内容给你。
Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie来辨认使用者,以方便送出使用者量身定做的内容。
然而,Cookie是什么呢?Session又是什么?
先来了解几个概念:
无状态的HTTP协议:协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。
HTTP协议是无状态的协议。一旦数据交换完毕,客户 ...
forward和redirect
本文转自forward和redirect的区别是什么?
1:概念forward和redirect是servlet中的两种主要的跳转方式。forward又叫转发(直接转发),redirect叫做重定向(间接转发)。
2:区别
地址栏
数据共享
应用场景
效率
本质
转发次数。
从地址栏显示来说:
forword是服务器内部的重定向,服务器直接访问目标地址的 url 网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。
redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的地址。
从数据共享来说:
由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用。即可以共享数据
redirect不能共享
从运用的地方来说:
forword 一般用于用户登录的时候,根据角色转发到相应的模块
redirect一般用于用户注销登录时返回主页面或者跳转到其他网站
从效率来说:
for ...
Java集合
概念Java 是面向对象的语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们必须把多个对象进行存储。已有的容器类型有:数组和 StringBuffer。但是,StringBuffer 的结果是一个字符串,不一定满足我们的要求,所以我们只能选择数组,这就是对象数组。而对象数组又不能适应变化的需求,因为数组的长度是固定的,此时,为了适应变化的需求,Java 就提供了集合类。
来自百度百科:集合框架(Java Collections Framework,JCF)是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。合理地利用 Java 集合框架不但可以提高程序的运行速度和质量,而且还可以减少设计新的 API(Application Programming Interface,应用程序接口),设计者和实现者不需要在每次创建一种依赖于集合内容的 API 时重新设计,只需使用标准集合框架的接口即可。
与现代数据结构常见的类库一样,Java 集合类库将接口(interface)与实现(imple ...
Java IO
概念
百度百科:流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为 IO 流。换句话说,IO 流就是以流的方式进行输入输出。
在 Java API 中,可以从其中读取一个字节序列的对象称作输入流,而可以向其中写入一个字节序列的对象称作输出流。抽象类 InputStream 和 OutputStream 构成了输入/输出(I/O)类层次结构的基础Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。
一个流被定义为一个数据序列。输入流用于从源读取数据,输出流用于向目标写数据。下图是一个描述输入流和输出流的类层次图。
IO 分类按功能来分:输入流(input)、输出流(output)。按类型来分:字节流和字符流。字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。本质区别:字节流是原生的操作,字符流是经过处理后的操作。
文件Fi ...
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 ...