SSM

  • Spring
  • SpringMVC表现层技术
  • MyBatis数据层技术

此案例

  • 搭建Spring

        框架基础
    
  • 搭建MyBatis

            Mysql+druid+pagehelperSpring整合MyBatis  单元测试Junit测试业务接口   这里 表示业务层以及完成
    
  • 搭建SpringMVC

          Rest风格(postman测试请求结果)数据封装(json)回写数据的一种形式   jacksonSpring整合SpringMVCController调用Service表现层数据封装 、异常状态返回
    

项目基础结构搭建

  • 创建项目 组织项目结构 创建包
  • 创建表 与 实体类
  • 创建三层架构 对应的模块 接口与实体类 建立关联关系
  • 数据层接口 (代理创建实现类)
  • 业务层接口 + 业务层实现类
  • 表现层

实体类对应的数据库样式

项目结构

创建项目 结构思路的

  1. SSM整合
  2. 创建MyBatis映射文件
  3. 创建Spring配置文件
  4. 组件扫描
  5. 整合MyBatis到Spring环境中
  6. SqlSessionFactoryBean
  7. 数据源(druid+jdbc.properties)
  8. 映射扫描
  9. 注解事务
  10. 分页插件
  11. 创建单元测试

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.yl</groupId><artifactId>springmvc_ssm</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><!--   servlet 规范坐标--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!--  jsp坐标--><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.3</version><scope>provided</scope></dependency>
<!--        &lt;!&ndash;   spring的坐标&ndash;&gt;--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.1.RELEASE</version></dependency><!--        springMvc的坐标--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.5.RELEASE</version></dependency><!--        springweb坐标--><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.2.5.RELEASE</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.3</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.22</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.5.RELEASE</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.21</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.2</version></dependency><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.4.49.ALL</version></dependency>
<!--        分页插件的坐标--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version></dependency><!--        对应JSON的坐标-->
<!--        <dependency>-->
<!--            <groupId>com.fasterxml.jackson.core</groupId>-->
<!--            <artifactId>jackson-core</artifactId>-->
<!--            <version>2.9.0</version>-->
<!--        </dependency>--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency><!--        <dependency>-->
<!--            <groupId>com.fasterxml.jackson.core</groupId>-->
<!--            <artifactId>jackson-annotations</artifactId>-->
<!--            <version>2.9.0</version>-->
<!--        </dependency>--><!--       文件上传下载--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><!--        导入校验jsr303规范--><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version></dependency><!--        导入校验框架实现技术--><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.1.0.Final</version></dependency><!--        junit单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
<!--        spring 整合junit--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.2.1.RELEASE</version></dependency></dependencies><!-- 构建--><build><!--maven插件--><plugins><!--jdk编译插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><!--加入对应的maven版本号码--><version>3.1</version><configuration><source>1.8</source><target>1.8</target><encoding>utf-8</encoding></configuration></plugin><!--tomcat插件--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><!--端口控制--><port>80</port><!--项目路径控制意味着http://localhost:8080/abc--><path>/</path><!--编码--><uriEncoding>UTF-8</uriEncoding><ignorePackaging>true</ignorePackaging></configuration></plugin></plugins></build>
</project>

Spring环境配置

    <context:component-scan base-package="cn.yl">

Mybatis 映射配置

<!--mapper 核心标签-->
<!--namespace 名称空间-->
<mapper namespace="cn.yl.dao.UserDao"><insert id="save" parameterType="user">INSERT INTO user (uuid,username,password,realName,gender,birthday)values (#{uuid},#{username},#{password},#{realName},#{gender},#{birthday})</insert><update id="update" parameterType="user">UPDATE user SET  username=#{username},password=#{password},realName=#{realName},gender=#{gender},birthday=#{birthday} WHERE uuid=#{uuid}</update><delete id="delete" parameterType="int">DELETE FROM user  WHERE uuid=#{uuid}</delete><select id="get" resultType="user" parameterType="int">SELECT * FROM user where uuid= #{uuid}</select><!--    分页查询--><select id="getAll" resultType="user" >SELECT * FROM  user</select><!-- 登录 --><select id="getByUserNameAndPassword"  resultType="user">SELECT  * FROM user  WHERE  username=#{username} and password=#{password}</select>
</mapper>

将参数进行对应

MyBatis核心配置

<!--    数据源--><bean id="dataSource"  class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driverClass}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean>
<!--  注入数据源  扫描实体类 -->
<!--  整合mybatis到 spring --><bean class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/>
<!--        对应的实体类包名--><property name="typeAliasesPackage" value="cn.yl.domain"/>

加入对对应的Pagehelper
分页插件配置与使用

<!--        分页插件--><property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><props><prop key="helperDialect">mysql</prop><prop key="reasonable">true</prop></props></property></bean></array></property></bean>

MyBtais配置文件 做 sql映射的
MyBtais映射扫描

<!--    映射扫描  加载UserDao.xml--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="cn.yl.dao"/></bean>

事务管理定义

打开注解事务的事务驱动
<!--    注解驱动--><tx:annotation-driven transaction-manager="txManager"/>

事务管理器 开在业务层的接口上

// 事务管理
@Transactional(readOnly = true)
public interface UserService {@Transactional(readOnly = false)public boolean save(User user);@Transactional(readOnly = false)public boolean update(User user);@Transactional(readOnly = false)public boolean delete(Integer uuid);public User get(Integer uuid);//    public PageInfo<User> getAll(int page, int size);public PageInfo<User> getAll(int page, int size) ;//   数据层 起的名称  要与数据层有关public User login(String username,String password);}

SpringMVC
Web.xml 加载SpringMVC
Rest风格
数据封装为JSON数据

    <!--   中文过滤器--><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>enconding</param-name><param-value>UTF-8</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*:spring-mvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

加载Springmvc需要这两个配置

  • @RestController
  • @RequestMapping () 配置公共的访问路径
@RestController
//公共的映射路径
@RequestMapping("/user")

Spring整合SpringMVC

  1. Web.xml加载Spring环境
  2. Controller 调用Service

在web环境加载spring上下文

  • 表现层调用业务层bean 注入对应想用的资源
    @Autowired
    private UserService userService;
@Autowiredprivate UserService userService;

表示 spring在启动时 将applciationContext.xml对应的配置文件加载到 Servlet tomcat范围 存在整个 则服务器中就会存在spring环境

<!--    tomcat文件配置文件名--><context-param><param-name>contextConfigLocation</param-name>
<!--        在类路径下 寻找对应的 配置文件 --><param-value>classpath*:applicationContext.xml</param-value></context-param><!--    启动服务器  通过监听器加载Spring运行环境--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

表现层数据封装
前端接收数据表现层返回的数据种类
返回数据状态设计
根据业务不同设计不同的状态码

public class Code {// 操作结果编码public static final Integer SAVE_OK =20011;public static final Integer UODATE_OK =20021;public static final Integer DELETE_OK =20031;public static final Integer GET_OK =20041;//    失败的编码public static final Integer SAVE_ERROR =20010;public static final Integer UODATE_ERROR =20020;public static final Integer DELETE_ERROR =20030;public static final Integer GET_ERROR =20040;}

对应编码的前台返回json数据样式

对应的分页查询数据样式

@RestController
//公共的映射路径
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@PostMappingpublic Result save(User  user){boolean flag = userService.save(user);return new Result(flag ? Code.SAVE_OK : Code.SAVE_ERROR);}@PutMappingpublic Result update(User  user){boolean flag = userService.update(user);return new Result(flag ? Code.UODATE_OK : Code.UODATE_ERROR);}//  对应收集参数@DeleteMapping("/{uuid}")public Result delete(@PathVariable Integer uuid){boolean flag = userService.delete(uuid);return new Result(flag ? Code.DELETE_OK : Code.DELETE_ERROR);}@GetMapping("/{uuid}")  //  从路径中获取该变量public Result get(@PathVariable Integer uuid){User user = userService.get(uuid);return new Result(null != user ? Code.GET_OK : Code.GET_ERROR,user);}@GetMapping("/{page}/{size}")  //  从路径中获取该变量public Result getAll(@PathVariable Integer page, @PathVariable Integer size){PageInfo<User> all = userService.getAll(page, size);return new Result(null != all ? Code.GET_OK : Code.GET_ERROR,all);}// 地址栏  有密码  故此处不遵循 rest风格@PostMapping("/login")  // 和上面的save进行区分spublic Result login(String username ,String password){User user = userService.login(username, password);return new Result(null != user ? Code.GET_OK : Code.GET_ERROR,user);}
}

对应的Junit测试类

@RunWith(SpringJUnit4ClassRunner.class)
//   对应的配置文件
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class UserServiceTest {@Autowiredprivate UserService userService;@Testpublic void testSave(){User user = new User();user.setUuid(6);user.setUserName("罗五");user.setPassword("root");user.setRealName("123");user.setGender(1);user.setBirthday(new Date(21412412412L));userService.save(user);}@Testpublic void testDelete(){User user = new User();userService.delete(1);}@Testpublic void testUpdate(){User user = new User();user.setUuid(3);user.setUserName("罗二");user.setPassword("root1");user.setRealName("123");user.setGender(1);user.setBirthday(new Date(21411232412L));userService.update(user);}@Testpublic void testGet(){User user = userService.get(2);System.out.println(user);}@Testpublic void testGetAll(){PageInfo<User> all= userService.getAll(1,3);System.out.println(all);System.out.println(all.getList().get(0));System.out.println(all.getList().get(1));System.out.println(all.getList().get(2));}@Testpublic void testLogin(){User user = userService.login("罗蛋","root");System.out.println(user);}
}

前台用的测试 均是在Postman上进行的

手把手教你ssm整合 超级详细相关推荐

  1. 手把手教你 SSM 整合(非常非常非常非常非常详细)

    comi single blog(欢迎访问我的个人博客) SSM 整合   整合的思路是:    先创建spring框架    通过spring整合spring mvc    通过spring整合my ...

  2. 手把手教你SSM整合开发办公系统(OA)——报销单(含源码)

    文章目录 前言 项目展示 技能要求 一.开始前的准备 1.OA系统是什么? 2.人员权利与报销流程 3.数据库设计 4.创建项目及作用说明 5.包与全局变量配置 6.编写过滤器 7.静态资源的复制与请 ...

  3. python画龙猫_手把手教你画龙猫,详细到每一条线!

    宫崎骏老爷爷的画功简直就是美术生心中的神仙呐 今天小胖要教大家画宫崎骏笔下的龙猫! 手把手教你画龙猫,详细到每一条线! 快学起来吧~ 第一步: 在纸张的左上角画一把小伞 手把手教你画龙猫,详细到每一条 ...

  4. SSM框架超级详细整合记录:Spring+Spring MVC+MyBatis+Maven+MySQL

    1.前言 本文主要对SSM框架整合的过程进行记录,作为之后参考的依据. 1.1.参考文章 Spring代码实例系列-绪论 Spring MVC代码实例系列-绪论 MyBatis代码实例系列-绪论 1. ...

  5. SSM项目小例子,SSM整合图文详细教程

    SSM项目小例子 今天来搭建一个SSM项目的小例子简单练一练,那项目模板还是我们那个模板,就是我们在JavaWeb最后的小例子,那到SSM中我们如何实现,后面我们再看看springboot中如何实现 ...

  6. 简述python的安装过程_python3+ selenium3开发环境搭建-手把手教你安装python(详细)...

    环境搭建 基于python3和selenium3做自动化测试,俗话说:工欲善其事必先利其器:没有金刚钻就不揽那瓷器活,磨刀不误砍柴工,因此你必须会搭建基本的开发环境,掌握python基本的语法和一个I ...

  7. 【gateway系列】手把手教你gateway整合nacos注册中心

    目录 准备 Gateway服务 Member服务 运行 往期相关推荐: 网关路由规则和nacos配置中心实战: 一步步带你学习gateway路由规则实践 nacos整合配置中心 准备 准备引入相关依赖 ...

  8. python3+ selenium3开发环境搭建-手把手教你安装python(详细)

    环境搭建 基于python3和selenium3做自动化测试,俗话说:工欲善其事必先利其器:没有金刚钻就不揽那瓷器活,磨刀不误砍柴工,因此你必须会搭建基本的开发环境,掌握python基本的语法和一个I ...

  9. 手把手教最新最全最详细Git使用教程(图文并茂,附Git命令大全学习文档)

    导读 因为教程详细,所以行文有些长,新手边看边操作效果出乎你的预料.GitHub虽然有些许改版,但并无大碍. 最全Git命令学习文档下载(集合整理,非常适合新手) 一.Git是什么? Git是目前世界 ...

  10. 手把手教你SSM搭建Easymall电商项目 (二)

    SSM搭建Easymall电商项目 (二) 目录 SSM搭建Easymall电商项目 (二) 一.Easymall需求代码实现 1.测试类测试请求地址路径IndexController.java    ...

最新文章

  1. 数据探索很麻烦?推荐一款强大的特征分析可视化工具:yellowbrick
  2. NYOJ 240 小明的调查统计(二)
  3. STM32开发 -- 低功耗模式详解(1)
  4. 关于js浅拷贝与深拷贝的理解
  5. Revit API创建标高,单位转换
  6. JavaScript 随意整理2
  7. C语言——循环控制语句
  8. Visual Assist X 10.6.1837完美破解版(带VS2010破解)
  9. Java HTTP 代理服务器
  10. 机器视觉——镜头介绍
  11. 1236mysql,MySQL1236错误的恢复
  12. 软件测试工具有哪些?--最全最新的软件测试工具下载地址都在这里!错过绝对后悔!
  13. 高中数学集合知识点小题解题方法
  14. 如何提取伴奏?1分钟让你知道伴奏提取软件手机版有哪些
  15. ABAP- INCLUDE Zxxx IF FOUND.
  16. 用python解决数学问题
  17. 港科夜闻|香港科大(广州)系统枢纽署理院长李世玮教授成为首位获电子封装领域最重要荣誉大奖的中国科学家...
  18. 全景拍摄中的全景接片是什么?怎么操作?
  19. 计算机无法连接网络错误651,网络连接错误651是什么原因
  20. QueryBuilders的matchQuery

热门文章

  1. [UE4]使用UMG的用户界面,设置UMG的模块依赖性(C++)
  2. Android MVP 实践之路(理解篇)
  3. ★Kali信息收集~ 5.The Harvester:邮箱挖掘器
  4. 为河南小伙恩辉舍己救人点赞<原创>
  5. datetime的时值
  6. 【016】基于51单片机的pwm加速减速步进电机Proteus仿真设计与实物设计
  7. SSL/TLS部署最佳实践
  8. 游戏支付接口平台如何选择
  9. Clickhouse时间日期函数一文详解+代码展示
  10. 朋友圈发图多大不会被压缩_微信:朋友圈照片自动压缩 不暴露位置信息