初衷:自己搭建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 Module,勾选如下图,并输入项目名称,还有需要选择你的父项目(父项目上右击的可以不用修改):
进入下一步,默认打包类型为jar不需改变,输入名称和描述(在pom中可配置):
点击完成后,该项目就自动在父项目文件夹下(父项目pom.xml中会多出modules,包含多个子项目),并且在开发工具中也有该项目。
右击项目,选择配置,将项目转换成Java项目,并勾选:
个人的目录结构,mapper目录下放入mybatis文件:
配置文件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:
子pom,不用再定义版本号,升级也只需修改父pom的版本,更新子项目即可:
配置子项目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项目:
项目结构:
在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文件也有配置的地方:
此处为数据库访问项目的信息。
当项目引入后,就可使用service进行数据库操作了。
build配置与子项目1相同。
接下来放入tomcat启动,对于使用eclipse的朋友不陌生。
web项目右击配置:
父子项目:
提:maven–>update project :更新项目,但也相当于还原maven配置,所以更新后还要查看下所有配置。
classpath与classpath* 的关注,可能会引起注入失败等情况。
utility module:不勾选则其他项目不能使用该项目。
注:本文省略了很多细节,但大致流程就是如此了,搭建过程中遇到了很多问题,目前都解决了,有不明之处可一起交流。