maven分模块构建ssm项目
开发工具使用idea;由于内容有点多,很多地方就不用图文解释了;相信读者能选择看此篇文章,idea构建maven普通工程等知识肯定已经烂熟于胸了。
一、数据库环境准备
这里以MySQL数据库为例;
-- 准备数据库环境
CREATE DATABASE maven;
USE maven;
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `items`;
CREATE TABLE `items` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) DEFAULT NULL,
`price` FLOAT(10,0) DEFAULT NULL,
`pic` VARCHAR(40) DEFAULT NULL,
`createtime` DATETIME DEFAULT NULL,
`detail` VARCHAR(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
INSERT INTO `items` VALUES
('1', '面壁计划', '1000', NULL, '2018-03-13 09:29:30', '带我走上人生巅峰'),
('2', '程心', NULL, NULL, '2018-03-28 10:05:52', '插入测试'),
('3', '降维打击', '199', NULL, '2018-03-07 10:08:04', '插入测试'),
('7', '黑暗森林', NULL, NULL, NULL, NULL),
('8', '三体', NULL, NULL, NULL, NULL);
----------------------------------
二、创建父工程
1). 使用骨架创建maven工程/模块
- 骨架名:
org.apache.maven.archetypes:maven-archetype-site
- GroupId:
com.itheima
公司域名 - Artifactid:
B_maven_ssm_parent
父工程项目名 - 注意maven的配置,使用本地仓库的配置 (建议配置阿里云镜像)
- 注意父工程的pom.xml中的打包方式为
pom
- 父工程只需要一个pom.xml文件,可以将其他文件夹删除掉 (千万别删
.imi
文件,这个是idea工具的配置文件,删了此工程就白建了)
2). 父工程项目结构
3). 配置jar包坐标,锁定依赖,指定jdk编译版本以及tomcat7插件版本
1.【注意】
- 实际生产时可以将下面的配置方式直接拷贝使用。
- 如果项目中需要使用到新技术需要导入新的坐标,一定要查看该 maven工程依赖关系图 看是否有jar包冲突,如果有要及时解决掉,否则项目可能会出现问题!
2. 方式①: 【推荐】
4.0.0
com.itheima
B_maven_ssm_parent
pom
1.0-SNAPSHOT
ssm_dao
ssm_service
ssm_web
5.0.2.RELEASE
1.6.6
1.2.12
1.2.3
5.1.6
3.4.5
5.0.1.RELEASE
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-test
${spring.version}
org.mybatis
mybatis
${mybatis.version}
org.springframework
spring-jdbc
org.aspectj
aspectjweaver
1.6.8
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-orm
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-core
${spring.version}
org.springframework
spring-test
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-tx
${spring.version}
junit
junit
4.12
test
mysql
mysql-connector-java
${mysql.version}
javax.servlet
javax.servlet-api
3.1.0
provided
javax.servlet.jsp
jsp-api
2.0
provided
jstl
jstl
1.2
log4j
log4j
${log4j.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
1.3.0
c3p0
c3p0
0.9.1.2
jar
compile
com.github.pagehelper
pagehelper
5.1.2
org.springframework.security
spring-security-web
${spring.security.version}
org.springframework.security
spring-security-config
${spring.security.version}
org.springframework.security
spring-security-core
${spring.security.version}
org.springframework.security
spring-security-taglibs
${spring.security.version}
com.alibaba
druid
1.0.9
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
org.apache.maven.plugins
maven-compiler-plugin
3.7.0
1.8
3. 方式②: (参考) 值提供依赖
5.0.2.RELEASE
5.0.2.RELEASE
3.4.5
org.mybatis
mybatis
${mybatis.version}
org.springframework
spring-webmvc
${springmvc.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-core
${spring.version}
org.springframework
spring-aop
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-expression
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-aspects
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-test
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-tx
${spring.version}
org.mybatis
mybatis
org.mybatis
mybatis-spring
1.3.1
mysql
mysql-connector-java
5.1.32
com.alibaba
druid
1.0.9
org.springframework
spring-webmvc
${springmvc.version}
org.springframework
spring-context
org.springframework
spring-core
org.springframework
spring-aop
org.springframework
spring-web
org.springframework
spring-expression
org.springframework
spring-beans
org.springframework
spring-aspects
org.springframework
spring-context-support
org.springframework
spring-test
org.springframework
spring-jdbc
org.springframework
spring-tx
org.springframework
spring-jdbc
org.springframework
spring-tx
junit
junit
4.12
test
javax.servlet
servlet-api
2.5
provided
javax.servlet
jsp-api
2.0
provided
javax.servlet
jstl
1.2
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.8
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
4). 发布
父工程创建完成执
install
命令将父工程发布到仓库方便子工程继承:
三、创建ssm_dao层模块
1). 不使用骨架创建ssm_dao层模块
- 在idea左侧项目结构父工程上右击创建maven模块
- 跳过骨架选择,直接next
- 默认继承父工程,别修改,填写模块名即可
ssm_dao
next - 注意目录结构,ssm_dao要在B_maven_ssm_parent下 finish
2). 项目结构
3). 代码以及配置文件
1. 配置文件
- 配置ssm_dao的pom.xml
注意,打包方式为jar包
ssm_dao
jar
junit
junit
4.12
test
- spring整合MyBatis的配置模块文件springContext-dao.xml
1. 代码文件
- dao接口 ItemsDao
package com.itheima.dao;
import com.itheima.domain.Items;
public interface ItemsDao {
Items findById(Integer id);
}
- pojo Items: get/set/toString方法请自动补齐
public class Items implements Serializable {
private Integer id;
private String name;
private Double price;
private String pic;
private Date createtime;
private String detail;
...
- dao接口代理配置文件 ItemsDao.xml
- 单元测试文件
@Test
public void testDao() {
// 获取 spring 容器
ApplicationContext ac = new ClassPathXmlApplicationContext(
"classpath:spring/applicationContext-dao.xml");
// 获取dao
ItemsDao bean = ac.getBean(ItemsDao.class);
// 调用方法测试
System.out.println(bean.findById(1));
}
4). 将ss_dao install到本地仓库
四、创建ssm_service层模块
1). 不使用骨架的方式创建ssm_service层模块
- 在idea左侧项目结构父工程上右击创建maven模块
- 跳过骨架选择,直接next
- 默认继承父工程,别修改,填写模块名即可
ssm_service
next - 注意目录结构,ssm_service要在B_maven_ssm_parent下 finish
2). 项目结构
3). 代码以及配置文件
1.配置文件
- pom.xml配置文件:
注意,打包方式为
jar
; ssm_service层依赖ssm_dao;需要导入坐标(之前已经install到本地仓库了)
ssm_service
jar
com.itheima
ssm_dao
1.0-SNAPSHOT
junit
junit
4.12
test
- spring配置文件分支 applicationContext-service.xml
2.代码文件
- service接口 ItemsService
package com.itheima.service;
import com.itheima.domain.Items;
public interface ItemsService {
public Items findById(Integer id);
}
- service层实现类
package com.itheima.service.impl;
import com.itheima.dao.ItemsDao;
import com.itheima.domain.Items;
import com.itheima.service.ItemsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ItemsServiceImpl implements ItemsService {
@Autowired
private ItemsDao itemsDao;
@Override
public Items findById(Integer id) {
return itemsDao.findById(id);
}
}
- junit测试: 注意上一步中的注释说明!
@Test
public void testService() {
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext(
"classpath:spring/applicationContext-service.xml");
ItemsService bean = ac.getBean(ItemsService.class);
System.out.println(bean.findById(2));
}
4). 将ss_service install 到本地仓库
五、创建ssm_web层模块
1). 选择骨架创建项目
也可以使用非骨架方式创建
- 骨架名:
org.apache.maven.archetypes:maven-archetype-webapp
- 填写工程名:
ssm_web
- 创建
src/main/java
Make Directory as Sources Root - 创建
src/main/resources
Make Directory as Resources Root
2). 项目结构
3). 代码以及配置文件
1. 配置文件
- pom.xml: 注意,web层打包方式为
war
ssm_web
war
ssm_web Maven Webapp
http://www.example.com
com.itheima
ssm_service
1.0-SNAPSHOT
- web.xml配置文件
encoding
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
encoding
/*
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext.xml
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
springmvc
/
- spring综合文件applicationContext.xml
- SpringMVC配置文件springmvc.xml
- log4j.properties日志配置文件
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
2. 代码文件
- 控制器代码 ItemsController
package com.itheima.controller;
import com.itheima.domain.Items;
import com.itheima.service.ItemsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/items")
public class ItemsController {
@Autowired
private ItemsService itemsService;
@RequestMapping("/findDetail/{id}")
public String findDetail(Model model, @PathVariable Integer id) {
Items item = itemsService.findById(id);
model.addAttribute("item", item);
return "itemDetail";
}
}
- 首页测试代码index.jsp 核心
访问测试
- 回馈页面 item.Detail.jsp 核心