以下是通過eclipse創(chuàng)建基于maven的ssm web項(xiàng)目完整步驟
File -> New->Maven Project(沒有選項(xiàng),參照:eclipse右鍵New添加Maven Project)



2. 生成結(jié)果如下:

3. 配置Maven
添加Source文件夾
接下來需要添加
src/main/java
src/test/java
src/test/resources三個(gè)文件夾
右鍵項(xiàng)目根目錄點(diǎn)擊New -> Source Folder,
建出這三個(gè)文件夾。注意不是建普通的Folder,而是Source Folder。
項(xiàng)目或者文件加上右鍵 new sourceFolder,正常情況下是沒有問題的
如果出現(xiàn)了下面的這情況,其實(shí)是真的存在的只是我們看不到

項(xiàng)目右鍵屬性->Java Build Path

Apply -> Apply and Close-> Ok
設(shè)置好了之后發(fā)現(xiàn), 發(fā)現(xiàn) src/main/java就可以看到了

4. 搭建Spring + SpringMVC +MyBatis框架
修改pom.xml后保存會自動下載, Maven引入項(xiàng)目用到的jar包
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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ncyteng</groupId>
<artifactId>ssmmDemo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>ssmmDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- 用來設(shè)置版本號 -->
<properties>
<srping.version>5.2.3.RELEASE</srping.version>
<mybatis.version>3.5.3</mybatis.version>
<!--項(xiàng)目的編碼格式-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- maven 編譯資源 版本 -->
<maven.compiler.source>1.8</maven.compiler.source>
<!-- maven 編譯目標(biāo)版本 -->
<maven.compiler.target>1.8</maven.compiler.target>
<!-- maven 編譯插件版本 -->
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
<!-- 用到的jar包 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!-- 表示開發(fā)的時(shí)候引入,發(fā)布的時(shí)候不會加載此包 -->
<scope>test</scope>
</dependency>
<!-- java servlet包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0-b06</version>
<scope>provided</scope>
</dependency>
<!-- spring框架包 start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${srping.version}</version>
</dependency>
<!-- spring框架包 end -->
<!-- mybatis框架包 start -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
<!-- mybatis框架依賴插件 -->
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.10.3</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-launcher</artifactId>
<version>1.10.3</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.2.10</version>
<exclusions>
<exclusion>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.24.1-GA</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- <dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.2</version>
</dependency> -->
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.2.10</version>
</dependency>
<!-- <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
</dependency> -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.26</version>
<scope>compile</scope>
</dependency>
<!-- mybatis框架包 end -->
<!-- 數(shù)據(jù)庫驅(qū)動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<!-- 導(dǎo)入dbcp的jar包,用來在applicationContext.xml中配置數(shù)據(jù)庫 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.8.0</version>
</dependency>
<!-- JSTL標(biāo)簽類 start -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- JSTL end -->
<!-- log start -->
<dependency>
<groupId>apache-log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.8</version>
</dependency>
<!-- log END -->
</dependencies>
<build>
<finalName>ncyteng</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8888</port>
</configuration>
</plugin>
</plugins>
</build>
</project>5. 在src/main/resources[等同于classpath目錄]下創(chuàng)建如下文件
1> applicationContext.xml
內(nèi)容如下:
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 引入配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties" />
</bean>
<!--配置數(shù)據(jù)源 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close" scope="singleton">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 初始化連接大小 -->
<property name="initialSize" value="${initialSize}"></property>
<!-- 連接池最大數(shù)量 -->
<property name="maxTotal" value="${maxTotal}"></property>
<!-- 連接池最大空閑 -->
<property name="maxIdle" value="${maxIdle}"></property>
<!-- 連接池最小空閑 -->
<property name="minIdle" value="${minIdle}"></property>
</bean>
<!-- 添加事務(wù)支持 -->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 開啟事務(wù)注解 -->
<tx:annotation-driven transaction-manager="txManager" />
<!-- 配置mybitas工廠,同時(shí)指定數(shù)據(jù)源,并與MyBatis完美整合 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自動掃描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:mybatis/mapper/*.xml" />
</bean>
<!-- Mapper代理開發(fā),使用Spring自動掃描Mybatis的接口并裝配 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--basePackage指定要掃描的包,在此包之下的映射器都會被搜索到。
可指定多個(gè)包,包與包之間用逗號或分號分隔-->
<property name="basePackage" value="com.ncyteng.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
</beans>2> jdbc.properties 連接數(shù)據(jù)庫內(nèi)容如下
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/ssmone?characterEncoding=utf8 username=root password=root initialSize=5 maxTotal=20 maxIdle=20 minIdle=1
3> log4j.properties
#定義LOG輸出級別
log4j.rootLogger=INFO,Console,File
#定義日志輸出目的地為控制臺
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#可以靈活地指定日志輸出格式,下面一行是指定具體的格式
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
#文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件
log4j.appender.File = org.apache.log4j.RollingFileAppender
#指定輸出目錄
log4j.appender.File.File = logs/ssm.log
#定義文件最大大小
log4j.appender.File.MaxFileSize = 10MB
# 輸出所以日志,如果換成DEBUG表示輸出DEBUG以上級別日志
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n4. spring-mvc.xml
<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 使用掃描機(jī)制掃描包 --> <context:component-scan base-package="com.ncyteng.controller" /> <mvc:annotation-driven /> <!-- annotation-driven用于簡化開發(fā)的配置,注解DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter --> <!-- 完成視圖的對應(yīng) --> <!-- 對轉(zhuǎn)向頁面的路徑解析。prefix:前綴, suffix:后綴 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
5. 修改src/main/webapp/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>ssmmDemo</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 實(shí)例化ApplicationContext容器 --> <context-param> <!-- 加載src目錄下的 applicationContext-*.xml文件--> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 編碼過濾器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Spring MVC servlet --> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- ContextLoaderListener的作用就是啟動Web容器時(shí),自動裝配ApplicationContext.xml的配置信息。 因?yàn)樗鼘?shí)現(xiàn)了ServletContextListener這個(gè)接口,在web.xml配置這個(gè)監(jiān)聽器,啟動容器時(shí),就會默認(rèn)執(zhí)行它實(shí)現(xiàn)的方法。 --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> </web-app>
6. 創(chuàng)建數(shù)據(jù)庫及表格
CREATE DATABASE `ssmone` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; CREATE TABLE `user` ( `uid` tinyint(2) NOT NULL, `uname` varchar(20) DEFAULT NULL, `usex` varchar(10) DEFAULT NULL, PRIMARY KEY (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7. 創(chuàng)建一個(gè)持久化類
在src/main/java/下創(chuàng)建一個(gè)名為com.ncyteng.po的包, 并在該包中創(chuàng)建一個(gè)MyUser類
代碼如下:
package com.ncyteng.po;
public class MyUser {
private Integer uid;
private String uname;
private String usex;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUsex() {
return usex;
}
public void setUsex(String usex) {
this.usex = usex;
}
@Override
public String toString() { // 為了方便查看結(jié)果,重寫了toString方法
return "User[uid=" + uid + ",uname=" + uname + ",usex=" + usex + "]";
}
}8. 創(chuàng)建dao層
在src/main/java/下創(chuàng)建一個(gè)名為com.ncyteng.dao的包, 并在該包中創(chuàng)建一個(gè)UserDao的接口
代碼如下:
package com.ncyteng.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import com.ncyteng.po.MyUser;
@Repository("userDao")
@Mapper
/*
* 使用Spring自動掃描MyBatis的接口并裝配 (Spring將指定包中所有被注解標(biāo)注的接口自動裝配為Mybatis的映射接口
*/
public interface UserDao {
/**
* 接口方法對應(yīng)的SQL映射文件UserMapper.xml中的id
*/
public MyUser selectUserById(Integer uid);
public List<MyUser> selectAllUser();
public int addUser(MyUser user);
public int updateUser(MyUser user);
public int deleteUser(Integer uid);
}9. 在src/main/resources下創(chuàng)建mybatis.mapper包, 并在里面創(chuàng)建UserMapper.xml,內(nèi)容如下
<?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="com.ncyteng.dao.UserDao">
<!--根據(jù)uid查詢一個(gè)用戶信息 -->
<select id="selectUserById" parameterType="Integer" resultType="com.ncyteng.po.MyUser">
select * from user where uid = #{uid}
</select>
<!-- 查詢所有用戶信息 -->
<select id="selectAllUser" resultType="com.ncyteng.po.MyUser">
select * from user
</select>
<!-- 添加一個(gè)用戶,#{uname}為 com.mybatis.po.MyUser 的屬性值 -->
<insert id="addUser" parameterType="com.ncyteng.po.MyUser">
insert into user (uname,usex) values(#{uname},#{usex})
</insert>
<!--修改一個(gè)用戶 -->
<update id="updateUser" parameterType="com.ncyteng.po.MyUser">
update user set uname = #{uname},usex = #{usex} where uid = #{uid}
</update>
<!-- 刪除一個(gè)用戶 -->
<delete id="deleteUser" parameterType="Integer">
delete from user where uid = #{uid}
</delete>
</mapper>10. 在src/main/java/下創(chuàng)建com.ncyteng.controller包,并創(chuàng)建控制器UserController, 代碼如下:
package com.ncyteng.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 com.ncyteng.dao.UserDao;
import com.ncyteng.po.MyUser;
@Controller("userController")
public class UserController {
@Autowired
private UserDao userDao;
@RequestMapping("/select")
public String test(Model model) {
// 查詢一個(gè)用戶
MyUser auser = userDao.selectUserById(1);
System.out.println(auser);
System.out.println("============================");
// 添加一個(gè)用戶
MyUser addmu = new MyUser();
addmu.setUname("莊子");
addmu.setUsex("男");
int add = userDao.addUser(addmu);
System.out.println("添加了" + add + "條記錄");
System.out.println("============================");
// 修改一個(gè)用戶
MyUser updatemu = new MyUser();
updatemu.setUid(1);
updatemu.setUname("老子");
updatemu.setUsex("男");
int up = userDao.updateUser(updatemu);
System.out.println("修改了" + up + "條記錄");
System.out.println("============================");
// 刪除一個(gè)用戶
int dl = userDao.deleteUser(1);
System.out.println("刪除了" + dl + "條記錄");
System.out.println("============================");
// 查詢所有用戶
List<MyUser> list = userDao.selectAllUser();
for (MyUser myUser : list) {
System.out.println(myUser);
}
List<MyUser> list1 = userDao.selectAllUser();
model.addAttribute("userList", list1);
return "user/userList";
}
}11. 在src/main/webapp/WEB-INF/下建views/user文件夾,并在下面建userList.jsp文件,內(nèi)容如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>顯示用戶信息</title>
</head>
<body>
用戶信息
<br>
<c:forEach items="${userList }" var="user">
${user.uid }
${user.uname }
${user.usex }<br>
</c:forEach>
</body>
</html>12. 最終結(jié)構(gòu)如下:

13. 項(xiàng)目右鍵->run as->maven build

14. 瀏覽器訪問如下:

相關(guān): 純SSM框架搭建詳細(xì)步驟
