在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain/bean(域模型层)、dao/mapper(数据库访问层)、service(业务逻辑层)、web/controller(表现层),这样分层之后,各个层之间的职责会比较明确,后期维护起来也相对比较容易,今天我们就是使用Maven来构建以上的各个层。
项目结构如下:
Maven-ssm-base
|---- pom.xml
|---- Maven-ssm-bean
|---- pom.xml
|---- Maven-ssm-mapper
|---- pom.xml
|---- Maven-ssm-service
|---- pom.xml
|---- Maven-ssm-web
|---- pom.xml
一、创建父项目,在父项目中加入依赖
● 新建一个maven项目,选择存储位置,并选择创建一个简单的maven工程
● 输入Group Id、Artifact Id、Packaging,packaging选择pom包
● 生成父级工程
● 在base父项目pom.xml中建立依赖管理
<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.alin</groupId> <artifactId>maven-ssm-base</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <properties><!-- 声明版本号 --> <!-- lib version --> <spring.version>5.0.8.RELEASE</spring.version> <mybais.version>3.4.6</mybais.version> <mybatis-spring.version>1.3.2</mybatis-spring.version> <mysql-connector.version>5.1.46</mysql-connector.version> <ojdbc7.version>12.1.0.2.0</ojdbc7.version> <druid.version>1.0.16</druid.version> <aopalliance.version>1.0</aopalliance.version> <aspectj.weaver.version>1.6.4.RELEASE</aspectj.weaver.version> <commons.logging.version>1.1.1</commons.logging.version> <jstl.version>1.2</jstl.version> <log4j.version>1.2.16</log4j.version> <slf4j-api.version>1.6.1</slf4j-api.version> <slf4j-nop.version>1.6.4</slf4j-nop.version> <fileupload.version>1.3.1</fileupload.version> <jackson.version>2.9.6</jackson.version> <servlet-api.version>8.5.32</servlet-api.version> <jsp-api.version>8.5.32</jsp-api.version> <!-- plugins version --> <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version> <tomcat7-maven-plugin.version>2.2</tomcat7-maven-plugin.version> </properties> <!-- 锁定版本,声明版本 --> <dependencyManagement> <dependencies> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- spring end --> <!-- mybais --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybais.version}</version> </dependency> <!-- mybatis - spring 整合包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis-spring.version}</version> </dependency> <!-- json --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <!-- json end --> </dependencies> </dependencyManagement> <dependencies> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <!-- spring end --> <!-- mybais --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <!-- mybatis - spring 整合包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector.version}</version> </dependency> <dependency> <groupId>cn.easyproject</groupId> <artifactId>ojdbc7</artifactId> <version>${ojdbc7.version}</version> </dependency> <!-- mysql end --> <!-- 阿里巴巴的数据库连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- aop --> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>${aopalliance.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>com.springsource.org.aspectj.weaver</artifactId> <version>${aspectj.weaver.version}</version> </dependency> <!-- aop end --> <!-- logging --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>com.springsource.org.apache.commons.logging</artifactId> <version>${commons.logging.version}</version> </dependency> <!-- jsp标准标签库 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <!-- log --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j-api.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>${slf4j-nop.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> <!-- log end --> <!--文件上传 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>${fileupload.version}</version> </dependency> <!-- json --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <!-- json end --> <!-- servlet-api 8.5.32 --> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-servlet-api</artifactId> <version>${servlet-api.version}</version> <scope>provided</scope> </dependency> <!-- jsp-api 8.5.32 --> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jsp-api</artifactId> <version>${jsp-api.version}</version> <scope>provided</scope> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${maven-compiler-plugin.version}</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>${tomcat7-maven-plugin.version}</version> <configuration> <url>http://localhost:8080/manager/text</url> <username>alin</username> <password>123123</password> </configuration> </plugin> </plugins> <!-- 配置文件放行 --> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <!-- 放行main/resources下的配置文件 如果不放行spring mybatis等配置文件不会被打到包里从而导致错误 --> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build> <!-- 配置Maven的远程仓库 --> <distributionManagement> <!-- 发布版 --> <repository> <id>releases</id> <url>http://localhost:8081/repository/maven-releases/</url> </repository> <!-- 快照版 --> <snapshotRepository> <id>alin-snapshot</id> <url>http://localhost:8081/repository/alin-snapshot/</url> </snapshotRepository> </distributionManagement> <!-- mapper模块 --> <modules> <module>mavem-ssm-mapper</module> <module>maven-ssm-bean</module> <module>maven-ssm-service</module> <module>maven-ssm-controller</module> </modules> </project>
二、创建子模块
● 右击父工程名 -> New -> Project,然后选择新建一个Maven Module工程,【Next】
● 设置子工程名以及父工程,勾选不使用模板创建,【Finish】
● 选择子项目打包方式为jar(一般非web层为jar包,web层为war包),然后点击【Finish】
● 依次创建bean、mapper、service、controller子模块,并根据子模块所需创建配置文件
● 子项目创建完成 - 完成之后可以看到在父级目录中生成了子模块,里面包含src目录和pom.xml文件
● bean
<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> <parent> <groupId>cn.alin</groupId> <artifactId>maven-ssm-base</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>maven-ssm-bean</artifactId> </project>
package cn.alin.bean; public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User [username=" + username + ", password=" + password + "]"; } }
package cn.alin.bean; public class ItemInfo { // id private String item_id; // name private String item_name; // type private String item_type; // price private Double item_price; public String getItem_id() { return item_id; } public void setItem_id(String item_id) { this.item_id = item_id; } public String getItem_name() { return item_name; } public void setItem_name(String item_name) { this.item_name = item_name; } public String getItem_type() { return item_type; } public void setItem_type(String item_type) { this.item_type = item_type; } public Double getItem_price() { return item_price; } public void setItem_price(Double item_price) { this.item_price = item_price; } @Override public String toString() { return "ItemInfo [item_id=" + item_id + ", item_name=" + item_name + ", item_type=" + item_type + ", item_price=" + item_price + "]"; } }
● mapper
<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> <parent> <groupId>cn.alin</groupId> <artifactId>maven-ssm-base</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>mavem-ssm-mapper</artifactId> <dependencies> <dependency> <groupId>cn.alin</groupId> <artifactId>maven-ssm-bean</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
package cn.alin.mapper; import java.util.List; import cn.alin.bean.ItemInfo; public interface ItemMapper { List<ItemInfo> getAllList(); }
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.alin.mapper.ItemMapper"> <!-- List<ItemInfo> getAllList(); --> <select id="getAllList" resultType="ItemInfo"> SELECT item_id,item_name,item_type,item_price FROM item_info </select> </mapper>
jdbc.driverClass=com.mysql.jdbc.Driver jdbc.jdbcUrl=jdbc:mysql://localhost:3306/ssm_springmvc?useUnicode=true&characterEncoding=utf-8&useSSL=true jdbc.user=root jdbc.password=123456
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 读取配置文件:数据库 --> <context:property-placeholder location="classpath:db.properties" /> <!-- 配置C3P0数据源 --> <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driverClass}" /> <property name="url" value="${jdbc.jdbcUrl}" /> <property name="username" value="${jdbc.user}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- 配置Mybatis --> <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!-- 配置bean别名 --> <property name="typeAliasesPackage" value="cn.alin.bean" /> </bean> <!-- 配置mapper工厂 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="cn.alin.mapper" /> </bean> </beans>
● service
<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> <parent> <groupId>cn.alin</groupId> <artifactId>maven-ssm-base</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>maven-ssm-service</artifactId> <version>0.0.1</version> <dependencies> <dependency> <groupId>cn.alin</groupId> <artifactId>mavem-ssm-mapper</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
package cn.alin.service; import java.util.List; import cn.alin.bean.ItemInfo; public interface ItemService { List<ItemInfo> getAllList(); }
package cn.alin.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import cn.alin.bean.ItemInfo; import cn.alin.mapper.ItemMapper; @Service public class ItemServiceImpl implements ItemService { @Autowired private ItemMapper itemMapper; @Override public List<ItemInfo> getAllList() { return itemMapper.getAllList(); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 开启注解扫描 --> <context:component-scan base-package="cn.alin.service" /> </beans>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!-- 事务核心管理器 --> <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 注解事务 --> <tx:annotation-driven transaction-manager="transactionManager" /> </beans>
● controller - web层的打包方式是war
<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> <parent> <groupId>cn.alin</groupId> <artifactId>maven-ssm-base</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>cn.alin.maven-ssm</groupId> <artifactId>maven-ssm-controller</artifactId> <packaging>war</packaging> <dependencies> <dependency> <groupId>cn.alin</groupId> <artifactId>maven-ssm-service</artifactId> <version>0.0.1</version> </dependency> </dependencies> </project>
package cn.alin.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import cn.alin.bean.ItemInfo; import cn.alin.bean.User; import cn.alin.service.ItemService; @Controller public class UserConteoller { @Autowired private ItemService itemService; @RequestMapping("/login2") public String login(User user, Model model) { System.err.println("user = " + user); model.addAttribute("User", user); return "list"; } @RequestMapping("/list2") public String list(Model model) { List<ItemInfo> itemList = itemService.getAllList(); for (ItemInfo itemInfo : itemList) { System.out.println("itemInfo = " + itemInfo); } model.addAttribute("itemList", itemList); return "item_list"; } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 开启注解扫描 --> <context:component-scan base-package="cn.alin.controller" /> <!-- 开启注解驱动 --> <mvc:annotation-driven /> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean name="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 上传文件的编码 --> <property name="defaultEncoding" value="UTF-8" /> </bean> </beans>
三、打包和发布
● 右击父工程名 -> Run As -> Maven build... -> clean tomcat7:deploy 或 clean tomcat7:redeploy
【run】部署项目
● 部署成功 - 访问http://localhost:8080/maven-ssm-controller测试