mybatis-spring-springMVC-springBoot总结

mybatis-spring-springMVC-springBoot总结

介绍

第一节 mybatis
1、mybatis简介

MyBatis原本是Apache软件基金会的一个开源项目叫iBatis,2010年这个项目由Apache迁移到了google code上来管理并改名为MyBatis,2013年又迁移到了Github。

MyBatis是一个非常优秀的持久层框架(DAO层框架),它是对JDBC的封装,使得开发者只需要关注SQL语句(业务)本身即可,无需开发者处理加载驱动、获取连接、创建Statement等繁琐的操作。
MyBatis最大的特点就是把SQL语句写在XML配置文件中,而且MyBatis执行完SQL语句之后可以以对象形式返回(POJO/POJO集合等)

MyBatis是一个实现类ORM思想的持久层框架ORM(Object/Relation Mapping)对象/关系映射,对象就是指的java中的类的实例,关系指的是关系型数据库

ORM思想:将数据库中的关系数据表映射为java中的对象,把对数据表的操作转换为对对象的操作,实现面向对象编程。因此ORM的目的是使得开发人员以面向对象的思想来操作数据库。
比如:原来添加使用的是INSERT INTO…,如果使用了实现ORM思想的持久层框架,就可以在Java程序中直接调用api,比如insert(User),达到操作对象即可操作数据库的效果。

Hibernate是一个全自动的ORM持久层框架,只需要编写POJO,在XML中定义好POJO属性和数据库表字段的映射/对应关系,就可以在Java中实现以面向对象的方式进行操作。SQL语句都不用编写,但是因为性能等问题,市场占有率越来越低。

MyBatis框架是一个半自动的ORM持久层框架,也可以在Java中实现以面向对象的方式操作数据库,但是需要我们自己编写SQL语句,MyBatis是目前比较流行的DAO中持久层的框架技术。

2、mybatis使用基本步骤

在这里插入图片描述

第二节 spring
0、Spring中的事务控制
0.1 事务简介
  • Spring的事务控制都是基于AOP的,它既可以使用编程的方式实现,也可以使用配置的方式实现
  • Spring框架为我们提供了一组事务控制的接口,spring-tx.jar
  • JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计业务层事务处理的解决方
0.2 Spring中事务控制API介绍
  • PlatformTransactionManager
    此接口是Spring的事务管理器,它里面提供了我们常用的操作事务的方法,如下:

    • 获取事务状态信息:
      TransactionStatus getTransaction(@Nullable TransactionDefinition var1) throws
      TransactionException;
    • 提交事务:
      void commit(TransactionStatus var1) throws TransactionException;
    • 回滚事务:
      void rollback(TransactionStatus var1) throws TransactionException;
  • TransactionDefinition它是事务的定义信息对象,里面包含如下方法:

    • 取事务对象名称:
      String getName();
    • 获取事务的隔离级别:
      int getIsolationLevel();
    • 获取事务的传播行为:
      int getPropagationBehavior();
    • 获取事务超时时间:
      int getTimeout();
    • 获取事务是否只读:
      boolean isReadOnly();
      等等
0.3 Spring事务配置相关标签及属性

在这里插入图片描述

1、spring简介(IOC+AOP)

Spring是分层的JavaSE/EE应用的轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层(Web层)SpringMVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合开源世界中众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架。

老的框架组合:

​ Struts2+Spring+Hibernate(SSH)

​ SpringMVC+Spring+MyBaits(SSM)

新的框架组合:

​ Spring+SpringBoot+MyBatis(新SSM)

2、spring优势
  • 1.方便解耦,简化开发

通过Spring提供的IOC容器,可以将对象的依赖关系交由Spring进行控制,避免硬编码所造成的程序过度耦合。用户也不必再为单例模式、属性文件的解析等这些底层的需求编写代码,可以更加专注于上层的业务。

  • 2.AOP编程的支持

通过Spring的AOP功能,方便进行面向切面编程,许多不容易用OOP实现的功能可以通过AOP轻松实现。

  • 3.方便程序的测试

可以使用非容器依赖的编程方式进行几乎所有的测试工作

  • 4.方便集成各种优秀的框架

Spring可以降低各种框架的使用难度,提供了对各种框架的支持

-5. 降低Java API的使用难度

Spring 对JavaEE API进行了封装,例如:JDBC、JavaMail

  • 6.Spring源码是经典的学习范例

Spring源码设计精妙、结构清晰、匠心独用等处处体现大师对Java设计模式的灵活运用及Java技术的高深造诣。它的源代码是Java技术最佳实践的范例。

3、控制反转 IOC—Inverse Of Control
3.1.内聚和耦合
  • 耦合性(Couping),也叫耦合度,它是对模块之间关联程度的度量在软件工程中,耦合指的就是对象之间的依赖关系。对象之间的耦合越高,则表明模块的独立性和可重用性越差,且维护成本越高。因此,对象的设计应使类和构件之间的耦合最小。软件设计中通用用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个标准就是高内聚低耦合。

  • 内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应恰好做一件事,它描述的是模块内的功能联系。
    耦合是软件结构中各个模块之间相互连接的一种度量,耦合强弱取决于模块之间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据的复杂度。程序讲究的低耦合,高内聚。就是同一个模块内的各个元素之间要高度紧密,但是各个模块之间的相互依赖度却不要那么紧密。

程序的耦合:就是程序之间的依赖关系
包括:
类之间的依赖
方法之间的依赖
解耦:
降低程序之间的依赖关系
实际开发中:
应该做到:编译期不依赖,运行时才依赖
解耦思路:
第一步:使用反射来创建对象,而避免使用new关键字
第二步:通过读取配置文件来获取要创建的对象全限定类名

3.2. IOC概述

IOC(Inverse Of Control)中文的解释是”控制反转“,对象的使用者不是创建者,作用是将对象的创建反转给Spring框架来创建和管理。

控制反转怎么去理解呢?其实它反转的是什么呢?反转的是对象的创建工作。举个例子:平常我们在Servlet或者service里面创建对象,都是使用new的方式来直接创建对象,现在有了spring之后,我们就再也不new对象了,而是把对象创建的工作交给spring容器去维护,我们只需要向spring容器要对象即可。

IOC的作用:消减计算机程序的耦合(降低代码中的依赖关系)

4、依赖注入(DI)

依赖注入(DI):Dependency Injection。就是让Spring框架给Bean对象的属性进行赋值,它是Spring框架核心IOC的具体体现。

  • 我们在编写程序时,通过控制反转,把对象的创建交给了Spring,但是代码中不可能出现没有依赖的情况,IOC解耦只是降低它们的依赖关系,但是不会消除。
  • 简单的来说,依赖注入(DI)就是坐等框架把所有需要的对象传过来,而不要我们自己去获取。
4.1. 构造方法注入

使用构造方法的方式,给POJO中的属性传值

要求:POJO需要提供一个有参数的构造方法

<!--DI:依赖注入 通过构造方法实现-->
    <bean id="account" class="com.wojia.domain.Account">
        <!--
            constructor-arg标签:通过构造方法注入值
            属性:
                index:指定参数在构造方法参数列表中的索引位置
                ref:引用其它bean对象,作为当前属性的值,指定所引用bean的id属性即可
                type:指定参数在构造方法中的数据类型
                name:指定参数在构造方法中的名称,用这个name属性值和构造方法中的参数名进行匹配
                value:给参数赋值,它能赋值基本数据类型的值也可以是引用类型或者String
        -->
            <!--通过参数索引赋值-->
<!--        <constructor-arg index="0" type="java.lang.Integer" value="1001"/>-->
<!--        <constructor-arg index="1" type="java.lang.String" value="zhangsan"/>-->
<!--        <constructor-arg index="2" type="double" value="7777.0"/>-->
<!--        <constructor-arg index="3" type="java.util.Date" ref="date"/>-->
            <!--通过参数名赋值-->
<!--
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值