大道论

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 98|回复: 1

SSM框架整合

[复制链接]

2

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2023-4-21 09:56:56 | 显示全部楼层 |阅读模式
SSM框架整合
一、SSM框架简介
1.1、基本概念
三层架构:
  开发架构一般都是基于两种形式:一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器服务器。
  在JavaEE开发中,几乎全都是基于B/S架构的开发。那么在B/S架构中,系统标准的三层架构包括:表现层、业务层、持久层。其中每一层都分工明确:
  表现层:负责接收客户端请求,向客户端响应结果,负责与用户进行交互。表现层的设计一般都使用MVC模型
  业务层:主要是针对不同请求业务逻辑的处理,也可理解为对数据业务逻辑处理。
  持久层:主要是对非原始数据(数据库或者文本文件等存放数据的形式)的操作层,也就是说是对数据库,而不是对数据的操作,具体为业务逻辑层或用户界面层提供数据服务。


三层架构的出现是为了降低耦合度,在这里,使用面向抽象编程,也就是上层对下层的调用,直接通过接口来完成,下层对上层的真正服务提供者,是下层实现的接口实现类。
实现类是可以更换的,这就实现了层间的解耦合。
Spring:
Spring是一个轻量级的开源框架,以IOC(反转控制)和AOP(面向切面编程)两个核心。控制反转即将对象的创建和销毁控制权交给Spring容器来管理,从而减少最大程度减少new关键字的出现,使代码低耦合,高复用。面向切面编程即将核心业务逻辑代码与日志记录,权限验证,效率检查,事务管理等模块必要存在且非业务逻辑代码分开,达到与主业务逻辑解耦的目的。
SpringMVC:
MVC设计模式:Model-View-Controller简写
MVC是软件工程中的一种软件架构模式,它是一种分离业务逻辑与显示界面的设计方法,它把软件系统分为三个基本部分:
模型(model)、视图(view)、控制器(controller)
控制器 controller:对请求进行处理,负责请求转发,也就是事件,用于流程的控制;        完成业务逻辑:由javaBean构成,在MVC的三个部件中,模型拥有最多的处理任务。
视图view:界面设计人员进行图形界面设计,也就是GUI组件,用于数据的展示;负责跟用户交互的界面。一般就是由HTML,css元素组成的界面。 在视图层里没有真正的处理发生,只负责数据输出。MVC能为应用程序处理很多不同的视图。
模型model:编写程序应用功能(实现算法等等),数据库管理,也就是实体类。模型用于数据的封装和数据的传输;接收请求—>调用模型—>根据结果派发页面并经过模型处理返回相应数据。
MyBatis:
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围着一个aqlSessionFactory实例展开的,。mybatis通过配置文件关联到各实体类的mapper文件,mapper文件中配置了每个类对数据库所需要进行的sql语句映射。在每次与数据库交互时,通过sqlsessionFactory拿到一个sqlSession,再执行sql命令。
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架,其主要就完成3件事情:
1、更加完善的封装JDBC操作
2、利用反射打通Java类与SQL语句之间的相互转换
3、采用ORM思想解决实体与数据映射的问题
MVC框架的工作流程:
用户将请求发送至DispatcherServlet;
1.DispatcherServlet收到请求查询一个或多个HandlerMapping,找到处理该请求的Handler;
2.HandlerMapping根据请求找到相应的Handler,生成Handler对象返回给DispatcherServlet;
3.DispatcherServlet通过HandlerAdapter调用Handler;
4.Handler(Controller)调用业务逻辑(service)进行处理,处理完成返回ModelAndView;
5.HandlerAdapter将Handler处理结果ModelAndView返回给DispatcherServlet;
6.DispatcherServlet查询一个或多个ViewReslover(视图解析器),将ModelAndView传给指定的ViewReslover;
7.ViewReslover解析后返回具体View给DispatcherServlet;
8.DispatcherServlet对View进行渲染(将模型数据填充至视图中);
9.DispatcherServlet响应用户,View将结果显示在客户端。
1.2、SSM整合思路


  • 先搭建整合的环境
  • 先把Spring的配置搭建完成
  • 搭建SpringMVC框架,通过测试搭建无误
  • 再使用Spring整合SpringMVC框架
  • 搭建MyBatis框架,单元测试通过。
  • 最后使用Spring整合MyBatis框架。


1.3、基本环境搭建
1、创建数据库和表结构
insert into building values (null, '11栋', '1单元', '......'), (null, '12栋', '2单元', '......'), (null, '13栋', '3单元', '......'), (null, '14栋', '4单元', '......'), (null, '15栋', '5单元', '......'), (null, '16栋', '6单元', '......'), (null, '17栋', '7单元', '......'), (null, '18栋', '8单元', '......'), (null, '18栋', '2单元', '......'), (null, '18栋', '3单元', '......') select id,numbers,status,into_date intoDate,building_id  buildingId,remarks,area from house where id = 1   drop database if exists spring_crm; create database spring_crm;  use spring_crm;  drop table if exists department; create table department(     id int primary key auto_increment,     name varchar(16) not null unique  -- 唯一性约束 );  insert into department(name) values ('业务部'),('研发部'),('市场部'),('财务部'),('后勤部')  drop table if exists userInfo; create table userInfo(     id int primary key auto_increment,     loginName varchar(16) not null unique,   password varchar(10) not null ); insert into userInfo values(null, 'admin', '123456'), (null, 'xm', '666666');   drop table if exists employee; create table employee(     id int primary key auto_increment,     name varchar(16) not null,     depId int not null,     address varchar(64) null,     email varchar(64) null,     gender bit,     birthday date not null ); alter table employee add constraint fk_dep foreign key(depId) REFERENCES department(id);  insert into employee values (null, '张三丰', 1, '湖北省武当山', 'fengfeng@qq.com', 1, '1899-02-13'),         (null, '灭绝师太', 2, '四川峨眉', 'jue@qq.com', 0, '1919-12-05'),         (null, '白眉鹰王', 3, '光明顶', null, 1, '1900-07-20'),         (null, '张敏', 4, '元大都', 'min@sohu.com', 0, '1922-01-01'),         (null, '小昭', 5, '波斯', 'zhao@sohu.com', 0, '1923-03-03');
2.创建项目
创建maven项目或者模板,选择图中骨架。


3、导入jar包坐标

<properties>   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>   <maven.compiler.source>1.7</maven.compiler.source>   <maven.compiler.target>1.7</maven.compiler.target> </properties>  <dependencies>   <dependency>     <groupId>junit</groupId>     <artifactId>junit</artifactId>     <version>4.12</version>     <scope>test</scope>   </dependency>   <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-test</artifactId>     <version>5.3.20</version>   </dependency>   <dependency>     <groupId>jstl</groupId>     <artifactId>jstl</artifactId>     <version>1.2</version>   </dependency>   <dependency>     <groupId>taglibs</groupId>     <artifactId>standard</artifactId>     <version>1.1.2</version>   </dependency>    <dependency>     <groupId>javax.servlet</groupId>     <artifactId>javax.servlet-api</artifactId>     <version>4.0.1</version>   </dependency>    <dependency>     <groupId>javax.servlet.jsp</groupId>     <artifactId>javax.servlet.jsp-api</artifactId>     <version>2.3.3</version>   </dependency>    <dependency>     <groupId>org.projectlombok</groupId>     <artifactId>lombok</artifactId>     <version>1.18.26</version>   </dependency>    <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.22</version>   </dependency>    <dependency>     <groupId>com.alibaba</groupId>     <artifactId>druid</artifactId>     <version>1.2.16</version>   </dependency>    <dependency>     <groupId>org.mybatis</groupId>     <artifactId>mybatis</artifactId>     <version>3.5.2</version>   </dependency>   <!--需要spring为我们创建Mapper接口实例-->   <dependency>     <groupId>org.mybatis</groupId>     <artifactId>mybatis-spring</artifactId>     <version>2.0.7</version>   </dependency>   <!--mybatis的分页插件-->   <dependency>     <groupId>com.github.pagehelper</groupId>     <artifactId>pagehelper</artifactId>     <version>5.2.1</version>   </dependency>    <!--spring-mvc相关依赖-->   <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-webmvc</artifactId>     <version>5.3.20</version>   </dependency>   <!--用于将java对象转换为json字符串,传递到页面-->   <dependency>     <groupId>com.fasterxml.jackson.core</groupId>     <artifactId>jackson-databind</artifactId>     <version>2.14.2</version>   </dependency>    <dependency>     <groupId>org.slf4j</groupId>     <artifactId>slf4j-log4j12</artifactId>     <version>1.7.25</version>   </dependency>    <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-tx</artifactId>     <version>5.3.20</version>   </dependency>    <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-jdbc</artifactId>     <version>5.3.20</version>   </dependency>    <!--文件上传相关依赖-->   <dependency>     <groupId>commons-io</groupId>     <artifactId>commons-io</artifactId>     <version>2.11.0</version>   </dependency>
配置tomcat服务器






选择war包


创建目录和java文件









引入log4J.properties:
log4j.rootLogger=INFO,console  log4j.logger.com.woniu.mvc_ioc_mybatis_crm.mapper=debug;  log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%p %c %d{yyyy-MM-dd HH:mm:ss} %m%n  #log4j.appender.dailyRollingFile=org.apache.log4j.DailyRollingFileAppender #log4j.appender.dailyRollingFile.File=F:/logs/log.log #log4j.appender.dailyRollingFile.Append=true #log4j.appender.dailyRollingFile.Threshold=DEBUG #log4j.appender.dailyRollingFile.layout=org.apache.log4j.PatternLayout #log4j.appender.dailyRollingFile.layout.ConversionPattern==%p %c %d{yyyy-MM-dd HH:mm:ss} %m%n  #log4j.logger.org.example.App=error #log4j.logger.org.example.Other=error #log4j.logger.java.sql.ResultSet=error #log4j.logger.org.apache=error #log4j.logger.java.sql.PreparedStatement=ERROR
2.1、搭建SpringMVC
1、生成配置springMvcjava目录


创建springxml文件

springMvc//扫包和配置视图解析器
<context:component-scan base-package="com.woniu.mvc_ioc_mybatis_crm.controller" use-default-filters="false">     <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">     <property name="prefix" value="/WEB-INF/pages/"/>     <property name="suffix" value=".jsp"/> </bean> <mvc:default-servlet-handler/> <mvc:view-controller path="login.html" view-name="login"/> <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver"/> <mvc:annotation-driven></mvc:annotation-driven>
创建数据库环境配置文件db.properties
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring_crm?serverTimezone=GMT jdbc.user=root jdbc.password=root jdbc.maxActive=10 jdbc.initialSize=5
applicationContext.xml//配置数据源和sqlSessionFactory
问题:


  • 在开发阶段我们连接数据库时的url,username,password等信息

分布式应用中client端的server地址,端口等


  • 这些参数在不同阶段之间又住住需要改变

spring3中提供了一种简便的方式--解决了这一问题
<context:component-scan base-package="com.woniu.mvc_ioc_mybatis_crm">     <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <context:property-placeholder location="classpath:db.properties"/> <bean id="dateSource" class="com.alibaba.druid.pool.DruidDataSource">     <property name="username" value="${jdbc.user}"/>     <property name="driverClassName" value="${jdbc.driver}"/>     <property name="password" value="${jdbc.password}"/>     <property name="url" value="${jdbc.url}"/>     <property name="maxActive" value="${jdbc.maxActive}"/>     <property name="initialSize" value="${jdbc.initialSize}"/> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">     <property name="configLocation" value="classpath:mybatis_config.xml"/>     <property name="dataSource" ref="dateSource"/>     <property name="typeAliasesPackage" value="com.woniu.mvc_ioc_mybatis_crm.entity"/>     <property name="mapperLocations"               value="classpath:com/woniu/mvc_ioc_mybatis_crm/mapper/*Mapper.xml"/> </bean> <!--配置扫包 创建所有Mapper的实例--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">     <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>     <property name="basePackage" value="com.woniu.mvc_ioc_mybatis_crm.mapper"/> </bean>
web.xml配置。
在web.xml中配置DispatcherServlet和过滤器设置编码为utf8
<context-param>   <param-name>contextConfigLocation</param-name>   <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener>   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter>   <filter-name>CharacterEncodingFilter</filter-name>   <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>   <init-param>     <param-name>encoding</param-name>     <param-value>utf-8</param-value>   </init-param>   <init-param>     <param-name>forceRequestEncoding</param-name>     <param-value>true</param-value>   </init-param>   <init-param>     <param-name>forceResponseEncoding</param-name>     <param-value>true</param-value>   </init-param> </filter> <filter-mapping>   <filter-name>CharacterEncodingFilter</filter-name>   <url-pattern>/*</url-pattern> </filter-mapping> <servlet>   <servlet-name>DispatcherServlet</servlet-name>   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   <init-param>     <param-name>contextConfigLocation</param-name>     <param-value>classpath:springMvc.xml</param-value>   </init-param> </servlet> <servlet-mapping>   <servlet-name>DispatcherServlet</servlet-name>   <url-pattern>/</url-pattern> </servlet-mapping>
3.1、使用MyBatis(xml文件的方法)
1.使用分页插件
<plugins>     <plugin interceptor="com.github.pagehelper.PageInterceptor">         <property name="helperDialect" value="mysql"/>         <property name="reasonable" value="true"/>     </plugin> </plugins>
3.2、在resources中创建目录结构


3.3mapper下创建在xml文件


必须指定命名空间


3.4编写sql语句


4、测试即可
1创建User实例
public class User {     private int id;     private String loginName;     private String password; }
2.创建Mapper和创建selectByLoginName 方法
User selectByLoginName(@Param("loginName") String loginName, String password);
3.创建测试方法

回复

使用道具 举报

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2023-4-21 09:57:21 | 显示全部楼层
[爱]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|大道论

GMT+8, 2025-4-8 18:08 , Processed in 0.087078 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表