SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。

        猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是问题。想要一起实战吗?,关注公主号猿人工厂获取基础代码,手把手带你开发属于自己的电商系统。
       
从今天开始,我们将进入猿实战的阶段,实现一个前后端分离的电商系统,没有开发框架怎么行?今天是第一个系列,猿人君将带你搭建后端开发框架。

创建应用父模块

父模块负责控制整个应用的结构,因为pzmall-basic作为父项目的存在,无需编写代码,记得在创建完成后,删除项目下的src目录。

SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。_第1张图片

SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。_第2张图片

 

 

创建子模块

考虑到我们需要构建一个B2C(兼容商家端的应用)我们的应用按照代码职责的划分,我们的应用暂时涉及到一下几个模块。

pzmall-basic-common:负责编写项目公用的一些内容,比如工具类。

pzmall-basic-domain:负责项目涉及的实体内容编写。

pzmall-basic-dao:负责数据持久层的内容编写。

pzmall-basic-service:负责业务逻辑层的内容编写。

pzmall-basic-search-util:负责项目搜索引擎工具相关的内容编写。

pzmall-basic-web:负责项目网站端业务内容编写。

pzmall-basic-manweb:负责项目运营管理端业务内容编写。

接下来我们一起来创建子项目pzmall-basic-common。

SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。_第3张图片

SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。_第4张图片

SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。_第5张图片

接下来,以葫芦画瓢,建立pzmall-basic-domain、pzmall-basic-dao、pzmall-basic-service、pzmall-basic-search-util几个子模块,最后得到如下结果。

SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。_第6张图片

由于pzmall-basic-web和pzmall-basic-manweb属于web应用,在创建时有所区别,在选择maven项目类型时记得选择正确的archetype,org.apache.maven.archetypes:maven-archetype-webapp.

SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。_第7张图片

完成后,并在模块的src/main目录下建立java和resources两个目录。

SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。_第8张图片

最后项目的整体结果效果如下,为了测试下效果,编译下项目。

SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。_第9张图片

 

SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。_第10张图片

SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。_第11张图片

调整项目依赖

就项目模块之间的依赖关系而言,pzmall-basic-common和pzmall-basic-serch-util由于编写的是工具类,相对独立,不依赖于其它模块。pzmall-basic-domain、pzmall-basic-dao、pzmall-basic-service、三者的依赖是存在关联关系的,pzmall-basic-service依赖pzmall-basic-dao,pzmall-basic-dao依赖pzmall-basic-domain。而之前提及的pzmall-basic-common和 pzmall-basic-serch-util更多的会在service层被使用。所以,pzmall-basic-service会依赖pzmall-basic-common和pzmall-basic-serch-util。注意哈,pzmall-basic-domain要尽量保持干净,不要和工具类扯上什么关系,否则对今后的架构方面的扩展,是不友好的。而pzmall-basic-web和pzmall-basic-manweb作为项目最终要部署的war包,依赖pzmall-basic-service就可以了。

接下来我们调整引入各个层面所需要的依赖,搭建我们项目开发所需要的框架。

修改父项目pzmall-basic下pom.xml内容为:

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">   4.0.0     com.pz   pzmall-basic    pom    1.0-SNAPSHOT                4.12       4.2.4.RELEASE       2.5       3.2.8        1.2.2       5.1.32       1.0.9       1.3.1       2.3.23       3.2.3.RELEASE               pzmall-basic-common       pzmall-basic-domain       pzmall-basic-dao        pzmall-basic-service       pzmall-basic-search-util       pzmall-basic-web       pzmall-basic-manweb                                                      org.springframework               spring-context               ${spring.version}                                        org.springframework               spring-beans               ${spring.version}                                       org.springframework                spring-webmvc               ${spring.version}                                       org.springframework               spring-jdbc               ${spring.version}                                       org.springframework               spring-aspects                ${spring.version}                                       org.springframework               spring-jms               ${spring.version}                                      org.springframework               spring-context-support               ${spring.version}                                        org.springframework               spring-test               ${spring.version}                                       junit                junit               4.9                                       com.alibaba               fastjson                1.2.29                                       javassist               javassist               3.11.0.GA                                        commons-codec               commons-codec               1.10                                        javax.servlet                servlet-api               ${servlet-api.version}               provided                                                   org.mybatis               mybatis               ${mybatis.version}                                       org.mybatis               mybatis-spring               ${mybatis.spring.version}                                                    mysql               mysql-connector-java                ${mysql.version}                                                   com.alibaba               druid                ${druid.version}                                                     commons-fileupload               commons-fileupload               ${commons-fileupload.version}                                        org.freemarker               freemarker               ${freemarker.version}                                                    org.springframework.security               spring-security-web               4.1.0.RELEASE                                       org.springframework.security               spring-security-config               4.1.0.RELEASE                                        com.github.penggle               kaptcha               2.3.2                                                           javax.servlet                        javax.servlet-api                                                                           org.springframework.security                spring-security-cas               4.1.0.RELEASE                                       org.jasig.cas.client               cas-client-core               3.3.3                                                                           org.slf4j                       log4j-over-slf4j                                                                            org.apache.httpcomponents               httpcore                4.4.4                                       org.apache.httpcomponents               httpclient               4.5.3                                       dom4j               dom4j               1.6.1                                       xml-apis                xml-apis               1.4.01                          

修改pzmall-basic-common下pom.xml内容为:

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">           pzmall-basic        com.pz       1.0-SNAPSHOT       4.0.0    pzmall-basic-common   pzmall-basic-common                       com.pz           pzmall-basic-domain            1.0-SNAPSHOT                            commons-fileupload           commons-fileupload                                    redis.clients            jedis                           org.springframework.data           spring-data-redis                           javax.servlet           servlet-api            provided                           org.apache.httpcomponents           httpclient            

  修改pzmall-basic-domain下pom.xml内容为:

          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">           pzmall-basic        com.pz       1.0-SNAPSHOT       4.0.0    pzmall-basic-domain    pzmall-basic-domain       http://www.example.com           UTF-8                           org.apache.commons            commons-lang3            

修改pzmall-basic-dao下pom.xml内容为:

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">           pzmall-basic        com.pz       1.0-SNAPSHOT       4.0.0    pzmall-basic-dao     pzmall-basic-dao       http://www.example.com                                 org.mybatis            mybatis                           org.mybatis           mybatis-spring                                         mysql           mysql-connector-java                                   com.alibaba           druid                            com.pz           pzmall-basic-domain            1.0-SNAPSHOT                                                     src/main/resources               true                         

修改pzmall-basic-service下pom.xml内容为:

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">           pzmall-basic        com.pz       1.0-SNAPSHOT       4.0.0     pzmall-basic-service    1.0-SNAPSHOT    pzmall-basic-service       http://www.example.com                                org.springframework           spring-context                           org.springframework           spring-beans                           org.springframework           spring-webmvc                           org.springframework            spring-jdbc                           org.springframework           spring-aspects                           org.springframework            spring-jms                           org.springframework           spring-context-support                            org.springframework           spring-jms                           org.springframework           spring-test                            com.alibaba           fastjson                           javassist           javassist                           commons-codec           commons-codec                           javax.servlet           servlet-api           provided                            org.freemarker           freemarker                            com.pz           pzmall-basic-dao           1.0-SNAPSHOT                           com.pz           pzmall-basic-common            1.0-SNAPSHOT            

修改pzmall-basic-search-util下pom.xml内容为:

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">           pzmall-basic        com.pz       1.0-SNAPSHOT       4.0.0     pzmall-basic-search-util    1.0-SNAPSHOT    pzmall-basic-search-util       http://www.example.com                         com.pz           pzmall-basic-domain           1.0-SNAPSHOT                                  com.alibaba           fastjson            

修改pzmall-basic -web下pom.xml内容为:

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">           pzmall-basic        com.pz       1.0-SNAPSHOT       4.0.0    pzmall-basic-web    1.0-SNAPSHOT    war     pzmall-basic-web MavenWebapp       http://www.example.com                                org.springframework           spring-context                           org.springframework            spring-beans                           org.springframework           spring-webmvc                            org.springframework           spring-jdbc                           org.springframework           spring-aspects                            org.springframework           spring-jms                           org.springframework           spring-context-support                           org.springframework           spring-test                             javassist            javassist                           commons-codec           commons-codec                             javax.servlet            servlet-api            provided                                    org.springframework.security           spring-security-web                            org.springframework.security           spring-security-config                            com.pz            pzmall-basic-service           1.0-SNAPSHOT                                                     org.apache.tomcat.maven                tomcat7-maven-plugin               2.2                                                       9203                                        /                                        

修改pzmall-basic -manweb下pom.xml内容为:

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">           pzmall-basic        com.pz        1.0-SNAPSHOT       4.0.0    pzmall-basic-manweb    1.0-SNAPSHOT    war     pzmall-basic-manweb MavenWebapp       http://www.example.com                                 org.springframework           spring-context                           org.springframework           spring-beans                           org.springframework            spring-webmvc                           org.springframework           spring-jdbc                           org.springframework           spring-aspects                           org.springframework           spring-jms                            org.springframework           spring-context-support                           org.springframework           spring-test                             javassist           javassist                           commons-codec           commons-codec                             javax.servlet           servlet-api            provided                                     org.springframework.security           spring-security-web                            org.springframework.security           spring-security-config                              com.pz           pzmall-basic-service           1.0-SNAPSHOT                                                       org.apache.tomcat.maven               tomcat7-maven-plugin               2.2                                                       9201                                        /                                        调整完成后,记得maven编译下,验证项目成功构建。

搭建开发框架

1.在pzmall-basic-dao模块的src/main目录下建立resources/mybatis目录,并在mybaits目录下建立SqlMapConfig.xml文件以及mapper目录。

SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。_第12张图片

 

SqlMapConfig.xml下用于配置mybatis全局相关的一些属性,以及加载哪些mapper配置文件,mapper目录下未来将按模块存放相干的mapper文件。

2.在pzmall-basic-manweb目录的resources目录下分别建立spring和config两个目录。并在resources目录下建立applicationContext.xml文件。如下图所示。

SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。_第13张图片

 

3.整合mybatis,在spring目录中建立文件,spring-dao.xml并输入如下内容。

       xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"       xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsd       http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd       http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd       http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd       http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util.xsd"default-autowire="byName">                             destroy-method="close">                                                                                                                                                                                                                     

4.配置事务相关的内容,在spring目录中建立文件,spring-tx.xml并输入如下内容。​​​​​​​

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:tx="http://www.springframework.org/schema/tx"       xmlns:mvc="http://www.springframework.org/schema/mvc"       xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd       http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd              http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd       http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">                                          

5.配置SpringMVC相关内容,先在spring目录中建立文件spring-service.xml备用,然后再建立一个springmvc.xml文件,并在文件中输入如下内容。​​​​​​​

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"       xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"       xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd       http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"default-autowire="byName">                                                                                                                   text/html;charset=UTF-8                                   application/json                                   application/xml;charset=UTF-8                                                                                                                                                                                                            WriteMapNullValue                                    WriteNullNumberAsZero                                   WriteNullListAsEmpty                                   WriteNullStringAsEmpty                                   WriteNullBooleanAsFalse                                   WriteDateUseDateFormat                                                                                                                                                                                                                                                                                                                            /                                                                                                             

 

 

6.由于我们打算使用前后端分离的方式来开发项目,需要解决跨域问题,我们使用了拦截器的方式来处理这个问题,也在springMVC中做了相应的配置。在pzmall-basic-manweb模块中编写代码。​​​​​​​

package com.pz.basic.mall.interceptor; import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.util.List; /** * 处理跨域请求 */public classCommonInterceptor implements HandlerInterceptor {     private List excludedUrls;     public List getExcludedUrls(){        return excludedUrls;    }     public voidsetExcludedUrls(List excludedUrls) {        this.excludedUrls = excludedUrls;    }     /**     *     * 在业务处理器处理请求之前被调用如果返回false     * 从当前的拦截器往回执行所有拦截器的afterCompletion(),     * 再退出拦截器链, 如果返回true 执行下一个拦截器,     * 直到所有的拦截器都执行完毕再执行被拦截的Controller     * 然后进入拦截器链,     * 从最后一个拦截器往回执行所有的postHandle()     * 接着再从最后一个拦截器往回执行所有的afterCompletion()     *     * @param request     *     * @param response     */    public boolean preHandle(HttpServletRequestrequest, HttpServletResponse response,                             Object handler)throws Exception {        response.setHeader("Access-Control-Allow-Origin","*");       response.setHeader("Access-Control-Allow-Methods", "POST,GET, PUT, OPTIONS, DELETE, PATCH");        response.setHeader("Access-Control-Max-Age","3600");       response.setHeader("Access-Control-Allow-Headers","X-Token, Origin, X-Requested-With, Content-Type, Accept");       response.setHeader("Access-Control-Allow-Credentials","true");        response.setHeader("XDomainRequestAllowed","1");        return true;    }     // 在业务处理器处理请求执行完成后,生成视图之前执行的动作    public void postHandle(HttpServletRequestrequest, HttpServletResponse response, Object handler,                           ModelAndViewmodelAndView) throws Exception {     }     /**     *     * 在DispatcherServlet完全处理完请求后被调用     * 当有拦截器抛出异常时,     * 会从当前拦截器往回执行所有的拦截器的afterCompletion()     *     * @param request     *     * @param response     *     * @param handler     *     */    public voidafterCompletion(HttpServletRequest request, HttpServletResponse response,                                Object handler,Exception ex) throws Exception {     }} 

7.修改pzmall-basic-manweb模块中的resources/config目录下增加db.properties文件,加入数据库相关的配置。​​​​​​​

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/pz_mall_basic?useUnicode=true&characterEncoding=UTF-8jdbc.username=rootjdbc.password=123456

8.在resources目录下新增log4j.properties文件,增加日志相关配置。​​​​​​​

log4j.rootLogger=trace,consolelogging.level.com.pz.mall.dao=DEBUGlog4j.appender.console= org.apache.log4j.ConsoleAppenderlog4j.appender.console.Target= System.outlog4j.appender.console.layout= org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}]%m%n log4j.logger.com.ibatis=DEBUGlog4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUGlog4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUGlog4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUGlog4j.logger.Java.sql.Connection=DEBUGlog4j.logger.java.sql.Statement=DEBUGlog4j.logger.java.sql.PreparedStatement=DEBUG

9.修改pzmall-basic-manweb模块中的web.xml文件,增加应用启动相关配置:​​​​​​​

       xmlns="http://java.sun.com/xml/ns/javaee"       xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"       version="2.5">                            CharacterEncodingFilter              org.springframework.web.filter.CharacterEncodingFilter                                   encoding                     utf-8                                                 forceEncoding                     true                                          CharacterEncodingFilter              /*                             springmvc              org.springframework.web.servlet.DispatcherServlet                                                 contextConfigLocation                     classpath:applicationContext.xml                            1                             springmvc              /*                           org.springframework.web.context.ContextLoaderListener                   contextConfigLocation        classpath:applicationContext.xml     

到此为止,我们项目的开发框架搭建完毕。
  如学习过程中遇到疑难杂症,可以在blog中寻找联系方式,帮你解决。
  

 

 

你可能感兴趣的:(猿进化)