javaweb之初识SSM

什么是SSM?

    SSM:即Spring,Spring-mvc,MyBatis。spring:用于依赖注入(DI,Dependency Injection)和控制反转(IoC,Inversion of Control),和面向切面编程(AOP,Aspect-Oriented Programming)。

    控制反转:顾名思义,将权利交给外界,可以让你不用自己手动new出对象,而通过扫描配置文件和注解方式,由系统自动创建对象;

    依赖注入:通过注解和配置进行对象的注入,在spring容器中查找到对象实例;

    面向切面:依赖与DI和IoC,由于不是对象不是自己创建的,所以在创建对象的时候可以添加额外代码但不更改程序代码,举个例子,当你买房的时候你通过找到房主进行购买操作,这个房主就是一个对象,还有房产中介,房产中介拥有房主的一部分权利,实现买房需要三步,第一:new出一个自己的对象;第二,new出一个房主的对象;第三,进行购买操作;中间不能添加任何代码,如果要进行其他操作,主程序代码必定会有改动,但是,通过AOP,spring创建对象后可能会为你注入一个房产中介的对象,我们称它为假房主,我们自己创建的是真房主,但是由spring给我们的却是假房主,但我们并不知道他的真假,从代码中看,我们也只进行了三步操作,但是由于对象被替换,在其中便可以添加额外代码,却不影响主程序的代码量。

SSM的逻辑原理:

    平时单独用spring或者mybatis的时候,我们也会用到其中的配置文件,要对其进行扫描,这个时候我们一般是用ClassPathXmlApplicationContext这个类获取到ApplicationContext对象,然后用getbean方法指明bean的id,就可以拿到对象了,这里是有入口的,java  main函数------->>ClassPathXmlApplicationContex类加载xml-------->>ApplicationContext.getBean("");

      那么,ssm又是怎么回事呢?首先,我们也是需要依次配置spring/mybatis/spring-mvc的配置文件,然后在javaweb项目的web-info目录下配置web.xml(没有则新建),在启动tomcat的时候,会自动扫描这个web.xml,这就是加载xml文件的入口!!!我们不说得那么高端,因为我也是新手,简单点,就是一个入口,并且是自动扫描的,不需要手动加载,然后web.xml中配置listener,配置spring.xml的文件位置,配置spring-mvc.xml的文件位置,然后系统就会自动去扫描这两个文件,然后在spring.xml中我们又会发现嵌在其中的mybatis.xml,正确的配置下,所有配置文件都将被读取。

SSM的处理顺序:

        在正确配置了SSM之后,我们首先考虑的是如何让它跑起来,以及各个层次之间的参数传递。从注解中,我们可以看到Service / Controller / ResponseBody / RequestMapping / Resource / Param

    servicecontroller注解是类的注解,用于controller和service/dao包下的java文件,在类上进行注解。

    ResponseBody可将方法进行注解,用于返回json数据,在controller中不指定跳转页面,方法返回类型为Object的各个子类,返回到前端的时候会自动解析成json数据

    RequestBody,一般用于方法的参数中,将前台的json数据映射到实体类或者对应的java变量中,使用该注解的参数名需与json数据中的key保持相同

    RequestMapping,在该注解后面跟括号,写上拦截的url,可实行url拦截,浏览器在进行url连接的时候,带有注解和注解url的方法会将其拦截并直接执行该方法,方法中可写参数取得url中的参数值,参数名应当与url中的参数名相同。

扫描二维码关注公众号,回复: 8970302 查看本文章

    Resource,用于bean变量注解,当需要引用到其他类作为本类中的一个变量时,可使用Resource注解,spring会从spring容器中寻找到对应的类的实例。

    Param,这个注解我用的比较少,才开始接触,使用的地方是在Mapper类中的方法里,在方法中的参数名前使用该注解,如@Param("xxx")int id,其中的xxx与mapper.xml中的sql参数名保持一致,即可将该变量的值传递到sql中,如select * from user by where id = #{xxx},这样就可以将参数值传递进去。当然,传参还有一种办法,在mapper.xml中指定parameterType="java.util.Map",这是传入mapper.java中的方法的参数类型,逻辑如下:首先在controller层中接收参数,如offset和pageSize两个参数,然后转入到service层,在service层将参数封装到Map中,最后使用接口代理的方式代入mapper.xml,在xml中使用#{offset,jdbcType=INTEGER} ,#{pagesize,jdbcType=INTEGER} 传入参数。PS:Map中封装的是键值对,map里面的键的名字要和#{}中的名字保持一致。

SSM的处理顺序及各层任务:

        Controller:接收前端参数,进行一部分数据验证,也可以进行参数封装,调用service

        Service:进行数据验证,调用Dao层/Mapper 处理事务或多事务整合,也可以在这个层里对参数进行封装

        Dao/Mapper:调用sql,进行表单操作

 Spring+myBatis,基于Transactional注解的事务管理

      配置
     <!--事务管理器 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
        </bean>

     <!-- 使用注解事务,需要添加Transactional注解属性 -->
        <tx:annotation-driven transaction-manager="transactionManager"/>

     <!--启用最新的注解器、映射器-->
        <mvc:annotation-driven/>

使用:类或public方法上加上注解  @Transactional 

有兴趣的友友可下载Demo参考,童叟无欺:https://download.csdn.net/download/fengwuj/10611091

发布了46 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/fengwuJ/article/details/81780783