初衷:自己搭建SpringMVC,将数据库访问操作作为一个单独的基础项目,打包后引入至其他项目。通过maven管理,轻松实现包的版本控制,项目打包,项目发布。
工具:STS;框架:SpringMVC Mybatis;管理:maven;形式:一个父maven,N个子项目;
一、父项目的创建
右击new–>maven project–>next ,然后选中Artifact Id为 maven-archetype-quickstart的一行,点击下一步。
输入父项目的基本信息,finish就ok了。
至此,父项目完成了大半。
接下来保留pom.xml文件,其他都可以删除,将pom中packaging改为pom,然后就可以创建子项目了。
在这里,父项目会有红叉,项目上右击,Maven中update project可以解决。
下面我创建2个子项目,其中一个为web项目,一个为数据库访问项目(打包成jar引入web项目)。

二、子项目1创建(数据库访问项目)

在父项目上右击,在new中选择other…

父模块为maven项目子模块为springboot maven 父子项目打包_依赖


选择Maven Module,勾选如下图,并输入项目名称,还有需要选择你的父项目(父项目上右击的可以不用修改):

父模块为maven项目子模块为springboot maven 父子项目打包_maven_02


进入下一步,默认打包类型为jar不需改变,输入名称和描述(在pom中可配置):

父模块为maven项目子模块为springboot maven 父子项目打包_spring mvc_03


点击完成后,该项目就自动在父项目文件夹下(父项目pom.xml中会多出modules,包含多个子项目),并且在开发工具中也有该项目。

右击项目,选择配置,将项目转换成Java项目,并勾选:

父模块为maven项目子模块为springboot maven 父子项目打包_maven_04


父模块为maven项目子模块为springboot maven 父子项目打包_maven_05


个人的目录结构,mapper目录下放入mybatis文件:

父模块为maven项目子模块为springboot maven 父子项目打包_maven_06


配置文件applicationContext-basedb.xml:

扫描service

<context:component-scan base-package="com.cn.**.service" />

读取数据库配置文件

<bean id="config" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:config/db_config.properties</value>
            </list>
        </property>
    </bean>
    <!-- proxool数据库 -->
    <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
        <property name="driver" value="${db.mysql.dirverClass}" />
        <property name="driverUrl" value="${db.mysql.url}" />
        <property name="user" value="${db.mysql.username}" />
        <property name="password" value="${db.mysql.password}" />
        ......
    </bean>

mybatis:
扫描dao接口:

<bean class= "org.mybatis.spring.mapper.MapperScannerConfigurer" >
        <property name="basePackage" value="com.cn.**.dao" />
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name= "mapperLocations" value="classpath:mappers/mapper/*.xml"/>扫描mapper
    </bean>

使用动态代理生成接口的实现类。

接下来配置pom.xml:

关于dependency,在父项目中可以管理所有子项目的依赖,以及依赖的版本:

父pom:

父模块为maven项目子模块为springboot maven 父子项目打包_maven_07


子pom,不用再定义版本号,升级也只需修改父pom的版本,更新子项目即可:

父模块为maven项目子模块为springboot maven 父子项目打包_maven_08


配置子项目build:

<build>
        <finalName>xxx</finalName>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <includeEmptyDirs>true</includeEmptyDirs>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                    <testSourceDirectory>src/test/resources</testSourceDirectory>
                </configuration>
            </plugin>

        </plugins>
        <resources>
            <resource>
                <directory>src/main/java</directory>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>

到此,可以开发编写代码了。

三、子项目2创建(web项目)

相同的创建项目方式,将项目转换成web项目:

父模块为maven项目子模块为springboot maven 父子项目打包_依赖_09


项目结构:

父模块为maven项目子模块为springboot maven 父子项目打包_spring mvc_10


在applicationContext-web.xml中:

<!--视图解析器 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <!-- webroot到一指定文件夹文件路径 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 视图名称后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>

    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置上传文件的最大尺寸为10MB : 100010485761 -->
        <property name="maxUploadSize">
            <value>10001048576</value>
        </property>
    </bean>

在controller-config.xml中:

<context:component-scan base-package="com.cn.*" />
    <mvc:annotation-driven />
    <context:annotation-config />
    <mvc:default-servlet-handler />

web.xml中的配置:

......
<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
          classpath*:config/applicationContext-*.xml
        </param-value>
    </context-param>
    <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:config/controller-config.xml
            </param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
......

此处提示:classpath 与 classpath* 的区别:

classpath只访问读取项目中的路径(第一个找到的编译路径),classpath* 访问读取所有编译路径,包括jar包中的路径。

之后,pom文件也有配置的地方:

父模块为maven项目子模块为springboot maven 父子项目打包_依赖_11


此处为数据库访问项目的信息。

当项目引入后,就可使用service进行数据库操作了。

build配置与子项目1相同。

接下来放入tomcat启动,对于使用eclipse的朋友不陌生。

web项目右击配置:

父模块为maven项目子模块为springboot maven 父子项目打包_依赖_12


父子项目:

父模块为maven项目子模块为springboot maven 父子项目打包_mybatis_13

提:maven–>update project :更新项目,但也相当于还原maven配置,所以更新后还要查看下所有配置。
classpath与classpath* 的关注,可能会引起注入失败等情况。
utility module:不勾选则其他项目不能使用该项目。

注:本文省略了很多细节,但大致流程就是如此了,搭建过程中遇到了很多问题,目前都解决了,有不明之处可一起交流。