IDEA創建SSM(Spring+SpringMVC+Mybatis)項目-Maven版

一、項目準備

1.準備工作

本次搭建是基於IDEA創建Maven項目-Web版之上進行搭建的,由於內容重複,故在此不做累贅直接跳過此部分工作。我這裏的項目名是:MavenSSMDemo,你可以使用你自己的項目名稱。
不知道如何使用Maven創建Web項目的小夥伴可移步:
IDEA創建Maven項目-Web版

2.完善項目

1.新建Java源代碼文件夾,用來保存Java代碼。操作流程:1.在main上右鍵->New->Package->填入Java->Java右鍵->Mark Directory as->Resource Root
2.新建views文件夾來保存jsp頁面,添加的位置是在WEB-INF之下。

3.項目截圖

上面都已經做好之後,項目的文件夾結構基本完整。下面跟着我一步步來搭建,要是有問題可以聯繫我,一般都是下班之後會給你回覆。
在這裏插入圖片描述

二、創建項目

1.配置文件

1.user.mapper.xml

resouces下新建mapper文件夾,用來保存實體類的xml配置文件,在mybatis掃描的時候可以掃描到。

<?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.sjsq.model.user.mapper">
    <select id="list" resultType="User">
        select * from user;
    </select>

    <select id="selectUser" resultType="User">
        select * from user where id=#{id};
    </select>
</mapper>

2.applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--suppress ALL -->
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   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.1.xsd
                        http://www.springframework.org/schema/tx
                        http://www.springframework.org/schema/tx/spring-tx.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context.xsd">

	<!-- 加載properties文件 -->
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="classpath:jdbc.properties"/>
	</bean>

	<!-- 配置數據源 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="${driver}"/>
		<property name="url" value="${url}"/>
		<property name="username" value="${username}"/>
		<property name="password" value="${password}"/>
	</bean>

	<!-- mybatis和spring完美整合,不需要mybatis的配置映射文件 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<!-- 掃描model包 -->
		<property name="typeAliasesPackage" value="com.sjsq.model"/>
		<!-- 掃描sql配置文件:mapper需要的xml文件-->
		<property name="mapperLocations" value="classpath:mapper/*.xml"/>
	</bean>

	<!-- Mapper動態代理開發,掃描dao接口包-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 注入sqlSessionFactory -->
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
		<!-- 給出需要掃描Dao接口包 -->
		<property name="basePackage" value="com.sjsq.dao"/>
	</bean>

	<!-- 事務管理 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!--數據庫連接池-->
		<property name="dataSource" ref="dataSource"/>
	</bean>
</beans>

3.jdbc.properties

# 8.0之前的driver
#driver=com.mysql.jdbc.Driver
# 8.0之後的driver
driver=com.mysql.cj.jdbc.Driver
#mytest爲我本地的數據庫名
url=jdbc:mysql://localhost:3306/maven-ssm-demo?serverTimezone=UTC
# 數據庫用戶名
username=root
# 數據庫的密碼
password=admin
# 定義初始連接數
initialSize=1
# 定義最大連接數
maxActive=20
# 定義最大空閒
maxIdle=20
# 定義最小空閒
minIdle=1
# 定義最長等待時間
maxWait=60000

4.log4j.properties

#日誌輸出級別
log4j.rootLogger=debug,stdout,D,E

#設置stdout的日誌輸出控制檯
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#輸出日誌到控制檯的方式,默認爲System.out
log4j.appender.stdout.Target = System.out
#設置使用靈活佈局
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#靈活定義輸出格式
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} -[%p]  method:[%c (%rms)] - %m%n

5.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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

    <!-- 掃描註解,這樣com.sjsq包下的文件都能被掃描 -->
    <context:component-scan base-package="com.sjsq"/>

    <!-- 開啓SpringMVC註解模式 -->
    <mvc:annotation-driven/>

    <!-- 靜態資源默認servlet配置 -->
    <mvc:default-servlet-handler/>

    <!-- 配置返回視圖的路徑,以及識別後綴是jsp文件 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

6.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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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></display-name>

  <!-- spring 配置文件 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class> org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!-- springmvc 配置文件-->
  <servlet>
    <servlet-name>springmvc</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>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <!-- 歡迎頁 -->
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

7.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<!-- $Id: pom.xml 642118 2008-03-28 08:04:16Z reinhard $ -->
<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>
    <packaging>war</packaging>

    <name>MavenSSMDemo</name>
    <groupId>com.sjsq</groupId>
    <artifactId>MavenSSMDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.1.7</version>
                <configuration>
                    <connectors>
                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                            <port>8888</port>
                            <maxIdleTime>30000</maxIdleTime>
                        </connector>
                    </connectors>
                    <webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version}
                    </webAppSourceDirectory>
                    <contextPath>/</contextPath>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <!-- 用來設置版本號 -->
    <properties>
        <srping.version>4.0.2.RELEASE</srping.version>
        <mybatis.version>3.2.8</mybatis.version>
        <slf4j.version>1.7.12</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
        <druid.version>1.0.9</druid.version>
    </properties>
    <!-- 用到的jar包 -->
    <dependencies>
        <!-- 單元測試 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <!-- 表示開發的時候引入,發佈的時候不會加載此包 -->
            <scope>test</scope>
        </dependency>

        <!-- spring框架包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</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-oxm</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-jdbc</artifactId>
            <version>${srping.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</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-context-support</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-orm</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>

        <!-- mybatis框架包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>

        <!-- 數據庫驅動 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.20</version>
        </dependency>

        <!-- 導入dbcp的jar包,用來在applicationContext.xml中配置數據庫 -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>

        <!-- jstl標籤類 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- 日誌 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <!-- 連接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>

    </dependencies>

</project>

2.前端

list.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
    <table width="80%" align="center">
    	<tr>
    		<td>編號</td>
    		<td>姓名</td>
    		<td>密碼</td>
    	</tr>
    	<c:forEach items="${list}" var="bean">
    	<tr>
    		<td>${bean.id}</td>
    		<td>${bean.username}</td>
    		<td>${bean.password}</td>
    	</tr>
    	</c:forEach>
    </table>
  </body>
</html>

3.後端

User

package com.sjsq.model;

/**
 * 實體類
 * @author shuijianshiqing
 * @date 2020/6/21 10:21
 */

public class User {

    private Integer id;
    private String username;
    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

UserDao

package com.sjsq.dao;

import com.sjsq.model.User;

import java.util.List;

/**
 * @author shuijianshiqing
 * @date 2020/6/21 10:29
 */
public interface UserDao {

    /**
     * 獲取所有用戶信息
     * @return
     */
    public List<User> list();

}

UserDaoImpl

package com.sjsq.dao.impl;

import com.sjsq.dao.UserDao;
import com.sjsq.model.User;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author shuijianshiqing
 * @date 2020/6/21 10:30
 */
@Repository("userDao")
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {

    @Autowired
    @Override
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
        super.setSqlSessionFactory(sqlSessionFactory);
    }

    /**
     * 返回查詢結果
     * @return
     */
    public List<User> list() {
        return this.getSqlSession().selectList("com.sjsq.model.user.mapper.list");
    }


}

UserService

package com.sjsq.service;

import com.sjsq.model.User;

import java.util.List;

/**
 * @author shuijianshiqing
 * @date 2020/6/21 10:38
 */
public interface UserService {

    public List<User> list();

}

UserServiceImpl

package com.sjsq.service.impl;

import com.sjsq.dao.UserDao;
import com.sjsq.model.User;
import com.sjsq.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author shuijianshiqing
 * @date 2020/6/21 10:38
 */
@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    public void setUserDao(UserDao userDao){
        this.userDao = userDao;
    }


    public List<User> list() {
        return userDao.list();
    }


}

UserController

package com.sjsq.controller;

import com.sjsq.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author shuijianshiqing
 * @date 2020/6/21 10:42
 */

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    // Spring使用set方法進行依賴注入
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    /**
     * 查詢所有用戶信息
     * @param map
     * @return
     */
    @RequestMapping("/list")
    public String list(ModelMap map){
        map.addAttribute("list", userService.list());
        return "list";
    }
}

三、數據庫文件

drop database if exists maven-ssm-demo;

create database maven-ssm-demo;

drop table if exists `user`;

create table `user`  (
  `id` int(11) not null auto_increment,
  `username` varchar(255) default null,
  `password` varchar(255) default null,
  primary key (`id`)
);

insert into `user` values (1, 'sjsq', '123456');

四、運行項目

瀏覽器輸入:http://localhost:8080/list.do,就可以訪問到頁面了。
在這裏插入圖片描述

五、感悟及其他

1.感悟

SSM搭建過程,主要是配置文件要寫正確。其次,要注意數據庫的配置,這裏使用的mysql8.0。其他就沒有什麼了。但是要理解SSM原理是較爲複雜的,如果要是再讀源碼,要求就要更高。

2.商務合作

要是你自己對於本項目有定製化開發需求或者有什麼其他問題,可以聯繫:
博主QQ:3079118617
請備註:來源CSDN
注意:有償服務哦

3.其他

你要是想做非SSM圖書管理系統,請移步:
圖書管理系統
圖書管理系統-添加管理增刪改查功能

你要是想做非SSM學生成績管理系統,請移步:
學生成績管理系統

後續我也會進行開發SSM的各種管理系統,歡迎關注我的博客。

雞湯:每一次總結,都是對你能力的提升。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章