SSM
传统的
sping+springmvc+mybatis
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" 跳转的页面";
}