SSM

传统的
SSM

sping+springmvc+mybatis
SSM

Mybatis代替了jdbc

SpringMVC代替了servlet

Spring来管理对象周期

SSM框架简介

SSM框架,是Spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统。

1.Spring简介

        Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

      A.控制反转(IOC)是什么呢?
        IOC:控制反转也叫依赖注入。利用了工厂模式将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter方法来注入,而不需要你在A里面new这些bean了。
        [注意]:面试的时候,如果有条件,画图,这样更加显得你懂了
      B.面向切面(AOP)又是什么呢?
        首先,需要说明的一点,AOP只是Spring的特性,它就像OOP一样是一种编程思想,并不是某一种技术,AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。
        实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
[简单点解释],比方说你想在你的biz层所有类中都加上一个打印‘你好,AOP’的功能这你经可以用aop思想来做,你先写个类写个方法,方法经实现打印‘你好,AOP’让后你Ioc这个类 ref=“biz.*”让每个类都注入。

2.Spring MVC简介

        Spring MVC属于Spring Framework的后续产品,已经融合在Spring Web Flow里面,它原生支持的Spring特性,让开发变得非常简单规范。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
3.MyBatis简介

        MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。可以这么理解,MyBatis是一个用来帮你管理数据增删改查的框架。

SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为view层,controller层,service层,DAO层四层

使用spring MVC负责请求的转发和视图管理

spring实现业务对象管理

mybatis作为数据对象的持久化引擎


流程:

发送请求到控制层(action/controller)

控制层调用服务层(service)的方法来处理事务

事务要用到数据库的时候去到持久层(dao)调用

然后把数据传输到表现层(view)展现给用户

使用方法:

要完成一个功能:

先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。
写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进行的那些操作,比如 insert、selectAll、selectByKey、delete、update等。
写Mapper.java,将Mapper.xml中的操作按照id映射成Java函数。
写Service.java,为控制层提供服务,接受控制层的参数,完成相应的功能,并返回给控制层。
写Controller.java,连接页面请求和服务层,获取页面请求的参数,通过自动装配,映射不同的URL到相应的处理函数,并获取参数,对参数进行处理,之后传给服务层。
写JSP页面调用,请求哪些参数,需要获取什么数据。
DataBase ===> Entity ===> Mapper.xml ===> Mapper.Java ===> Service.java ===> Controller.java ===> Jsp.

jquery(前端)

后端技术:

spring springmvc mybatis框架技术

配置文件:

logo4j2.xml(日志处理的配置文件)

mybatis-config.xml(mybatis的配置信息–连接数据库被spring框架兼容----别名的应用)

spring-context.xml(连接池,sqlsession,mapper,事务开启,aop,切面等等)

一般数据库连接池我们会用到c3p0,druid(一般现在都会用到druid(新版本))

druid:是为了监控而生的数据库连接池

spring-mvc.xml(controller的注解扫描,视图解析器,文件上传,静态资源的加载等等)

Java包架构:

包结构:(一般都是你的项目名,以下均是我常用的项目名)

1:跟包com.xm.crm

2:通用模块:com.xm.crm.common

3:系统模块:com.xm.crm.system

4:产品模块:com.xm.crm.product

4.1 控制层:controller

4.2业务层:service

4.3持久层:mapper(一般存放和数据库相关的借口)---dao(公司性质不一样)---
1
2
3
3.项目模块实现

1:项目模块业务分析

产品是基于用户(商户平台管理)的需求而创建的一种活动

2:项目状态:

a项目id b项目名称 c项目编号 d项目开始时间 e项目结束时间 f项目状态

3:项目模块实现的基本功能?(对项目信息的管理)

项目信息的增删查改(crud)delete update red insert(creat)
1
4项目模块的mvc实现

4.1实体类:pojo (属性名和数据库的字段名相对应)---entiry

4.2**mapper接口 对应的mapper.xml配置文件 实现sql语句的实现

4.3service接口及其实现类 serviceimpl

流程:controller调用service接口 service调用mapper接口

通过注解auto...还有resource
1
2
3
4
5
6
7
8
9
4.5编写测试类junit测试

4.6编写controller

** 4.7**编写js代码和页面

mvc模块分类概述

1:首先是实体类pojo/entiry:

创建项目实体对象进行数据封装,数据传递
1
小知识:一般可以implement serializable实现序列化接口(便于实例化)

why?对象可能缓存到磁盘里 对象可能通过网络传输,序列化版本第二个
1
封装的数据与你所对应的表的数据一致处理。数据引用一般都是util。

2.mapper/dao接口:

项目模块的持久层对象 增删查改的方法,每一个mapper都有一个对应的mapper.xml文件

mapper.xml文件的头部:这里是通用的

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
1
2
mapper.xml文件中:我们要做到mapper namespace路径和mapper接口路径一致

入参和传参必须一致 id名必须与方法名一致
1
3service接口和impl

注解@service

.service接口和实现类 impl注入mapper接口 @autowired

负责处理 业务验证 负责缓存处理 负责权限处理

负责事务处理 负责日志处理 。。。。。。。。。等

4.Junit测试类

classpathxmlapplicationcontext ctx;

@Before

public void init(){

ctx=new classpathxmlapplicationcontext (“springmvc.xml”,“spring-context.xml”);----加载配置文件

}

@Test

public void testfind…(测试的方法){

//1.测试service对象 2.找到service要测试的方法 3.测试结果 4.输出执行结果

假如我们测试的是peodeuctserviceimpl对象

Productserviceimpl productserviceimpl = ctx.getbean(“Productserviceimpl”,productsertvice.class);

list list=productserviceimpl.find();

Assert.assertNotEquals(0,list.size());

sys…(list);

}

@After

public void destory{

ctx.close;

}

5:controller接口

@controller注解 @RequestMapping(“/接口名”) @ResourceBody

写入方法

@RequestMapping(“/接口名”)

public String projectcontroller{

return" 跳转的页面";

}