Spring使用与Mybatis整合

Spring

1.1简介

Spring:顾名思义:春天  ----》给软件带来了春天

maven

//maven库
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

1.2优点

  • Spring是一个开源的免费的框架(容器)!
  • Spring是一个轻量级、非入侵式的框架
  • 控制反转(IOC),面向切面编程(AOP)
  • 支持事务的处理,对框架整合的支持!

总结:Spring就是一个轻量级的控制反转(IOC)和面向切面变成(AOP)的框架!

1.3、 组成

在这里插入图片描述

1.4 拓展

在Spring的官网有这个介绍:现代化的Java开发!说白就是基于Spring的开发
在这里插入图片描述
SpringBoot
一个快速开发的脚手架
基于Springboot可以快速的开发单个微服务
约定大于配置
Spring Cloud
基于SpringBoot实现的

因为大多数公司都在使用SpringBoot进行快速开发,学习SpringBoot的前提是SpringMVC和Spring

弊端:发展了太久了之后,违背了原来的理念!配置十分繁琐,人称"配置地狱"

2.IOC理论推导

1.UserDao接口
2.UserDapImpl实现类
3.UserService业务接口
4.UserServiceImpl业务实现类

在之前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改源代码!如果程序代码量十分大,修改一次的成本代价十分昂贵

使用一个Set接口实现。发生了革命性的变化!

private UserDao useDao;

//利用set进行动态实现值的注入!
public void setUserDao(UserDao userDao){
	this.userDao =userDao;
}

之前,程序是主动创建对象!控制权在程序员手上
使用set注入后,程序不再具有主动性,而是变成了被动的接受对象!

这个思想,从本质上解决了问题,程序猿就不用再去管理对象的创建。
系统的耦合性大大降低,可以更加专注的在业务的实现上!这就是ioc的原型!

Ioc是Spring框架的核心内容,使用多种方式完美实现Ioc,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IOC

Spring容器在初始化时要先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从IOC容器中去除需要的对象

采用XML方式配置Bean的时候,Bean的定义信息和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。

控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IOC容器,其实现方法是依赖注入

总结:对象由Spring来创建,管理,装配!

Spring配置

  1. 别名

    设置别名一样能得到值

  2. Bean的配置



    id: bean的唯一标识符,也就是相当于我们学的对象名
    class:bean对象所对应的全限定名:包名+类型
    name:别名,name比alias高级,可以同时取多个别名
    scope:设置单例等模式

  3. import
    这个import,一般用于团队开发使用,可以讲多个配置文件导入,合并为一个

依赖注入

  1. 构造器注入

  2. set方式注入【重点】
    依赖注入:set注入
    依赖:bean对象的创建依赖于容器
    注入:bean对象中的所有属性,由容器来注入!

环境搭建:
1、复杂类型
2、真是测试对象

  1. 拓展方式注入
    使用p命名 (properties)和使用c命名(construct-org)

注意:p命名和c命名空间不能直接使用,需要导入xml约束
xmlns:p=“http://www.springframework.org/schema/p”
xmlns:c=“http://www.springframework.org/schema/c”

Bean的作用域

Scopes:
singleton:单例(Spring默认机制)

prototype:原型

在这里插入图片描述
每次从容器中get的时候,都会产生一个新对象!

3. request、session、application、websocket这个只能在web开发中使用

Bean的自动装配

~自动装配是Spring满足bean依赖的一种方式
~Spring会在上下文中自动寻找。并自动装配属性!

~在Spring中有三种装配的方式
1.在xml中显示的配置
2、在java中显示配置
3.隐式的自动装配

byname:会自动在容器中查找,和自己对象set方法后面的值对应的beanid!(名字对应)
byType:会自动在容器中查找,和自己对象属性类型相同的bean!(保证类型全局唯一)

小结:
byname的时候,需要保证所有的beanid唯一,并且这个bean需要和自动注入的属性的set方法的值一致
bytype的时候,需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型一致!

注解实现自动装配

jdk1.5支持,Spring2.5支持注解

要使用注解须知:
1.导入约束 context约束
2.配置注解的支持:
xmlns:context=“http://www.springframework.org/schema/context”
context:annotation-config/ //开启注解支持

@Autowired
直接在属性上使用即可!也可以在set方式上使用!
使用Autowired我们可以不用编写Set方法,前提是这个自动装配的属性在IOC(Spring)容器中存在,且符合名字byname
@Autowired(required="")//如果显示了定义了autowired的required属性为false,说明这个对象可以为null,否则不许为空
@Nullable  字段标记了这个注解,说明这个字段可以为null

如果@Autowired自动装配的环境比较负责,自动装配无法通过一个注解@Autowired完成的时候,我们可以@Qualifier(value=“xxx”)去配置@Autowired的是使用,指定一个唯一的bean对象注入!

小结:
@Resource和@Autowired的区别:
都是用来自动装配的,都可以放在属性字段上
@Autowired通过byType实现,而且必须要求对象存在【常用】
@Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现。如果两个都找不到的情况下,就报错【常用】

执行顺序不同:
@Autowired通过byType
@Resource默认通过byname的方式实现

使用注解开发

在Spring4之后,要使用注解开发,必须要导入aop

使用注解需要导入context约束,增加注解的支持!

1.bean
<context:component-scan base-package=“com.lkd.User”/> //扫描包
context:annotation-config///约束

	@component:自动装配通过名字
	
	在类上加入@Component注解等价于<bean id="User" class="com.lkd.pojo.User"/>

2.属性如何注入
在字段加@Value注解,可以显示值

3.衍生的注解
@Component有几个衍生注解,我们在web开发中,会按照MVC三次架构分层
dao 【@Repository】
Service【@Service】
Controller【@Controller】
4。自动装配注解

@Autowired
5.作用域
@scope

6.小结
xml与注解:
xml更加万能,使用于任何场景,维护简单方便
注解不是自己类,维护相对复杂
xml和注解最佳实践:
xml用来管理bean
注解只负责属性的注入
我们使用的过程中,只需要注意一个问题:必须让注解生效,就需要开启注解的支持

使用Java的方式配置Spring

我们现在要完全不适用Spring的xml配置,全权交给Java来

JavaConfig是Spring的一个子项目,在Spring4之后,它成为了一个核心功能

AOP

代理模式
为什么要学习代理模式?
因为这既是SpringAOP的底层!【SpringAOP 和SpringMVC】

代理模式的分类:
静态代理
动态代理

代理模式的好处:
可以使真实角色的操作更加纯粹!不用去关注一些公共的业务
公共也就交给代理角色!实现了业务的分工
公共业务发生扩展的时候,方便集中管理!

缺点:
一个真实角色就会产生一个代理角色;代码量就会翻倍~开发效率会变低

动态代理
动态代理和静态代理角色一样
动态代理的代理类是动态生成的,不是我们直接写好的!
动态代理分为两大类:基于接口的动态代理,基于类的动态代理
基于接口–JDK动态代理
基于类:cglib
java字节码实现:javasist

了解两个类:proxy 和 InvocationHandler:调用处理程序

AOP

1.什么是AOP?
面向切面编程,通过预编译方式和运行期动态代理实现功能的统一维护的一种技术。

2,AOp在Spring中的作用
提供声明式事务;允许用户自定义切面
横切关注点:跨越应用程序多个模块的方法或功能。即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如日志,安全,缓存,事务等等

切面(ASPECT):横切关注点被模块化的特殊对象。即,它是一个类

通知(Advice):切面必须要完成的工作。即,它是类中的一个方法

目标(Target):被通知对象

代理(Proxy):向目标对象应用通知之后创建的对象

切入点(PointCut):切面通知执行的"地点"的定义

连接点(JointPoingt):与切入点匹配的执行点

在这里插入图片描述

使用Spring实现AOP
【重点】使用AOP植入,需要导入一个依赖包

<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.6</version>
    <scope>runtime</scope>
</dependency>

整合Mybatis

步骤:
1.导入jar包
junit
mybatis
mysql数据库
Spring相关的
aop织入
mybatis-Spring 【new】

 <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.9.RELEASE</version>
        </dependency>

        <!--Spring操作数据库的话,还需要一个Spring-jdbc-->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.9.RELEASE</version>
        </dependency>


        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.6</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.5</version>
        </dependency>


    </dependencies>

2、编写配置文件
3.测试

回忆mybatis

  1. 编写实体类
  2. 编写核心配置文件
  3. 编写接口
  4. 编写Mapper.xml
  5. 测试

Mybatis-Spring

会帮助你将Mybatis代码无缝地整合在Spring中
\

  1. 编写数据源
  2. SqlSessionFactory
  3. SqlSessionTemplate
  4. 需要给接口增加实现类
  5. 将自己写的实现类,注入到spring中,
  6. 测试

声明式事务

1、回顾事务
把一组业务当成一个业务来做;要么都成功,要么都失败
事务在项目开发中十分重要,涉及到数据的一致性问题,不能马虎!
确保完整性和一致性

事务ACID原则:
原子性
一致性
隔离性:多个业务可能操作同一个资源,防止数据损坏
持久性:事务一旦提交,无论发生什么问题,结果都不会被影响,被持久化的写到存储器中

2、Spring事务
1.标准配置
开启Spring的事务处理功能,在Spring的配置文件中创建一个DataSourceTransactionManager

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      	<constructor-arg ref="dataSource"/>
</bean>

2.声明式事务
3.编程式事务

为什么需要事务?
如果不配置事务,可能存在数据提交不一致的情况下
如果不在Spring中去配置声明式事务,我们需要在代码中手动配置
事务在项目开发中很重要

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值