Spring的AOP模块是Spring框架体系中十分重要的内容,该模块一般适用于具有横切逻辑的场景,如访问控制、事务管理和性能监控等,本章将对Spring AOP的相关知识进行详细讲解。
一 Spring AOP介绍
1.1 AOP概述
AOP的全称是Aspect Oriented Programming,即面向切面编程。和OOP不同,AOP主张将程序中相同的业务逻辑进行横向隔离,并将重复的业务逻辑抽取到一个独立的模块中,以达到提高程序可重用性和开发效率的目的。
在传统的业务处理代码中,通常都会进行事务处理、日志记录等操作。虽然使用OOP可以通过组合或者继承的方式来达到代码的重用,但如果要实现某个功能(如日志记录),同样的代码仍然会分散到各个方法中。
例如,订单系统中有添加订单信息、更新订单信息和删除订单信息3个方法,这3个方法中都包含事务管理业务代码,订单系统的逻辑如图所示。
AOP面向切面编程的优势
由订单系统可知,添加订单信息、修改订单信息、删除订单信息的方法体中都包含事务管理的业务逻辑,这就带来了一定数量的重复代码并使程序的维护成本增加。基于AOP的面向切 ...
数据库用于处理持久化业务产生的数据,应用程序在运行过程中经常要操作数据库。一般情况下,数据库的操作由持久层来实现。作为扩展性较强的一站式开发框架,Spring也提供了持久层Spring JDBC功能,Spring JDBC可以管理数据库连接资源,简化传统JDBC的操作,进而提升程序数据库操作的效率。本章将对Spring JDBC相关知识进行详细讲解。
一 Spring JDBC
1.1 JDBC Template概述
1.1.1 JDBCTemplate作用
针对数据库操作,Spring框架提供了JdbcTemplate类,JdbcTemplate是一个模板类,Spring JDBC中的更高层次的抽象类均在JdbcTemplate模板类的基础上创建。
JdbcTemplate类提供了操作数据库的基本方法,包括添加、删除、查询和更新。在操作数据库时,JdbcTemplate类简化了传统JDBC中的复杂步骤,这可以让开发人员将更多精力投入到业务逻辑中
1.1.2 抽象类JdbcAccessor的属性
JdbcTemplate类继承自抽象类JdbcAccessor,同时实现了Jdb ...
一 Spring IoC容器
1.1 BeanFactory接口
常用方法
方法名称
描述
getBean(String name)
根据参数名称获取Bean
getBean(String name,Class<T> type)
根据参数名称、参数类型获取Bean
<T>T getBean(Class<T> requiredType)
根据参数类型获取Bean
Object getBean(String name,Object… args)
根据参数名称获取Bean
isTypeMatch (String name,Resolvable Typetype)
判断是否有与参数名称、参数类型匹配的Bean
Class <?>getType(String name)
根据参数名称获取类型
String[] getAliases(String name)
根据实例的名字获取实例的别名数组
boolean containsBean(String name)
根据Bean的名称判断Spring容器是否含 ...
一 Spring 介绍
1.1 概述
Spring 框架的核心技术
Spring 是由 Rod Johnson 组织和开发的一个分层的 Java SE/EE 一站式(full-stack)轻量级开源框架。它最为核心的理念是 IoC(控制反转)和 AOP(面向切面编程),其中,IoC 是 Spring 的基础,它支撑着 Spring 对 JavaBean 的管理功能;AOP 是 Spring 的重要特性,AOP 是通过预编译方式和运行期间动态代理实现程序功能,也就是说可以在不修改源代码的情况下,给程序统一添加功能。
在表现层、业务逻辑层和持久层的作用
在表现层它提供了 Spring MVC 框架,并且 Spring 还可以与 Struts 框架整合。
在业务逻辑层可以管理事务、记录日志等。
在持久层可以整合 MyBatis、Hibernate、JdbcTemplate 等技术。
1.2 Spring 框架的优点
Spring 作为 Java EE 的一个全方位应用程序框架,为开发企业级应用提供了一个健壮、高效的解决方案。它不仅可以应用于 Java 应用的开 ...
一 前言
前面的章节介绍了MyBatis的基本用法、关联映射、动态SQL和缓存机制等知识,所有的配置都是基于XML文件完成的,但在实际开发中,大量的XML配置文件的编写是非常繁琐的,为此,MyBatis提供了更加简便的基于注解的配置方式。本章将对MyBatis的注解开发进行详细讲解。
本章节较为简单,对应代码在文章末尾查看。
二 基于注解的单表增删改查
2.1 CUDR
注解
用途
@Select
查
@Insert
增
@Update
改
@Delete
删
2.2 @Param注解
@Param注解用于处理参数
三 基于注解的关联查询
<mappers>元素引入XML文件顺序
由于mybatis-config.xml文件中的扫描方式是从上往下扫描,所以<mappers>元素下引入IdCardMapper和PersonMapper接口的位置,必须在引入IdCardMapper.xml和PersonMapper.xml文件位置前面,否则程序将会首先读取到引入的IdCardMapper.xml和PersonMapper.xml文件 ...
一 关联映射
1.1 关联映射关系
在关系型数据库中,表与表之间存在着三种关联映射关系,分别为一对一关系、一对多关系和多对多关系。
一对一关系 一个数据表中的一条记录最多可以和另一个数据表中的一条记录相关
一对多关系 主键数据表中的一条记录可以和另外一个数据表的多条记录相关。但另外一个数据表中的记录只能与主键数据表中的某一条记录相关。
多对多关系 一个数据表中的一条记录可以与另外一个数据表任意数量的记录相关,另外一个数据表中的一条记录也可以与本数据表中任意数量的记录相关。
1.2 Java对象如何描述事物之间的关系
数据表之间的关系实质上描述的是数据之间的关系,除了数据表,在Java中,还可以通过对象来描述数据之间的关系。通过Java对象描述数据之间的关系,其实就是使对象的属性与另一个对象的属性相互关联,Java对象描述数据之间的关联映射关系有三种,分别是一对一、一对多和多对多。
一对一 在本类中定义与之关联的类的对象作为属性。
一对多 一个A类对象对应多个B类对象的情况。
多对多 在两个相互关联的类中,都可以定义多个与之关联的类的对象。
二 一对一查询 ...
一 前言
在上一章节,主要讲了Mybites中对数据库基本的CRUD,那么,本章节将重点介绍动态SQL的用法。
动态SQL是MyBatis的强大特性之一,MyBatis采用了功能强大的基于OGNL(Object Graph Navigation Language)的表达式来完成动态SQL。在MyBatis的映射文件中,开发人员可通过动态SQL元素灵活组装SQL语句,这在很大程度上避免了单一SQL语句的反复堆砌,提高了SQL语句的复用性。
动态SQL主要用到以下几个元素:
元素
说明
<if>
判断语句,用于单条件判断
<choose>(<when>、<otherwise>)
相当于Java中的switch…case…default语句,用于多条件判断
<where>
简化SQL语句中where的条件判断
<trim>
可以灵活地去除多余的关键字
<set>
用于SQL语句的动态更新
<foreach>
循环语句,常用于in语句等列举条件中
二 条件查询 ...
一 核心对象
SqlSessionFactoryBuilder
SqlSessionFactoryBuilder包含以上方法,常用的有
build(InputStream inputStream,String environment,Properties properties)
build(Reader reader,String environment,Properties properties)
build(Configuration config)
这三个 build 方法用于构建配置对象,区别在于传入的参数类型不同。build(InputStream inputStream, String environment, Properties properties) 通过输入流 InputStream 读取配置文件,适合处理二进制或非文本数据;build(Reader reader, String environment, Properties properties) 则使用 Reader 读取字符流,适合文本配置文件。两者都要求传入 environment(环境名 ...
一 创建工程
1.1 依赖项的配置
使用idea创建一个空的Maven工程,可以按照如下示例创建
/pom.xml
在 <dependencies>节点下中添加如下依赖项,然后更新Maven依赖
12345678910111213141516171819202122232425<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version></dependency><!--mybatis--><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version>&l ...
[TOC]
一 前言
最近可能会进行Android软件开发,由于之前并未系统的学习过Android开发,在本次选择技术实现时,特意选择了跨平台能力强的技术线路,在NativeVue,uniapp,Vue+套壳等等方案中,最终选择了Flutter.主要理由如下
跨平台能力强,真正的全平台支持(Windows/Linux/IOS/Android/Web)
保证的性能,和Vue、uniapp等方案不同,Flutter最终会将Dart代码编译为对应平台的机器码,性能几乎与原生开发一致
界面一致性,Flutter使用自己的 Skia 渲染引擎进行渲染,保证界面一致性
但Flutter仍然有一些不足之处,例如页面布局和业务逻辑写在同一文件,当代码量足够大时,将会显得杂乱,使用类似Qt的用代码构建界面的方式,不能直观的理解界面布局
但是,使用Flutter一定是利大于弊的!
二 安装
2.1 安装DartSDK
在接下来安装的FlutterSDK中包含DartSDK(位于 Flutter SDK 的 bin/cache/dart-sdk/目录下),因此此步骤不是必须的
如果你不单独 ...