SSM小结(新手总结)

第1章 初始MyBatis
1.1 框架技术
1.1.1 框架的概念
框架是一个提供了可重用的公共结构的半成品。
1.1.2 主流框架的介绍
1.Struts 2框架
Struts 2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的基于MVC设计模式实现的Web应用程序框架。它引入了几个新的框架特性,从逻辑中分离出横切关注点的拦截器,减少或者消除配置文件,贯穿整个框架的强大表达式语言,支持可变更和可重用的基于MVC模式的标签API等。Struts 2充分利用了从其他MVC框架学到的经验和教训,使整个框架更加清晰、更加灵活。
2.Hibernate框架
Hibernate是一个优秀的持久化框架,负责简化将对象数据保存到数据库中,或从数据库中读取数据并封装到对象的工作。Hibernate通过简单配置和编码即可替代JDBC烦琐的程序代码。
3.Spring框架
Spring也是一个开源框架。它的目标是实现有的JavaEE技术更容易使用和促进良好的编程习惯。它是一个轻量级的框架,渗透了JavaEE技术的方方面面。它主要作为依赖注入容器和AOP实现存在,还提供了声明式事务,对DAO层的支持等简化开发的功能。Spring还可以很方便地与SpringMVC、Struts2、MyBatis、Hibernate等框架集成,其中大名鼎鼎的SSM集成框架指的就是基于SpringMVC+Spring+MyBatis的技术框架,使用这个集成框架将使我们的应用程序更加健壮、稳固、轻巧和优雅,这也是当前最流行的Java技术框架。
4.SpringMVC框架
SpringMVC是Spring框架提供的构建Web应用程序的全给你MVC模块,属于SpringFramework的后续产品,已经融合在Spring Web Flow里面,是结构最清晰的MVC Model2的实现。并且拥有高度的可配置性,支持多种视图技术。还可以进行定制化开发,相当灵活。此外,Spring整合SpringMVC可以说是无缝集成,是一个高性能的架构模式。
5.MyBatis框架
MyBatis是一个优秀的数据持久化层框架,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。其封装性要低于Hibernate,性能优秀,并且小巧、简单易学,现在应用也越来越广泛。

1.2 MyBatis介绍及其环境
1.2.1 数据持久化概念
数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型换为内存中的数据模型的统称。
1.2.2 MyBatis框架及ORM
1.MyBatis框架简介
MyBatis是一个开源的数据持久层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。
2.什么是ORM
3.ORM(Object/Relational Mapping)即对象/关系映射,是一种数据持久化技术。它在对象模型和关系型数据库之间建立对应关系,并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据。
4.MyBatis是ORM解决方案
基于ORM、MyBatis在对象模型和关系数据库的表之间建立了一座桥梁,通过MyBatis建立SQL关系映射,以便捷地实现数据存储、查询、更改和删除操作。
1.2.3 MyBatis环境搭建
1.下载jar包
2.部署jar包
3.编写MySatis核心配置文件
4.创建实体类
5.创建DAO接口
6.创建SQL映射文件
7.编写测试类

1.3 MyBatis的基本要素——核心对象
1.3.1
第2章 SQL映射文件
2.1 使用MyBatis实现条件查询
2.1.1 SQL映射文件
Mapper:映射文件的根元素节点,只有一个属性namespace,
用于区分不同的mapper,全局唯一
绑定DAO接口,即面向接口编程。
Cache:配置给定命名空间的缓存。
Cache-ref;从其他命名空间引用缓存配置
ResultMap:用来描述数据库结果集和对象的对应关系
Sql:可以重用的SQL块,也可以被其他语句引用。
Insert:映射插入语句。
Update:映射更新语句。
Delete:映射删除语句
Select:映射查询语句
2.2 使用MyBatis实现增删改操作
2.2.1 使用insert完成增加操作
Insert元素的属性:
Id:与select元素的id一样,是命名空间中唯一的标识符,可以被用来引用这条语句。
ParameterType:与select元素的parameterType一样,是传入参数的类型的完全限定名或别名。别名的含义和用法见select元素中的解释。
对于增删改这类数据库更新操作,需要注意两点:
1、该类型的操作本身默认返回执行SQL影响的行数,所以DAO层的接口方法的返回值一般设置为int类型。最好不要返回boolean类型。
2、insert、update、delete元素中均没有resultType属性,只有查询操作需要返回结果类型进行相应的指定。
2.2.2 使用@param注解实现多参数入参
使用注解@param来传入多个参数,如@param(“userpwd”)String pwd,相当于将改参数pwd重命名为userpwd,在映射的SQL中需要使用#{注解名称},如#{userpwd}。

2.3 使用resultMap实现高级结果映射
2.3.1 resultMap的基本配置项
1.属性
Id:resultMap的唯一标识。
Type:表示该resultMap的映射结果类型。
2.子节点
Id:一般对应数据库中改行的主键id,设置此项可以提升MyBatis性能。
Result:映射到JavaBean的某个“简单类型”属性,如基础数据类型,包装类等。
子节点id和result均可实现最基本的结果集映射,将列映射到简单数据类型的属性。这两者唯一不同的是:在比较对象实例时id将作为结果集的标识属性。这有助于提高总体性能,特别是应用缓存和嵌套结果映射的时候。而若要实现高级结果映射,就需要学习下面两个配置项:association和collection。

2.3.2 association
Association:映射到JavaBean的某个复杂类型属性,比如JavaBean类。即JavaBean内部嵌套一个复杂数据类型属性,这种情况就属于复杂类型的关联。但是需要注意:association仅处理一对一的关联关系。
2.3.3 collection
Collection元素的作用和association元素的作用差不多一样。事实上,他们非常类似,也是映射到JavaBean的某个复杂类型属性,只不过这个属性是一个集合列表,即JavaBean内部嵌套一个复杂数据类型属性。和使用association元素一样,我们使用嵌套查询,或者从连接中嵌套结果集。

第3章 动态SQL
3.1 使用动态SQL完成多条件查询
动态SQL是MyBatis的一个强大的特性。在使用JDBC操作数据时,如果查询条件特别多,将条件串联成SQL字符串是一件痛苦的事情,通常的解决方法是写很多的if-else条件语句对字符串进行拼接,并确保不能忘了空格或在字段的最后省略逗号。MyBatis使用一种强大的动态SQL语言来改善这种情况。动态SQL基于OGNL的表达式,可使我们方便地在SQL语句中实现某些逻辑。用于实现动态SQL的元素如下。
If:利用if实现简单的条件选择。
Choose(when,otherwise):相当于Java中的switch语句,通常与when和otherwise搭配。
Where:简化SQL语句中where的条件判断。
Set:解决动态更新语句。
Trim:可以灵活地去除多余的关键字。
Foreach:迭代一个集合,通常用于in条件。
3.1.1 使用if+where实现多条件查询
3.1.2 使用if+trim实现多条件查询
在MyBatis中除了使用if+where实现多条件查询,还有一个更为灵活的元素trim可以替代之前的做法。
Trim元素也会自动识别其标签内是否有返回值,若有返回值,会在自己包含的内容前加上某些前缀,也可在其后加上某些后缀,与之对应的属性是prefix和suffix;也可把包含内容的首部某些内容覆盖,或者把尾部的某些内容覆盖,与之对应的属性是prefixOerrides和suffixOverrides;正因为trim有这样强大的功能,我们可以利用trim来替代where元素,并实现与where元素相同的效果。
Prefix:前缀,作用是通过自动识别是否有返回值后,在trim包含的内容上加上前缀,如此处的where。
Suffix:后缀,作用是在trim包含的内容上加上后缀。
PrefixOverrides:对于trim包含内容的首部进行指定内容的忽略。
SuffixOverrides:对于trim包含内容的首尾部进行指定内容的忽略。
3.2 使用动态SQL实现更新操作
3.2.1 使用if+set改造更新操作
3.2.2 使用if+trim改造修改操作
在实际项目中,用户的操作行为多种多样,比如说当用户进入修改界面而不进行任何数据的修改,但是同样单击了“保存”按钮,那么是不是就不需要进行字段的更新操作?答案是否定的,这是由于但凡用户单击了“修改”按钮,进入修改页面,我们就认为用户有进行修改操作的行为,无论他是否进行字段信息的修改,系统设计都需要进行全部字段的更新操作。当然,实际上还有一种用户操作,即:用户清空了某些字段信息,按照我们之前的讲解,根据if标签的判断,程序不会进行相应的更新操作,这显然也是跟用户的实际需求相悖的。那么实际项目到底如何操作呢?一般设计DAO层的更新 操作,update的set中不会出现if标签,即无论用户是否全部修改,我们都要更新所有字段信息。
3.3 使用foreach完成复杂查询
3.3.1 MyBatis入参为数组类型的foreach迭代
Foreach主要用在构建in条件中,它可以在SQL语句中迭代一个集合。它的属性主要有:item、index、collection、separator、close、open。
Item:表示集合中每一个元素进行迭代时的别名。
Index:指定一个名称,用于表示在迭代过程中,每次迭代到的位置。
Open:表示该语句以什么开始。
Separator:表示在每次进行迭代之间以什么符号作为分隔符。
Close:表示该语句以什么结束。
Collection:最关键并最容易出错的属性,需格外注意,该属性必须指定,不同情况下,该属性的值是不一样的。
主要有三种情况:
若入参为单参数且参数类型是一个list的时候,collection属性值为list。
若入参为单参数且参数类型是一个数组的时候,collection属性值为array。
若传入参数为多参数,就需要把它们封装为一个map进行处理。
小结:
(1)MyBatis接收的参数类型:基本类型、对象、List、数组、Map。
(2)无论MyBatis的入参是那种参数类型,MyBatis都会将参数放在一个Map中,对于单参入参的情况:
若入参为基本类型:变量名作为key,变量值为value,此时生成的Map只有一个元素。
若入参为对象:对象的属性名作为key,属性值为value。
若入参为list:默认“list”作为key,该list即为value。
若入参为数组:默认“array”作为key,该数组即为value。
若入参为Map:键值不变。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值