以下是通過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%n
4. 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ì)步驟