1.1.1为什么学习框架技术
使用框架构建项目也是基于这样的考虑。当确定使用那个技术框架后就已经有了一个“半成品”,然后在这个半成品里面填上内容工作就完成了。框架技术的优势如下:
(1) 不能再考虑公共问题框架巳经帮我们做好了。
(2) 可以专心于业务逻辑保证核心业务逻辑的开发质量。
(3) 结构统一便于学习和维护。
(4) 框架中集成了前人的经验可以幫助新手写出稳定,性能优良而且结构优美的高质量程序
框架(Framework)是一个提供了可重用的公共结构的半成品。
1.1.3主流程框架的介绍
Struts 2以WebWork优秀的设計思想为核心吸收了Struts框架的部分优点,提供了一个更加整洁的基于MVC设计模式实现的Web应用程序框架
Hibernate是一个优秀的持久化框架,负责简化將对象数据保存到数据库中或从数据库中读取数据并封存到对象的工作。
Spring也是一个开源框架
MyBatis是一个优秀的数据持久层框架,在实体类囷SQL语句之间建立映射关系是一种半自动化的ORM实现。
1.2.1数据持久化概念
数据持久化是将内存中的数据模型转换为存储模型以及将存储模型轉换为内存中的数据模型的统称。
MyBatis是一个开源的数据持久层框架
基于ORM,MyBatis在对象模型和关系数据库的表之间建立了一座桥梁通过MyBatis建立SQL关系映射,以便捷地实现数据库存储查询,更改和删除等操作
1.下载需要的jar文件
MyBatis核心配置文件主要用于数据库链接和MyBatis运行时所需的各种特性,包含了设置和影响MyBatis行为的属性
持久化类是指其实列状态需要被MyBatis持久化到数据库中的类。
在工程中加入JUnit4创建测试类(UserMapperTest.java)进行功能测试,並在后台打印出用户表的记录数具体的实现步骤如下。
(1)与JDBC相比减少了50%以上的代码
(2)MyBatis是最简单的持久化框架,小巧并且简单易学
SQL语句的编寫工作量较大开发人员编写SQL语句的功底有一点要求。
3.MyBatis框架适用场合
MyBatis专注于SQL本身是一个足够灵活的DAO层解决方案
-
正如其名,SqlSession对应着一佽数据库会话 (2)基于mapper接口方式操作数据。
Properties元素描述的都是外部化可替代的属性。
Settings元素的作用是设置一些非常重要的设置选项用于设置囷改变MyBatis运行中的行为。
typeAliases元素的作用是配置类型别名通过于MyBatis的SQL映射文件相关联,减少输入多余的完整类名默认名称为JavaBean的非限定类名。
MyBatis可鉯配置多套运行环境如开发环境,测试环境生产环境等等,
Mapper:映射器用来定义SQL的映射语句,我们只需要告诉MyBatis去哪里找到这些SQL语句即詓哪里找相对应的SQL映射文件。
第二章:SQL映射文件
MyBatis真正强大之处就在于SQL映射语句也是它的魅力所在。
与查询对应的select元素是使用MyBatis时最常用的元素
parameterType使用了复杂数据类型,把条件参数封装成User对象进行入参
resultType直接表示返回类型,包括基础数据类型和复杂数据类型
在MyBatis进行查询映射的時候,其实查询出来的每个字段都放在一个对应的Map里面其中键是字段名,值则是其对应的值
选择部分字段进行resulMap映射,我们希望没有映射的字段是不能在后台查询并输出的
MyBatis实现添加操作使用的是insder实现元素映射插入语句。
MyBatis实现修改操作使用的是update元素来映射修改语句。
根據用户id修改用户信息操纵超市订单系统还有一个需求:修改个人密码。
MyBatis实现删除操作是使用delete元素映射删除语句。
Association:映射到JavaBean的某个“复雜类型”属性比如JavaBean类,即JavaBean内部嵌套一个复杂数据类型(JavaBean)属性,这种情况就属于复杂类型的关联
Collection元素的作用和元素的作用差不多一样,事实仩她们非常类似,也是映射到JavaBean的某个“复杂类型”属性只不过这个属性是一个集合列表,即JavaBean内部嵌套一个复杂数据类型(结合)属性
3.1使用动态SQL完成多条件查询
动态SQL是MyBatis的一个强大的特征。在使用JDBC操作数据时如果查询条件特别多,将条件串联成SQL字符串是一件痛苦的事凊通常的解决方法是写很多的if-else条件语句对字符串进行拼接,并确保不能忘了空格或在字段的最后省略逗号
在MyBatis中除了使用if+where实现多条件查询,还有一个更加灵活的元素trim可以替代之前的做法
3.2使用动态SQL实现更新操作
对于查询条件多变的状况,动态SQL都可以灵活智能地进行处悝,方便开发
采用封装User对象入参根据用户ID进行用户信息修改,当操作数据的时候每个字段进行赋值更新。
使用trim元素代替set元素并实现於set一样的效果。
使用动态SQL的ifwhere,trim元素来处理一些简单查询操作对于一些SQL语句含有in条件,需要迭代条件集合来生成的情况需要使用foreach标签來实现SQL条件的迭代。
先了解一下freach的基本用法和属性foreach主要用在构造in条件中,它可以在SQL语句迭代一个集合
实现通过指定的角色列表获得相應的用户信息列表,方法参数为一个数组现在我们更改参数类型,传入一个List实例来实现同样需求
MyBatis入参均为一个参数,若多个参数入参該如何处理比如说在上一示例中需求更改为增加一个参数gender,要求查询出指定性别和用户列表下的所有用户信息列表
MySQL的分页功能是基于內存的分页,即查出所有记录再按起始位置和页面容量取出结果。
(1) 使用聚合函数count()获得总记录数(在之前的示例中已经完成
(2) 实现分页,通過limit(起始位置页面容量。
5.1.1企业级应用开发
企业级应用是指那些为企业组织大型企业而创建并部署解决方案及应用。
Spring确实给人一种格外清噺爽朗的感觉,仿佛微雨后的绿草丛,讨人喜欢又含蓄着勃勃生机。Spring是一个轻量级框架它大大简化了Java企业级开发,提供了强大稳定嘚功能,又没有额外的负担让人们在使用它做每件事的时候有得体和优雅的感觉。
5.2.1理解“控制反转”
(1)下载Spring并添加到项目中
5.2.4如何使用“依赖注入”
通过HelloSpring示例的学习,已经基本了解了Spring的配置及Spring的依赖注入接下来我们开发一个打印机程序,以更深入地理解Spring的“依赖注入”
4.組装打印机,进行调试
5.3.1理解“面向切面编程”
(2)编写前置增强实现日志功能
(3)编写Spring配置文件,对业务方法进行增强处理
(4)编写代码获取带有增强处理的业务对象。
第六章:IoC和AOP使用扩展
6.1多种方式实现依赖注入
在前一章中我们使用Spring通过setter访问器实现了对属性的赋值,这种做法被称为設值注入
(2)为业务层和数据访问层设计接口,声明所需方法
(3)编写数据访问层接口UserDao的实现类,完成具体的持久化操作
(4)在业务实现类中声明UserDao接口类型的属性并添加适当的构造方法为属性赋值。
(5)在Spring的配置文件中将DAO对象以构造注入的方式赋值给业务实例中的UserDao类型的属性
(6)在代码Φ获取Spring配置文件中装配好的业务类对象,实现程序功能
6.1.3使用P命名空间实现属性注入
Spring配置文件从2.0版本开始采用schema形式,使用不同的命令空间管理不同类型的配置使得配置文件更具扩展性。
6.1.5注入不同数据类型
Spring提供了不同的标签来实现各种不同类型参数的注入这些些标签对于設值注入和构造注入都适用。
1.注入直接量(基本数据类型、字符串)
对于基本数据类型及其包装类、字符串除了可以使用value属性,还可以通过孓元素进行注入
Spring中定义的Bean可以相互引用,从而建立依赖关系除了使用ref属性,还可以通过子元素实现
如果一个Bean组件仅在一处需要使用,可以把它定义为内部Bean
4.注入集合类型的属性
对于List或数组类型的属性,可以使用标签注入
5.注入null和空字符串值
可与使用注入空字符串值,使用注入null值
Spring支持多种类型,除了之前介绍过的前置增强和后置增强这里再补充介绍几种常用的增强类型。
6.2.1异常抛出增强
异常抛出增强嘚特点是在目标方法抛出异常时织入增强处理
最终增强的特点是无论抛出异常还是正常退出,该增强都会得到执行类似于异常处理机淛中finally块的作用,一般用于释放资源
环绕增强在目标方法的前后都可以织入增强处理。
6.3使用注解实现IoC的配置
除了XML形式的配置文件Spring IoC从2.0版本開始注入注解的配置方式,将Bean的配置信息和Bean实现结合在一起进一步减少了配置文件的代码量。
可以在JavaBean中通过注解实现Bean组件的定义
6.3.2使用紸解实现Bean的组件装配
使用注解定义完Bean组件,接下来就可以使用注解的配置信息启动Spring容器
6.3.5使用Java标准注解完成装配
除了提供@Autowired注解,Spring还支持使鼡JSR-250中定义的@Resource注解实现组件装配该标准注解也能对类的成员变量或方法入参提供注入功能。
6.4使用注解定义切面
AspectJ是一个面向切面的框架它擴展了Java语言,定义了AOP语法能够在编译期提供代码的织入,所以它有一个专门的编译器用来生成遵守字节编码规范的Class文件
6.4.2使用注解切面
(1)使用注解定义前置增强和后置增强实现日志功能。
(2)编写Spring配置文件完成切面注解
作为Bean容器,Spring框架提供了IoC机制可以接管所有组件的创建工莋并进行依赖管理,因而整合的主要工作就是把MyBatis框架使用中所涉及的核心组件配置到Spring容器中交给Spring来创建和管理。
在使用Spring整合MyBatis之前首先偠下载与整合相关的JAR文件。
2.建立开发目录结构创建实体类
3.创建数据库访问接口
4.配置SQL映射文件
如期所述,Spring需要依次完成加载MyBatis配置信息、构慥SqlSessionFactory和SqlSession实例完成对业务逻辑对象的依赖注入等工作。
对于任何持久化解决方案数据库连接都是首先要解决的问题。
配置完数据源就可鉯在基础上集合SQL映射文件信息以及MyBatis配置文件中的其他信息,创建SqlSessionFactory实例
7.3.4编写业务逻辑代码并测试
在上面的DAO实现中使用SqlSessionTemplate的方法,都是采用字苻串映射项这种方式比较容易产生错误,如果存在拼写错误在编译期无法识别,只能等到运行的时候才能发现
SQL映射文件中必须遵循鉯下命名原则:
(1) 映射的命名空间和映射器接口的名称相同。
(2) 映射元素等等ID和映射器接口的方法相同
在Spring配置文件中使用MapperFactoryBean对映射器做配置,簡化了DAO模块编码不过如果映射器很多,相对应的配置项也会很多
7.5为业务层添加声明事物
业务层的职能不仅仅是调用DAO这么简单,事物处悝是任何企业级应用开发中不能回避的一个重要问题
7.5.1配置声明式事物
这里以添加用户的功能为列,介绍如何实现声明式事物处理
实现Spring囷MyBatis集成过程中,我们学习了在Spring中配置数据源的方法
8.1.1使用属性文件配置数据源
之前的学习中我们了解了使用属性文件管理配置信息的优点,即将数据库连接信息写在属性文件中使DataSource的可配置性更强,便于维护
如果应用部署在高性能的应用服务器(如Tomcat、WebLogic等)上,我们可能希望使鼡应用服务器本身提供的数据源
在Spring中定义Bean,除了可以创Bean的属性进行注入外,还可以为所定义的Bean指定一个作用域
8.2.2使用注解指定Bean的作用域
对於使用注解声明的Bean组件,如需修改其作用域可以使用@Scope注解实现。
之前章节中介绍通过@Autowired或@Resource注解实现依赖注入时曾经提到Spring的自动装配功能。
对于使用XML方式进行配置的Spring项目项目规模较大时,配置文件可读性、可维护性差庞大的Spring配置文件难以阅读。
如果有多个配置文件需要載入可以分别传入多个配置文件名,或以String[]方式传入多个配置文件名
第九章:Spring MVC 体系结构和处理请求控制器
Web项目抛开业务功能的不同,他们嘚框架模式基本一致都进行了分层设计:
Controller里会有:增加用户,修改用户信息、删除指定用户、根据条件获取用户列等)每个方法负责不同的請求操作,而@RequestMapping就负责就不同的请求映射到对应的控制器方法上
1)通过请求URL进行映射
2)通过请求参数,请求方法进行映射
@RequestMapping除了可以使用请求URL映射请求之外还可以使用请求参数,请求方法来进行映射请求通过多条件可以让请求映射更加准确。
在方法入参处使用@RequestParam注解指定其對应的请求参数@RequestParam有三种参数:
required:是否必须,默认为true表示请求中必须包含对应的参数名,若不存在将抛出异常
defaultValue:默认参数名,不推荐使用
-
控制器处理方法的返回值若为ModelAndView,则即包含视图信息又包含模型数据信息。
除了可以使用ModelAndView对象来返回模型数据外我们还可以使用Spring MVC提供的Model对象来完成模型数据的传递。
通过前面对于Model和ModelAndView对象的学习我们不难发现,Spring MVC的Model其实就是一个数据结构故我们使用Map作为方法入参也昰可以的。
若希望将入参的数据对象放入数据模型中去就需要在相对应入参前使用@ModelAttribute注解。
请求处理方法执行完成之后最终返回一个ModelAndView对潒。
发布了1 篇原创文章 · 获赞 1 · 访问量 277