ssm整合笔记

最近复习了一遍ssm,又学到了很多,具体的spring、springmvc、mybatis框架的知识笔记太多,本人分开记了,这里只记录整合知识点。

注:这里是基于xml和注解的ssm整合,大多数项目中开发都是两者皆有,取长补短。

目录

(一)、准备工作

(二)、springmvc配置

(三)、spring配置

(四)、mybatis配置


(一)、准备工作

1、在MySQL中创建一个数据库创建一个表用来测试数据

2、用idea在maven中创建项目,补充好包和目录结构

3、在pom.xml中导入依赖(坐标)

除了导入springmvc,spring,mybatis三个框架的依赖,我还会导入其他一些常用的依赖

        3.0、在导入依赖之前,我会先锁定版本,保证依赖版本的一致性

        3.1、导入spring的依赖,aop依赖我导入的是aspectj的,导入spring本身的aop也没问题,不过好像spring-context这个依赖本身就包含有aop,我也不是很懂,不过导多没影响,导少肯定出问题,本着这个原则,导就对了(如果到时候出了什么冲突再说...)。

         3.2、持久层相关的依赖,连接池用的阿里的druid。

 

         3.3、web相关的依赖

        3.4、其他一些依赖,看情况导入

junit

 日志相关

Jackson和文件上传相关,并且spring框架整合了这些依赖

以上坐标的导入是本人的个人习惯。

 4、配置web.xml。

        4.0、配置前把maven生成的web.xml约束替换成web-app_4_0.xsd的,如果已经是这样的当我没说。如果不替换的话,接下来配置时会报错,虽然没什么影响,但是看它报红总觉得不适应。


       

         4.1、配置前端控制器 DispatcherServlet,也叫中央调度器。

 

为什么要在web.xml中配置前端控制器,这就得好好说说了。。。

我们以前在Java程序中创建spring容器获取容器对象,只需要在main方法中写:

ApplicationContext ac = new ClassPathXmlApplication();

然后调用ac.getBean("xxx");就可以了,

但是在web应用中是没有main方法的,服务器一启动程序就会运行,我们要把创建容器对象的步骤放在哪里好呢,放在程序中的话,每调用一次都会创建一次所有容器对象,浪费时间且消耗内存,显然是不合理的,

于是我们想到了,在服务器启动后就创建好所有容器对象,这要怎么做呢,spring自然已经为我们做好了。我们之前导入了spring-web这个依赖,该依赖里面有spring提供的监听器对象,也就是DispatcherServlet,它的作用就是:能够扫描springmvc配置文件,创建容器对象 ,把容器对象放入到ServletContext(全局作用域)中,这样容器对象在只会创建一次。具体配置步骤就如上图所示了,

配置项详解:

<servlet-class>指定DispatcherServlet的全限定类名,这样当监听器监听到服务器启动后,就会创建DispatcherServlet对象,进而扫描读取springmvc配置文件创建容器对象

<param-name>要叫 contextConfigLocation,表示配置文件的路径。为什么要配置这个,因为spring创建容器对象时,读取的配置文件路径默认是/WEB-INF/<servlet-name>-servlet.xml,如果该路径下没有此文件就会报错,但是我们配置文件一般是在resources目录下的,所以我们想要springmvc读取到我们的springmvc.xml配置文件,就要配置contextConfigLocation。

还有就是<servlet-mapping>中的"/",使用了 / ,它会替代 tomcat中的defaultServlet。 导致所有的静态资源都给springmvc的DispatcherServlet处理, 但是默认情况下DispatcherServlet没有处理静态资源的能力的,所以一定要在springmvc配置文件中配置mvc:resources处理静态资源。

但是前端控制器的作用可不止这个,详细的说明得在springmvc的笔记中才能扩展了。

          4.2、配置监听器 ContextLoaderListener

监听器的作用跟上面配置的前端控制器差不多,读取applicationContext.xml配置文件,创建容器对象。

         4.3、配置过滤器 CharacterEncodingFilter

过滤器就不多做说明了,用来将数据设置统一字符集编码的,我用的spring提供的过滤器CharacterEncodingFilter,也可以自定义一个过滤器。

(二)、springmvc配置

1、约束头:不用记忆

 这些约束可以在spring的docs文档中找到,设置好后保存成模板就好了。

2、组件扫描器

 注解需要的配置,告诉springmvc你的注解在哪里,springmvc找到你注解所在的类后,就会创建该容器对象。base-package表示那你要扫描哪个包,我这里是只扫描controller包下的所有controller类

3、视图解析器 

当你不想在程序中写又臭又长又重复的页面路径时,可以用该配置把重复的路径配置出来,在我们写路径时只需要写页面名称就可以了。比如:

4、<mvc:resources>标签

 处理静态资源的,前面我们也说过,当web.xml的前端控制器配置了"/",就表示所有静态资源都由springmvc来处理,但是springmvc默认是没有处理能力的,所以我们需要在这里用这个标签去处理静态资源。

mapping:访问静态资源的uri地址, 使用通配符 **,

location:静态资源在你的项目中的目录位置。

5、注解驱动

 注解驱动实现的功能是:完成java对象到json,xml, text,二进制等数据格式的转换。(响应Ajax请求,返回json),这个功能是需要jackson-databind依赖的支持的,同时需要在返回json对象的方法上加@Response这个注解,表示你要返回的不是一个视图,而是数据,这样就不会跟视图解析器冲突

注解驱动还可以解决静态资源访问问题,因为<mvc:resources>和@RequestMapping有一定的冲突,目前我也不是很懂为什么,在这里留个疑问。

6、文件解析器

如果你的项需要上传文件,就需要配置文件解析器,它能创建文件解析器对象CommonsMultipartResolver,该对象的实现类封装了许多对文件的操作,简化我们读取和写入文件的书写。

文件上传注意事项:(1)页面表单中有文件file的话,要在表单中添加一个属性

enctype="multipart/form-data",这样子表单数据在传给后端时才能够解析文件数据,(2)配置文件解析器.(3)在接收表单数据的方法参数中要用MultipartFile file,MultipartFile是参数类型,file是参数名,要和前端页面file类型的name值一样,这样才能接收到该文件。

7、拦截器

 拦截器可以对请求进行拦截处理,比如登录验证等。声明拦截器对象的class需要自己定义,

需要创建一个处理拦截的类,该类自定义,但要实现HandlerInterceptor接口,它有三个方法,一般只需要用第一个方法:preHandle(),该方法在controller方法执行前执行,返回类型是Boolean类型,为false拦截,true则放行。可以定义多个拦截器,在此不做扩展。

(三)、spring配置

1、约束,不多赘述。

2、配置组件扫描器 不扫描controller。因为springmvc配置文件中已经扫描了。

context:exclude-filter:表示不扫描的注解。

 3、spring整合mybatis

        3.1、配置数据源

如果在resources目录中配置了druid.properties配置文件,就用 <context:property-placeholder>标签把它导入到spring配置文件中,location的值是properties文件的类路径,用${}就可以使用配置文件中的数据了。

        3.2、声明 SqlSessionFactoryBean,创建 SqlSessionFactory对象

     3.3、声明mybatis的扫描器,创建dao对象

 MapperScannerConfigurer类会扫描这个包中的所有接口,把每个接口都执行一次getMapper()方法,得到每个接口的dao对象。 创建好的dao对象放入到spring的容器中的。 dao对象的默认名称是接口名首字母小写。

注意:如果在这一步指定了<property name="basePackage" value="com.ithyf.dao">,且映射配置文件在resources目录下和dao包结构相同,那么spring就可以扫描到映射配置文件,而不需要在mybatis主配置文件中配置<mappers>了,甚至可以不需要mybatis主配置文件了。

4、声明式事务处理(使用aspectj)

        4.1、声明事务管理器对象 ,即声明数据库访问技术对应的事务管理器实现类

DataSourceTransactionManager声明的是jdbc或mybatis的数据库访问技术,它内部会替你完成commit,rollback事务。

        4.2、声明业务方法的事务属性(隔离级别,传播行为,超时时间)

 不设置隔离级别,传播行为,超时时间spring会使用默认的,

传播行为默认是第二档,PROPAGATION_REQUIRED:指定的方法必须在事务内执行。若当前存在事务,就加入到当前事务中;若当前没有事 务,则创建一个新事务。

隔离级别MySQL默认是第三档:REPEATABLE_READ(可重复读),解决脏读、不可重复读,存在幻读。

超时时间:常量 TIMEOUT_DEFAULT 定义了事务底层默认的超时时限,sql 语句的执行时长。 因为事务的超时时限起作用的条件比较多,且超时的时间计算点较复杂。所以,该 值一般就使用默认值即可。

        4.3、配置aop,指定哪些包中的类,要创建代理(使用事务)。

 如果不想处理事务可以省略这最后一步。

(四)、mybatis配置

1、配置mybatis.xml主配置文件

因为在spring中整合了mybatis,其实可以不用mybatis主配置文件了,除非你还要在mybatis.xml中配置其他功能。

2、mapper.xml映射文件

值得注意的是mapper.xml文件放的位置,如果放在resources下,那么目录结构就要和dao包目录相同,文件名称也要一样,这样spring才能找到你的映射文件。比如:

 

注意: resources下的目录要一级一级的添加,不然idea会把你的目录当成一级目录,这样的话是找不到映射文件的,虽然我的是com.ithyf.dao,但我是一级一级添加的,idea显示是一级目录,但其实在我的idea项目中是三级的。

如果你想加在dao包下,那么就要注意在pom.xml中添加一个插件:

在<build>标签下添加

映射文件也没什么好说的了,一般复杂sql语句在mapper配置文件中来做比较好,关于mybatis的语句用法在我的mybatis笔记中再详细说吧,这里不再赘述。

至此,ssm就配置完毕了,测试就不测了,只要配好了都不会有什么大问题。觉得配置繁琐的可以使用idea将它们保存成模板,或者保存在自己的文件中,用到的时候创建模板就行了。或者更进一步,去学习springboot,这个框架就是用来简化spring配置的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值