前言

虽然现在SpringBoot开始流行,但是SSM作为一个经典框架,还是有必要去了解一下。

项目建立

1.新建一个空白的Maven项目,如下图。然后把IDEA自动生成的多余src目录删掉。

2.右键项目新建Module,选择Module类型,ArtfactId为Web,如下

3.继续新建空白Module,分别建立api,biz,common,repository,sal模块,这样基本的项目就建立起来了.

4.接下来再如下图配置一下Tomcat服务器,就可以运行项目,在程序上看到  "Hello World!"

SpringMVC

现在主流都是前后端分离,所以control层都是以restful的形式返回json格式数据,下面写了个查询部门类别的例子,需要建立多个文件,如下图

文件从上往下分别为

  1. public class DeptInfo {
  2.  
  3. private Integer id;
  4.  
  5. public String getName() {
  6. return name;
  7. }
  8.  
  9. public void setName(String name) {
  10. this.name = name;
  11. }
  12.  
  13. private String name;
  14.  
  15. public Integer getId() {
  16. return id;
  17. }
  18.  
  19. public void setId(Integer id) {
  20. this.id = id;
  21. }
  22. }

DeptInfo.java

  1. @Service
  2. public class DeptServiceImpl implements DeptService {
  3.  
  4. @Override
  5. public List<DeptInfo> listDeptInfo(String name) {
  6. List<DeptInfo> deptInfos=new ArrayList<>();
  7. for (int i=0;i<2;i++)
  8. {
  9. DeptInfo info=new DeptInfo();
  10. info.setName("部门"+i);
  11. info.setId(i);
  12. deptInfos.add(info);
  13. }
  14. return deptInfos;
  15. }
  16. }

DeptServiceImpl.xml

  1. public interface DeptService {
  2. List<DeptInfo> listDeptInfo(String name);
  3. }

DeptService.java

  1. @RestController
  2. @RequestMapping(value = "/dept")
  3. public class DeptController {
  4.  
  5. @Autowired
  6. private DeptService deptService;
  7.  
  8. @RequestMapping(value = "/get", method = RequestMethod.GET)
  9. public String getDept(String id) {
  10. return "部门id"+id;
  11. }
  12.  
  13. @RequestMapping(value = "/getList", method = RequestMethod.GET)
  14. public List<DeptInfo> getDeptList(String name) {
  15. return deptService.listDeptInfo(name);
  16. }
  17. }

DeptController.java

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
  6.  
  7. <context:component-scan base-package="cn.com.test">
  8. </context:component-scan>
  9. </beans>

applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
  8. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
  10. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
  11. ">
  12. <mvc:annotation-driven>
  13. <mvc:message-converters>
  14. <bean id="stringConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
  15. <property name="supportedMediaTypes">
  16. <list>
  17. <value>text/html;charset=UTF-8</value>
  18. </list>
  19. </property>
  20. </bean>
  21. <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
  22. <property name="supportedMediaTypes">
  23. <list>
  24. <value>application/json;charset=UTF-8</value>
  25. </list>
  26. </property>
  27. </bean>
  28. </mvc:message-converters>
  29. </mvc:annotation-driven>
  30. <context:component-scan base-package="cn.com.test.springmvc.web"/>
  31. </beans>

dispatcher-servlet.xml

  1. <!DOCTYPE web-app PUBLIC
  2. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  3. "http://java.sun.com/dtd/web-app_2_3.dtd" >
  4.  
  5. <web-app>
  6. <display-name>Archetype Created Web Application</display-name>
  7. <context-param>
  8. <param-name>contextConfigLocation</param-name>
  9. <param-value>/WEB-INF/applicationContext.xml</param-value>
  10. </context-param>
  11.  
  12. <listener>
  13. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  14. </listener>
  15. <servlet>
  16. <servlet-name>dispatcher</servlet-name>
  17. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  18. <load-on-startup>1</load-on-startup>
  19. </servlet>
  20. <servlet-mapping>
  21. <servlet-name>dispatcher</servlet-name>
  22. <url-pattern>/</url-pattern>
  23. </servlet-mapping>
  24. </web-app>

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>springmvc</artifactId>
  7. <groupId>cn.com.test.springmvc</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>web</artifactId>
  12. <packaging>war</packaging>
  13. <name>web Maven Webapp</name>
  14. <properties>
  15. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  16. <maven.compiler.source>1.8</maven.compiler.source>
  17. <maven.compiler.target>1.8</maven.compiler.target>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>junit</groupId>
  22. <artifactId>junit</artifactId>
  23. <version>4.11</version>
  24. <scope>test</scope>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework</groupId>
  28. <artifactId>spring-webmvc</artifactId>
  29. <version>5.0.7.RELEASE</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>com.fasterxml.jackson.core</groupId>
  33. <artifactId>jackson-databind</artifactId>
  34. <version>2.9.1</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>cn.com.test.springmvc</groupId>
  38. <artifactId>biz</artifactId>
  39. <version>1.0-SNAPSHOT</version>
  40. <scope>compile</scope>
  41. </dependency>
  42. </dependencies>
  43. <build>
  44. <finalName>web</finalName>
  45. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  46. <plugins>
  47. <plugin>
  48. <artifactId>maven-clean-plugin</artifactId>
  49. <version>3.1.0</version>
  50. </plugin>
  51. <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
  52. <plugin>
  53. <artifactId>maven-resources-plugin</artifactId>
  54. <version>3.0.2</version>
  55. </plugin>
  56. <plugin>
  57. <artifactId>maven-compiler-plugin</artifactId>
  58. <version>3.8.0</version>
  59. </plugin>
  60. <plugin>
  61. <artifactId>maven-surefire-plugin</artifactId>
  62. <version>2.22.1</version>
  63. </plugin>
  64. <plugin>
  65. <artifactId>maven-war-plugin</artifactId>
  66. <version>3.2.2</version>
  67. </plugin>
  68. <plugin>
  69. <artifactId>maven-install-plugin</artifactId>
  70. <version>2.5.2</version>
  71. </plugin>
  72. <plugin>
  73. <artifactId>maven-deploy-plugin</artifactId>
  74. <version>2.8.2</version>
  75. </plugin>
  76. </plugins>
  77. </pluginManagement>
  78. </build>
  79. </project>

pom.xml

运行后可以看到如下

  1. [{"id":0,"name":"部门0"},{"id":1,"name":"部门1"}]

Mybaits

接下来接入Mybaits数据库操作,需要改以下文件

  1. @Service
  2. public class DeptServiceImpl implements DeptService {
  3. @Autowired
  4. DeptDOMapper deptDOMapper;
  5. @Override
  6. public List<DeptInfo> listDeptInfo(String name) {
  7. List<DeptDO> deptDOList= deptDOMapper.listDept(name);
  8. List<DeptInfo> deptInfos=new ArrayList<>();
  9. deptDOList.stream().forEach(x->{
  10. DeptInfo info=new DeptInfo();
  11. info.setName(x.getName());
  12. info.setId(x.getId());
  13. deptInfos.add(info);
  14. });
  15. return deptInfos;
  16. }
  17. }

DeptServiceImpl.java

  1. public class DeptDO {
  2. private Integer id;
  3.  
  4. private String name;
  5.  
  6. public Integer getId() {
  7. return id;
  8. }
  9.  
  10. public void setId(Integer id) {
  11. this.id = id;
  12. }
  13.  
  14. public String getName() {
  15. return name;
  16. }
  17.  
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. }

DeptDO.java

  1. @Repository
  2. public interface DeptDOMapper {
  3. List<DeptDO> listDept(@Param("name")String name);
  4. }

DeptDOMapper.java

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  5. <mapper namespace="cn.com.test.springmvc.repository.mapper.DeptDOMapper" >
  6. <resultMap id="BaseResultMap" type="cn.com.test.springmvc.repository.entity.DeptDO" >
  7. <id column="id" property="id" jdbcType="BIGINT" />
  8. <result column="name" property="name" jdbcType="VARCHAR" />
  9. </resultMap>
  10.  
  11. <select id="listDept" resultMap="BaseResultMap" >
  12. select id,name from test_dept
  13. <where>
  14. <if test="name !=null and name !=''">
  15. and name like concat('%',#{name},'%')
  16. </if>
  17. </where>
  18. </select>
  19. </mapper>

DeptDOMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
  6.  
  7. <context:component-scan base-package="cn.com.test">
  8. </context:component-scan>
  9. <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
  10. <property name="username" value="root"></property>
  11. <property name="password" value="111111"></property>
  12. <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
  13. <property name="url" value="jdbc:mysql://localhost:3306/mysql"></property>
  14. </bean>
  15.  
  16. <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  17. <property name="dataSource" ref="dataSource" />
  18. <property name="mapperLocations" value="classpath*:*Mapper.xml"/>
  19. </bean>
  20.  
  21. <bean id="dataScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  22. <property name="basePackage" value="cn.com.test.springmvc.repository.mapper"/>
  23. <property name="sqlSessionFactoryBeanName" value="SqlSessionFactory"/>
  24. </bean>
  25.  
  26. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  27. <property name="dataSource" ref="dataSource"/>
  28. </bean>
  29.  
  30. <tx:annotation-driven transaction-manager="transactionManager"/>
  31. </beans>

applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>springmvc</artifactId>
  7. <groupId>cn.com.test.springmvc</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>web</artifactId>
  12. <packaging>war</packaging>
  13. <name>web Maven Webapp</name>
  14. <url>http://www.example.com</url>
  15. <properties>
  16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  17. <maven.compiler.source>1.8</maven.compiler.source>
  18. <maven.compiler.target>1.8</maven.compiler.target>
  19. </properties>
  20. <dependencies>
  21. <dependency>
  22. <groupId>junit</groupId>
  23. <artifactId>junit</artifactId>
  24. <version>4.11</version>
  25. <scope>test</scope>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework</groupId>
  29. <artifactId>spring-webmvc</artifactId>
  30. <version>5.0.7.RELEASE</version>
  31. </dependency>
  32. <dependency>
  33. <groupId>com.fasterxml.jackson.core</groupId>
  34. <artifactId>jackson-databind</artifactId>
  35. <version>2.9.1</version>
  36. </dependency>
  37. <dependency>
  38. <groupId>cn.com.test.springmvc</groupId>
  39. <artifactId>biz</artifactId>
  40. <version>1.0-SNAPSHOT</version>
  41. <scope>compile</scope>
  42. </dependency>
  43. <dependency>
  44. <groupId>org.springframework</groupId>
  45. <artifactId>spring-jdbc</artifactId>
  46. <version>5.1.5.RELEASE</version>
  47. </dependency>
  48. <dependency>
  49. <groupId>mysql</groupId>
  50. <artifactId>mysql-connector-java</artifactId>
  51. <version>8.0.15</version>
  52. </dependency>
  53. </dependencies>
  54.  
  55. <build>
  56. <finalName>web</finalName>
  57. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  58. <plugins>
  59. <plugin>
  60. <artifactId>maven-clean-plugin</artifactId>
  61. <version>3.1.0</version>
  62. </plugin>
  63. <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
  64. <plugin>
  65. <artifactId>maven-resources-plugin</artifactId>
  66. <version>3.0.2</version>
  67. </plugin>
  68. <plugin>
  69. <artifactId>maven-compiler-plugin</artifactId>
  70. <version>3.8.0</version>
  71. </plugin>
  72. <plugin>
  73. <artifactId>maven-surefire-plugin</artifactId>
  74. <version>2.22.1</version>
  75. </plugin>
  76. <plugin>
  77. <artifactId>maven-war-plugin</artifactId>
  78. <version>3.2.2</version>
  79. </plugin>
  80. <plugin>
  81. <artifactId>maven-install-plugin</artifactId>
  82. <version>2.5.2</version>
  83. </plugin>
  84. <plugin>
  85. <artifactId>maven-deploy-plugin</artifactId>
  86. <version>2.8.2</version>
  87. </plugin>
  88. </plugins>
  89. </pluginManagement>
  90. </build>
  91. </project>

pom.xml

运行后,可以得到来自我数据库的测试数据

  1. [{"id":1,"name":"test1"},{"id":2,"name":"我的部门"}]

补充说明

从上面项目结构看到,这个SSM应用分成了几个模块,如下

api 一个大型系统肯定是不止一个应用的,而应用间通常会有数据交互,而数据交互需要应用对外的接口,而api模块的职责就是提供对外接口,通常以jar包的形式发放出去
biz 业务逻辑代码就是写在这里,应用内部的核心,依赖api,common,repository,sal
common   存放帮助类,aop类,异常类等
repository  存储层,对数据库的操作都体现在这里
sal  和api职责相反,主要是调用外部系统的服务
web  control层,给前端提供restful接口

分层的影响其实也是有好有坏,对于复杂的业务来说,分层可以使逻辑清晰,职责分明,如果以后重构代码也能控制好边界,降低风险。再极端一点的例子,如果数据库要从Mysql换到Oracle,可能只需要改repository层的一点点代码和配置信息。

坏处也有的,如果是简单的增删改查业务,也要在各层定义模型,层层透传,相当费劲。

小结

上文演示了如何从零构建一个SSM项目,当然这只是一个最基础功能,后面还会加入日志,aop,异常处理,应用间调用等功能。

基于IDEA和Maven的SSM分层项目搭建的更多相关文章

  1. IDEA 通过Maven创建Spring MVC项目搭建

    概述 本篇随笔主要记录内容如下: 1.通过Maven创建基于Spring Framework类库的MVC项目,免去了繁琐的XML配置: 2.在Idea里面配置Tomcat的测试启动项: Maven创建 ...

  2. Eclipse+Spring+SpringMVC+Maven+Mybatis+MySQL+Tomcat项目搭建

    ---恢复内容开始--- 1. 建表语句及插入数据 CREATE TABLE `book_user` ( user_id INT(11) NOT NULL AUTO_INCREMENT, user_n ...

  3. react基于webpack和babel以及es6的项目搭建

    项目demo地址https://github.com/aushion/webpack_reac_config 1.打开命令提示窗口,输入 mkdir react_test cd react_test ...

  4. 基于vue2.x的webpack升级与项目搭建指南--基础篇

    first thing fitrst 博主声明:绝对不当标题党 有人看最好不过的背景: 十月初对公司产品的前端构建做了一些优化,但还遗留了不少问题(可了解我的前一篇博文:一次webpack小规模优化经 ...

  5. SSM 项目搭建 (IDEA)

    好好想了想,还是准备给大家发一个简单的SSM的项目搭建教程. 我觉得通常来说,只是XML的配置文件可能让人头痛了点,其他的倒真不是问题. 不过话说回来,mybatis一直让我觉得用起来不方便.因为数据 ...

  6. 基于maven的ssm框架整合

    基于maven的ssm框架整合 第一步:通过maven建立一个web项目.                第二步:pom文件导入jar包                              (1 ...

  7. 基于Maven的SSM框架搭建

    Maven + Spring + Spring MVC + Mybatis + MySQL整合SSM框架 1.数据库准备 本文主要想实现SSM框架的搭建,并基于该框架实现简单的登录功能,那么先新建一张 ...

  8. IntelliJ IDEA基于maven构建的web项目找不到jar包

    基于maven构建的springMVC项目,下载好jar包import后,运行提示ClassNotFoundException: java.lang.ClassNotFoundException: o ...

  9. Maven项目搭建(二):Maven搭建SSM框架

    上一章给大家讲解了如何使用Maven搭建web项目. 这次给大家介绍一下怎么使用Maven搭建SSM框架项目. 首先我们来看一下pom.xml的属性介绍: project: pom的xml根元素. p ...

随机推荐

  1. 关于ldap的学习

    主要从以下网站学习了相关基础知识概念,安装与基本配置. http://www.aikaiyuan.com/8269.htmlhttps://segmentfault.com/a/11900000026 ...

  2. iconnect

    https://iconnect.infosysapps.com/vpn/index.html

  3. Java Hashtable详细介绍和使用示例

    ①对Hashtable有个整体认识 和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射.Hashtable 继承于Dictionary,实现了Ma ...

  4. 用random模块实现验证码

    #! /usr/bin/env python3 import random checkcode = "" ## 全部为数字的验证码 # for i in range(4): # c ...

  5. 【GZAdmin】开源BS demo快速搭建

    下载搭建项目:链接:https://pan.baidu.com/s/1jHZ3Kkm 密码:5k4q 项目源码: GZAdmin_API:https://github.com/GarsonZhang/ ...

  6. Django学习笔记之uWSGI详解

    WSGI是什么? WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义 ...

  7. 第三方CSS安全吗?

    原文:https://jakearchibald.com/201...翻译:疯狂的技术宅 本文首发微信公众号:jingchengyideng欢迎关注,每天都给你推送新鲜的前端技术文章 前一段时间,有很 ...

  8. 20145303刘俊谦 《Java程序设计》第4周学习总结

    20145303刘俊谦 <Java程序设计>第4周学习总结 教材学习内容总结 1.继承:继承是面向对象的第二大特征,避免多个类间重复定义共同行为.把单独抽取出来的那个类称为父类,其他的多个 ...

  9. Byte[]分配在哪里?

    http://stackoverflow.com/questions/1113819/arrays-heap-and-stack-and-value-types Your array is alloc ...

  10. poi 取excel单元格内容时,需要判断单元格的类型,才能正确取出

    以下内容非原创,原文链接http://blog.sina.com.cn/s/blog_4b5bc01101015iuq.html ate String getCellValue(HSSFCell ce ...