springmvc:SpringMVC入门
在此之前,先来学习MVC设计模式。MVC全名是(Model View Controller),是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。其实就是Controller负责接收并处理请求,响应客户端;Model包括模型数据和业务逻辑;View主要是呈现模型,与用户进行交互:
那么什么是SpringMVC呢?SpringMVC是实现了MVC设计模式的框架,同时是Spring框架的一个子模块,二者可以很好地结合使用,不需要整合。
SpringMVC核心组件接下来通过SpringMVC的工作流程来介绍SpringMVC各核心组件的名称及用法:
1、前端控制器(DispatcherServlet):接收前端页面的请求,并响应结果到前端页面,同时中间作请求转发,相当于中央处理器;2、处理器映射器(HandlerMapping): 根据请求的url来查找对应的处理器(将请求映射到Handle);3、处理 ...
spring:Spring事务管理
事务事务定义事务是正确执行一系列的操作(或动作),使得数据库从一种状态转换成另一种状态,且保证操作全部成功,或者全部失败。我们知道在JavaEE的开发过程中,service层的方法通常用于业务逻辑处理,而业务往往涉及到对数据库的多个操作。
以生活中常见的转账为例,假设某个方法要实现将A账户转账到B账户的功能,则该方法内必定有两个操作:先将A账户的金额减去要转账的数目,然后将B账户加上相应的金额数目,这个方法看似简单,但是需要这两个操作要么全部成功(表示本次转账成功);若有任意一方失败,则另一方必须回滚(即必须回到初始状态,全部失败)。所以上面介绍的事务其实就是指:一组操作是不可分割的,要么全部成功,要么全部失败。
事务的ACID四个特性我们知道事务具有ACID四个特性:原子性、一致性、隔离性和持久性。
原子性(Atomicity):事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生;一致性(Consistency):事务在完成后数据的完整性必须保持一致;隔离性(Isolation):多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间的数 ...
spring:JdbcDaoSupport
在前面我们学习了JDBC Template,尽管此时可以直接利用JDBCTemplate进行数据库的操作,但是在大部分的DAO的实现子类中,却很少有人会这样做,大家往往会让DAO的实现子类既实现了DAO同时又继承一个JdbcDaoSupport的抽象类。为什么会这样呢?先来看之前学习的JDBC Template。
我们为获得JDBCTemplate对象,需要在xml文件中进行配置:
1234<!--配置JDBC工具类--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean>
然后在使用的地方使用下面的代码进行注入:
12@Autowiredprivate JdbcTemplate jdbcTemplate;
这其实就是让Spri ...
spring:JDBC Template学习
本文介绍如何使用Spring组件JDBC Template来简化持久化操作,当然JDBC Template现在企业用的不是很多,一般使用 Mybatis作为持久层框架。因此本文只是简单的介绍几点:1、Spring组件JDBC Template基本信息;2、使用JDBC Template进行持久化操作;3、更好地了解和学习Mybatis或者Hibernate等ORM框架。
注意在学习JDBC Template之前,你最好有JDBC、SpringIOC、SpringAOP和Mysql等基础。
JDBC Template简介为了简化持久化操作,Spring在JDBC API基础上提供了JDBC Template组件。下面是基于JDBC API的数据库访问操作流程图:
其实这个过程是较为复杂的,我们希望是简化JDBC的操作,最好是不编写JDBC API的代码,但是能实现JDBC的功能,最好是下面这样:
下面是从网上找到的一张图片,通过对比可以清楚地知道JDBC Template极大地简化了程序员的代码量:
案例说明这里举一个学生、课程和选课的例子来介绍如何使用Spring提供的JDBC ...
spring:基于AspectJ的AOP开发
在实际开发中,Spring最常用到的是基于AspectJ的AOP开发方式。而AspectJ的使用通常有两种方式:注解方式和xml配置方式。
AspectJ简述AspectJ是一个基于Java语言的AOP框架,在此之前都是使用传统的AOP开发,AspectJ是一个独立的AOP框架,由于它的方便效率,Spring2.0以后新增了对AspectJ切点表达式支持。
@AspectJ是AspectJ1.5新增的功能,通过JDK5注解的方式,允许直接在Bean类中定义切面。新版本的Spring框架建议使用AspectJ方式来进行开发AOP。
使用AspectJ需要导入Spring AOP和AspectJ相关的jar包,如spring-aop、aopalliance、aspects以及aspectj.weaver等。
基于注解方式的AspectJ开发AOP第一步:新建一个webapp,名称为spring_aspectJ,接着在里面新建一个java源文件。
第二步:导入相应的包。首先在pom.xml文件中引入spring的基本开发包以及AspectJ开发包:
123456789101112131415 ...
spring:Spring AOP
Spring AOP说明AOP(Aspect Oriented Pragraming)面向切面编程,AOP采用横向抽取机制,取代了传统纵向继承体系的重复性代码(性能监视、事务管理、安全检查、缓存)。
所谓的传统纵向继承体系是指当你需要实现某个功能的时候需要去继承某个类,而横向抽取机制则是通过使用动态代理机制产生一个与之同级的对象,然后在代理对象中进行功能增强。
Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码。
Spring的AOP代理JDK动态代理:对实现了接口的类生成代理CGLib代理机制:对类生成代理
AOP相关术语**Joinpoint(连接点):**所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点;**Pointcut(切入点):**所谓切入点是指我们要对哪些Joinpoint进行拦截的定义;**Advice(通知/增强):**所谓通知是指拦截到Joinpoint之后所要做的事情就是通知。通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成 ...
spring:Spring Bean管理
Spring工厂类介绍在前面使用了Spring的ApplicationContext,并通过它的getBean方法获取Spring的配置文件applicationContext.xml,然后得到Bean的class对象。
从图中可以知道我们使用的是ApplicationContext接口,而使用的具体实现类是ClassPathXmlApplicationContext用来加载类路径下面的配置文件;注意到左边还有一个FileSystemXmlApplicationContext实现类,用于加载文件系统中的文件,言外之意就是当你的配置文件不在当前的项目工程内,此时就可以使用FileSystemXmlApplicationContext实现类去获取配置文件,接着去获取Bean对象。在老旧的Spring中使用的是BeanFactory接口,正如你所看到的ApplicationContext接口是它的子类自然功能就相对来说较为丰富。再有一点就是两者在生成Bean实例的时间是不同的。对于BeanFactory接口来说是工厂实例化结束后,在调用getBean方法的时才会去创建该类的实例;而Appl ...
spring:快速入门
Spring概述Spring是一个开源框架,Spring是为简化企业级应用开发而生的,使用Spring可以使简单的JavaBean实现以前只有EJB才能实现的功能;Spring是JavaEE/JavaSE的一站式框架。JavaEE在开发过程中会将服务器划分为三层:Web层,业务逻辑层,持久层。Spring对于这三层都提供了较为完善的解决方案:在Web层提供了SpringMVC;业务逻辑层提供了用于Bean管理的SpringIOC和事务;持久层提供了JDBC Template,或者与Mybatis等ORM框架进行整合。
优点:
接下来是Spring的模块(本文以Spring4为例进行学习介绍):
Spring Ioc实现原理下载SpringSpring官网并不直接提供Spring的下载,Spring现在托管在GitHub上,相应的下载步骤如下:你可以点击这里查看文章下载Spring,或者直接看下面的步骤:
1、进入Spring官网 -> PROJECTS -> SPRING FRAMEWORK:
2、点击GitHub的图标,进入GitHub:
3、进入Sprin ...
Mybatis:拦截器实现分页
在前面往数据库中批量插入了大量数据,那么如何将这些数据进行分页展示呢?这里就需要介绍Mybatis中的拦截器了,通过拦截器可以实现数据的分页(在数据库中物理分页方式读取数据)。 本篇主要介绍以下几点内容:1、Mybatis的四大对象、插件原理及接口;2、Mybatis的插件开发过程;3、代理模式的介绍;4、如何使用PageHelper插件来实现分页功能。
Mybatis的四大对象Mybatis对持久层的操作就是借助于四大核心对象,分别是:ParameterHandler、ResultSetHandler、StatementHandler、Executor。
其中ParameterHandler用于处理SQL的参数对象;ResultSetHandler用于处理SQL的返回结果集;StatementHandler是数据库的处理对象,用于执行SQL语句;Executor是Mybatis的执行器,用于执行增删改查操作。
MyBatis支持用插件对四大核心对象进行拦截,对MyBatis来说插件就是拦截器,用来增强核心对象的功能,增强功能本质上是借助于底层的动态代理实现的,换句话说MyBatis中 ...
Mybatis:批量插入数据
本篇来学习Mybatis如何批量插入数据,在此之前先介绍传统JDBC模式下如何进行数据的批量插入操作,因为Mybatis其本质上是封装了JDBC,因此了解JDBC模式下的数据批量插入有利于更好地理解和使用Mybatis。总的来说就三个内容:1、复习传统JDBC模式下数据的批量插入操作;2、Mybatis借助Mysql数据库对批量插入的支持;3、Mybatis基于SqlSession的ExecutorType进行批量添加。
传统JDBC模式下数据的批量插入操作传统JDBC模式下数据的批量插入操作方法有两种:1、在Java代码中使用for循环直接插入SQL数据(如execute()/executeUpdate()方法);2、借助于statement、Prestatement对象的批处理方法addBatch。
两种操作缺点:传统JDBC模式下数据的批量插入操作缺点:1、在Java代码中使用for循环直接插入SQL数据这种方式效率严重低下,需要频繁获取Session连接;2、使用批处理操作会使得代码和SQL之间过度耦合,造成代码量过大现象。
Mybatis数据批量插入方法Mybatis数据批量 ...
