- 博客(134)
- 收藏
- 关注
原创 【Spring框架】Spring的事务管理
Spring的事务管理有关事务的概念可以参考:MySQL事务。Spring当中事务管理的API接口:参考文章:Spring事物管理简介。PlatformTransactionManager 事务管理器。TransactionDefinition 事务定义信息(隔离,传播、超时、只读)。TransactionStatus 事务具体运行状态。Spring对事务的管理的方式:基于XML配置形式实现。基于注解形式实现。基于XML形式的事务管理思想:其实就是AOP模式的思想实现。这里
2020-07-13 15:52:33
135
原创 【Spring框架】Spring和MyBatis的整合使用
Spring和MyBatis的整合使用有关MyBatis的相关知识可查看MyBatis框架。MyBatis框架具体的实现步骤为:创建MyBatis的全局配置文件,配置数据源信息,配置映射。通过读取MyBatis的全局配置文件创建sqlSessionFactory实例。(会话工厂是需要创建一份就可以了)通过会话工厂创建会话,sqlSession。整合思想Spring通过单例方式管理sqlSessionFactory实例对象。Spring和MyBatis整合生成代理对象,使用sqlS
2020-07-13 15:27:23
363
原创 【Spring框架】Spring的JdbcTemplate操作
Spring的JdbcTemplate操作jdbcTemplate是Spring提供的操作数据库的操作,是基于JDBC实现的。在之前的Javaweb学习中,学习了手动封装JdbcTemplate,其好处是通过(sql语句+参数)模板化了编程。而真正的JdbcTemplate类,是Spring框架为我们写好的。它是 Spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。除了JdbcTemplate,spring 框架还为我们提供了很多的操作模板类。操作关系型数据的:Jdb
2020-07-13 14:25:56
169
原创 【Spring框架】Spring的AOP使用
Spring的AOP使用我们在Spring框架中实现AOP功能主要是通过AspectJ实现的,AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。需要注意的是,AspectJ并不是Spring框架的一部分,它只是用于和Spring结合在一起共同完成有关AOP的操作而已。AOP结合AspectJ的使用主要有两种方式:基于XML配置的方式实现;基于注解的方式实现;基于XML配置的方式实现1
2020-06-22 20:51:45
4920
原创 【Spring框架】Spring的AOP介绍
Spring的AOP介绍AOP(全称Aspect Oriented Programming) 即:面向切面编程。通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高开发的效率。AOP的作用及优势作用:在程序运行期间,不修改源码对已有方法进行增强。优势:减少重复代码。提高开发效率。维护方便。AOP的实现方式:动
2020-06-18 20:28:01
362
原创 【Spring框架】Spring中的DI介绍
Spring中的DI介绍DI(Dependency Injection),即“依赖注入”,组件之间依赖关系由容器在运行期决定,即容器动态的将某个依赖关系注入到组件当中。它是是 Spring 框架核心IOC技术的具体实现。依赖注入是控制反转最常用的方式,通过控制反转可以减低计算机代码之间的耦合度。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。DI理解的关键点“谁依赖谁,为什么需要依赖”谁依赖谁:应用程序依赖IOC容器
2020-06-18 17:23:04
5538
原创 【Spring框架】Bean的实例化方式
Bean的实例化方式Spring容器中配置Bean的方式主要有两种:基于配置方式;基于注解方式;基于XML配置方式装配BeanBean基于配置方式实例化有三种形式:通过无参构造实例化;基于静态工厂方式实例化;基于普通工厂方式实例化;基于无参构造方式在博客Spring的IOC介绍中,所使用的实例就是无参构造来实例化的对象。<?xml version="1.0" encoding="UTF-8"?><!--根标签--><beans xmlns=
2020-06-18 15:57:33
380
原创 【Spring框架】Spring的IOC介绍
Spring的IOC介绍Spring的IOC思想Spring的核心思想之一:IOC(Inversion Of Control)控制反转。控制反转(Inversion Of Control,即IOC):把对象的创建、初始化、销毁等工作交给框架,是框架的重要特征。并非面向对象编程的术语。控制反转包括依赖注入和依赖查找。控制反转表达的意思是什么?把对象的创建交给外部的容器完成,这个就是控制反转。Spring使用控制反转来实现对象的使用(使该部分程序不用在程序中写死)。那么对象和对象之间的
2020-06-18 15:18:57
254
原创 【Spring框架】Spring框架介绍
Spring框架介绍Spring 是分层的 Java SE/EE 应用 full-stack 全栈式轻量级开源框架,以 IOC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 SpringMVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。Spring 的源代码设计精妙、结
2020-06-18 13:52:10
319
原创 【Java集合框架库】PriorityQueue类
PriorityQueue类PriorityQueue是一个基于优先级的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。该队列不允许使用 null 元素也不允许插入不可比较的对象(没有实现Comparable接口的对象)。PriorityQueue 队列的队头元素指排序规则最小那个元素。如果多个元素都是最小值则随机选一个。PriorityQueue 是一个无界队列,但是初始的容量(实际是一个Object[])
2020-06-17 21:26:16
470
原创 【Java集合框架库】ArrayDeque类
ArrayDeque类ArrayDeque继承于AbstractCollection类,其同时实现了Deque接口。Queue的结构是一个单端的队列,从一端进另一端出,Deque是一个双端队列。而ArrayDeque是一个使用循环数组实现的双端队列了。双端队列可以实现单端队列的先入先出的方式,也可以实现栈结构的先入后出的方式,使用比较灵活,看具体需求。ArrayDeque是线程非安全的,所以如果需要实现线程安全,就需要自己处理了。ArrayDeque的特点首先我们来看看ArrayDeque的继承结构:
2020-06-17 19:53:40
280
原创 【MyBatis框架】MyBatis中的延时加载和逆向工程
MyBatis中的延时加载在操作数据库时,尽量查询单表,因为查询单表的效率最高。但很多时候难免要进行多表查询,这时使用延迟加载,就可以提高关联查询的效率。并且延迟加载只能使用resultMap。配置延时加载在全局配置XML文件的setting配置中开启懒加载模式<settings> <!--懒加载配置--> <setting name="lazyLoadingEnabled" value="true"/> <setting name=
2020-06-17 17:43:22
185
原创 【MyBatis框架】MyBatis高级映射
MyBatis高级映射在关系型数据库中,我们经常要处理一对一、一对多、多对多的关系。在RBAC权限系统中还存在着一个用户拥有多个角色、一个角色拥有多个权限这样复杂的嵌套关系。在面对这种关系的时候,我们可能要写多个方法分别查询这些数据,然后再组合到一起。这种处理方式特别适合用在大型系统上,由于分库分表,这种用法可以减少表之间的关联查询,方便系统进行扩展。但是在一般的企业级应用中,使用MyBatis的高级结果映射便可以轻松地处理这种一对一、一对多、多对多地关系。以订单数据模型为例进行分析:user:用户
2020-06-17 15:11:19
764
原创 【Java基础算法】动态规划
动态规划动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是相互独立的。若用分治法解这类问题,则分解得到的子问题数目太多,以至于最后解决原问题需要耗费指数时间。然而,不同子问题的数目常常只要多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。如果能够保存已解决的子问题的答案,而在需要时再找出来已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。为
2020-05-28 20:24:09
868
原创 【Java集合框架库】HashTable类
HashTable类HashTable同样是基于哈希表实现的,其中的每个元素是一个key-value对,内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。它在很大程度上和HashMap的实现差不多,不过相对的功能较少,目前已经很少使用了,下面来看看HashTable的具体内容。HashTable的特点HashTable的继承关系:public class Hashtable<K,V> extends Dictionary<K,V> im
2020-05-28 13:34:55
364
原创 【JavaSE高级】Java的四种对象引用
Java的四种对象引用在JVM中,一个对象如果不再被使用就会被当做垃圾给回收掉,判断一个对象是否是垃圾,通常有两种方法:引用计数法和可达性分析法。不管是哪一种方法判断一个对象是否是垃圾的条件总是一个对象的引用是都没有了。JDK.1.2 之后,Java 对引用的概念进行了扩充,将其划分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,它就不会被垃圾回收
2020-05-27 20:31:32
286
原创 【Java集合框架库】WeakHashMap类
WeakHashMap类在前面,我们了解了许多Map接口下的集合,而WeakHashMap从名字来看,它依旧与Map有关。不过它名字前面还有一个Weak,我们就更能自然而然的想到这里面还牵扯到一种弱引用结构,因此想要彻底搞懂,我们还需要知道四种引用。详细介绍请参考链接:Java中的四种引用。WeakHashMap是基于弱引用的,也就是说只要垃圾回收机制一开启,就直接开始了扫荡,看见了就清除。我们接下来先看看WeakHashMap和HashMap究竟有什么样的区别。WeakHashMap简介publi
2020-05-27 18:06:29
293
原创 【MyBatis框架】MyBatis提供的缓存机制
MyBatis提供的缓存机制缓存就是数据交换的缓冲区(称作:Cache),当某一硬件要读取数据时,会首先从缓存汇总查询数据,有则直接执行,不存在时从内存中获取。由于缓存的数据比内存快的多,所以缓存的作用就是帮助硬件更快的运行。缓存提供了一种存储方式,主要是用于存储数据,当客户端访问数据时可以直接访问缓存,从而减轻数据库的压力,提高数据库的性能。数据的访问流程:其中服务器主要的功能是和数据库进行数据交互,其主要操作无非是增删改查(查询操作比较多,特点是:频率高,不会改变数据),查询操作时服务器会从数据
2020-05-27 16:05:28
291
原创 【MyBatis框架】动态代理-MyBatis框架的代理模式
MyBatis框架的代理模式通过前面的了解,我们大致知道了MyBatis框架的基本使用方式。但是,我们可能会有一个疑问,为什么Mapper接口没有实现类却能被正常调用呢?其实这是因为MyBatis在Mapper接口上使用了动态代理的一种非常规的用法。在了解这种用法之前,我们先来看看原生方法的使用。原生方法的调用方式以查询操作为例,原生方法的调用会直接通过sqlSession会话调用相应的方法来达到查询的目的。代码如下:接口文件:public interface StudentMappe
2020-05-25 22:07:32
2700
原创 【Java项目实现】五子棋小游戏
五子棋小游戏项目名称五子棋小游戏项目描述可以改变获胜棋子数,率先连成棋数的人获胜代码实现测试类public class Test { public static void main(String[] args) { FiveChess fiveChess = new FiveChess(); fiveChess.start(); ...
2020-05-25 18:30:06
518
原创 【Java项目实现】猜拳小游戏
猜拳小游戏项目名称猜拳小游戏项目描述玩家与电脑进行猜拳游戏,玩家行为采用输入方式,电脑行为采用随机形式。代码实现测试类public class Test { public static void main(String[] args) { Game game = new Game(); game.start(); }}主...
2020-05-25 18:29:49
1646
原创 【Java项目实现】Puzzle
Puzzle项目名称Puzzle项目描述初始正方形中的带圆圈的数字是可以移动到沿着行的其他正方形的标记。在拼图的每个步骤,可以移动标记的正方形中由当前占据的整数指示的方格数。标记可以沿着该行向左或向右移动,但可以不移动经过任一端。例如,唯一合法的第一步是将标记向右移动三个方格,因为没有空间向左移动三个空格。拼图的目标是将标记移动到行的远端的0。要求:用递归 或 栈或者队列实...
2020-05-25 18:29:20
398
原创 【Java项目实现】寻找迷宫出路
寻找迷宫出路项目名称寻找迷宫出路项目描述给定一个自定义迷宫,0表示能通过,1表示不能通过。通过程序找出正确的迷宫出路,并将正确的路线改为2输出。代码实现主类:实现主方法public class Maze { private MazeNode[][] mazeNodes; private int row; private int col; p...
2020-05-25 18:29:03
320
原创 【Java项目实现】模拟ATM机
模拟ATM机项目名称模拟ATM机项目描述简单实现ATM机功能代码实现测试类public class Test { //模拟多功能ATM机 public static void main(String[] args) { ATM atm = new ATM(); atm.opearte(); }}主类:实现...
2020-05-25 18:27:56
731
原创 【Java排序算法】快速排序思想的应用
快速排序在前面,我们了解到了快速排序的思想,详情链接可见:快速排序。其实,快速排序也可以看作是分治策略的一种算法模式,根据快速排序的思想,我们可以实现许多实际中的应用问题。下面,我们来看看这些问题该如何实现。首先,我们来回顾一个快速排序的实现过程,其中最重要的一步操作就是快速排序中的划分操作。快速排序的划分操作实现/** * 快速排序的划分过程 */public static int Partition(int[] arr, int left, int right) { int tem
2020-05-25 17:50:43
585
原创 【Java集合框架库】LinkedHashMap类和TreeMap类
LinkedHashMap在前面,我们了解到了HashMap的使用及原理,HashMap是一种非常常见、非常有用的集合,大多数情况下,只要不涉及线程安全问题,Map基本都可以使用HashMap。不过HashMap有一个问题,就是迭代HashMap的顺序并不是HashMap插入的顺序,也就是HashMap在遍历时是无序的。 HashMap的这一缺点往往会给我们带来各种困扰,因为有些场景,我们期待一个有序的Map。这个时候,LinkedHashMap就闪亮登场了,它虽然增加了时间和空间上的开销,但是通过维护一
2020-05-21 14:18:52
403
原创 【MyBatis框架】动态SQL的基本用法
动态SQLMyBatis的强大特性之一便是它的动态SQL。使用过JDBC或其他类似框架的人都会知道,根据不同条件拼接SQL语句时不仅不能忘了必要的空格,还要注意省略掉列名列表最后的逗号,处理方式麻烦且凌乱。MyBatis的动态SQL则能让我们摆脱这种痛苦。在MyBatis 3之前的版本中,使用动态SQL需要学习和了解非常多的标签,现在MyBatis采用了功能强大的OGNL(Object-Graph Navigation Language)表达式语言消除了许多其他标签,以下是MyBatis的动态SQL在X
2020-05-19 16:00:55
792
原创 【MyBatis框架】MyBatis框架-注解方式的基本用法
MyBatis框架-注解方式的基本用法MyBatis框架的注解方式就是将SQL语句直接写在接口上。这种方式的优点是,对于需求比较简单的系统,效率较高。缺点是,当SQL有变化时需要重新编译代码,一般情况下不建议使用注解方式。在MyBatis注解SQL中,最基本的就是@Select、@Insert、@Update和@Delete四种。下面来看看具体操作。前期准备工作1、创建数据库及所操作的表# 创建数据库CREATE DATABASE test;#创建表CREATE TABLE `Student
2020-05-17 21:08:28
595
原创 【MyBatis框架】MyBatis框架-XML方式的基本用法
MyBatis框架的XML使用方式MyBatis的真正强大之处在于它的映射语句,这也是它的魔力所在。由于它的映射语句异常强大,映射器的XML文件就显得相对简单。如果将其与具有相同功能的JDBC代码进行对比,立刻就会发现,使用这种方法节省了将近95%的代码量。MyBatis就是针对SQL构建的,并且比普通的方法做的更好。它可以使用JDBC的动态代理直接通过接口来调用相应的方法,不需要提供接口的实现类。下面来看看具体操作。前期准备工作MyBatis介绍与基本使用操作可参考前面的链接。1、创建数据库及所操
2020-05-17 18:48:39
1047
原创 【MyBatis框架】MyBatis框架介绍与基本使用操作
JDBC编程存在的问题JDBC编程的完整步骤请参考:JDBC编程,这里以一个JDBC的实例类来说明:import java.sql.*;public class JDBC_Demo { public static void main(String[] args) throws Exception { Connection connection = null; Statement statement = null; ResultSet rs =
2020-05-11 11:33:32
749
原创 【Java集合框架库】HashMap类
HashMap类HashMap类是基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。它继承于AbstractMap类,实现了Map、Cloneable、java.io.Serializable接口。HashMap有两个参数影响其性能:初始容量和加载因子,初始容量是哈希表在创建时的容量,默认为16个大小。加载因子默认为0.75,当哈希表中的节点个数超过加载因子*当前节点个数时,需要进行2倍扩容操作。(除了不同步和允许使用 null 之外,Hash
2020-05-11 09:57:34
327
原创 【Java集合框架库】Vector类和Stack类
Vector类Vector是矢量队列,是JDK1.0版本添加的类,他继承于AbstractList,实现了接口库List,RandomAccess,和Cloneable。Vector实现了List,所以它能够为队列提供:增加,删除,修改,遍历等操作。Vector实现RandomAccess接口,他使队列能够快速访问(即通过索引值就能访问得到)。Vector实现了Cloneable接口,他...
2020-05-06 16:44:53
484
原创 【Java集合框架库】LinkedList类
LinkedList类LinkedList和ArrayList有一些相似,我们知道ArrayList是以数组实现,它的优势是查询性能高,劣势是按顺序增删性能差。如果在不确定元素数量的情况时,不建议使用ArrayList。这种情况下,我们就可以使用LinkedList了。LinkedList是以双向链表实现的。既然它是以链表来实现的,所以也会有链表的基本特性。又因为其是使用双向链表来实现的,所以...
2020-04-29 19:15:30
249
原创 【Java集合框架库】Java迭代器的使用
Java迭代器迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。迭代器作为一种设计模式,它可以用于遍历一个对象,而对于这个对象的底层结构不必去了解。Ja...
2020-04-28 13:36:22
187
原创 【Java高级数据结构】B+树
B+树B+树是B树的一个升级版,相对于B树来说,B+树更充分的利用了结点的空间,让查询速度更加稳定,其速度完全接近于二分法查找。B+树的特征1、B+树与B树的不同点:B+树的非叶子结点不保存关键字记录的指针,只进行数据索引,这样使得B+树的每个非叶子结点所能保存的关键字大大增加。2、B+树的叶子结点保存了父结点的所有关键字记录的指针,所有数据地址必须要到叶子结点上才能获取到。所以每次数据...
2020-04-27 15:44:00
387
原创 【Java集合框架库】ArrayList源码实现
ArrayList源码实现具体的ArrayList类的特点及详细介绍,请参考ArrayList类。在这里,仅仅是自己重新实现ArrayList相关操作的方法。属性我们都知道,ArrayList是通过模拟数组实现的动态变化的集合,因此它的底层实现仍然是数组。private Object[] element; //以数组模拟ArrayListprivate int size; //有效个数...
2020-04-22 18:51:28
205
原创 【Java集合框架库】ArrayList类
ArrayList类ArrayList是一个容量能够动态增长的动态数组。但是它又和数组不一样,它继承了AbstractList类,实现了List、RandomAccess、Cloneable、java.io.Serializable接口。继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。实现了RandmoAccess接口,即提供了随...
2020-04-20 18:26:35
312
原创 【Java高级数据结构】B树
B树又称B-树,一棵M阶的B树是一颗M路搜索树,它或者是一棵空树,或者是满足下列性质的树:1、根结点子女数(子树的个数)为[2, M];2、除根结点和叶子结点以外的所有分支结点至少有[(M/2), M]个子女(子树);3、所有的叶结点都位于同一层。M阶B树的结点结构如下:n, S0, (K1, S1), (K2, S2), ..., (Kn, Sn)其中,Si 是指向子树的指针,...
2020-04-20 16:41:05
847
原创 【Linux】文件操作基础命令
文件操作基础命令操作对普通文件操作的命令对目录文件操作的命令说明创建touch [文件名称]mkdir [目录名称]删除rm [文件名称]rmdir [目录名称]只能删除空目录rm -r [目录名称]删除非空目录(-r采用的是递归方法删除)拷贝cp [路径]+[文件名称] [新路径]cp -r [路径]+[目录名称] [新路径]...
2020-04-17 11:16:53
221
原创 【Linux】Linux基础命令
Linux基础Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux的发行版Linux 的发...
2020-04-16 19:49:43
211
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅