1. 程式人生 > >Idea搭建由maven管理的SSM專案

Idea搭建由maven管理的SSM專案

點選第一個create new project
在這裡插入圖片描述
a,選擇左側的maven,b,勾選create from archetype
c,選擇下面的org.apache.maven.archetypes:maven-archetype-webapp(千萬別選錯)
點選下一步next
在這裡插入圖片描述
在GroupId裡輸入團隊名,一般是com.xxx.yyy格式,是公司域名的反寫,com代表,company,中間xxx是專案名縮寫,yyy一般是公司名縮寫,在這裡我就不寫了,我是com+我名字的縮寫lzh
ArtifactId就寫專案名全稱
寫完以後點選next下一步
在這裡插入圖片描述
這一步配置maven和maven本地庫的地址,一般會有預設選項我們可以直接next,但是最好還是根據自己maven下載的位置和設定來配置,在選擇資料夾之前必須先勾選override,這樣才能選擇資料夾,找到maven下載的位置,選擇conf資料夾下的settings.xml檔案,然後再選擇本地庫地址,這樣pom下載下來的本地包都就都會儲存在這裡、點選next下一步在這裡插入圖片描述


建立工程的最後一步,分別輸入project name工程名和project location工程位置,不過也會有預設,一般會存在你平時的workspace,這裡作者喜歡放桌面,因為這樣操作比較直觀,當然是不好的,這個相信讀者都會自己配置,就不說了,點選Finish完成建立
在這裡插入圖片描述
建立成功後進入idea,這時候右下角會有一個event log提示maven工程需要imported,點選右邊那個,這樣是告訴編輯器,下次pom有新的依賴注入,允許自動import包,比較方便
在這裡插入圖片描述
弄完以後檔案目錄是這樣的
在這裡插入圖片描述
開啟pom檔案,pom中一般我們只需要配置dependencies這個地方,這是寫jar包的地方,格式讀者可以參考一下下面我圈起來的地方(下面我把一個SSM專案需要的jar包的pom貼出來,讀者可以直接複製)
在這裡插入圖片描述

這裡是maven中pom.xml的所有依賴,包括SSM的基礎包,檔案上傳所需要的包和json的包



 	   <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.1.1.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.1.1.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.1.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.1.RELEASE</version>
            <scope>test</scope>
        </dependency>

        <!-- mybatis 包 -->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- mybatis spring-->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.2</version>
        </dependency>

        <!-- mysql -->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>

        <!-- 資料來源 -->
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.2</version>
        </dependency>

        <!-- log4j -->
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!-- servlet -->
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- json -->
        <!-- https://mvnrepository.com/artifact/org.json/json -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20160810</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.5</version>
        </dependency>

        <!-- 檔案上傳 -->
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>

        <!-- 分頁-->
        <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>

等待片刻,等pom自動自動下載完所有jar包

再在pom的中新增一下程式碼(如果不新增,會出現tomcat釋出的時候釋出不了mapper.xml檔案的情況)

<resources>
          <resource>
              <directory>src/main/java</directory>
              <includes>
                  <include>**/*.xml</include>
              </includes>
              <filtering>true</filtering>
          </resource>
      </resources>

在這裡插入圖片描述
完成後,接下來我們再src下的main下面新建java包
在這裡插入圖片描述
並將java包標記為sources root目錄在這裡插入圖片描述
同樣在 main 檔案下新建 resources資料夾,再將resources檔案標註為資原始檔根目錄Resources Root在這裡插入圖片描述
同樣的,我們需要對webapp這個包也做同樣的處理,標記為資原始檔根目錄Resources Root
在這裡插入圖片描述
接下來在WEB-INF下新建jsp包,用來存放我們的jsp檔案(後面的檔案配置也預設jsp在此包下)
在這裡插入圖片描述
標記完後文件夾顏色和樣式會變成這樣,則說明成功了(java包變藍色,resources包有四根金條,webapp中間有藍色的點,下面的WEB-INF包有一個空心圓)

前面都是簡單的依樣畫葫蘆,所有的檔案路徑以及pom的編寫都結束以後
才到了真正需要記住的,和需要思考的環節,那就是Spring,SpringMVC,Mybaits的整合部分
不過在做整合之前,配置檔案中有時候需要很多對應class或者mapper的存在,
所以我們先從java程式碼部分入手
也就是說,我們先把簡單的實體類pojo,資料庫操作層mapper,控制層controller和服務層service都先寫好,再去配置整合,這樣讀者更加容易懂
我們在java資料夾下,新建com.lzh,在這裡插入圖片描述
這裡lzh是作者的名字,跟之前新建專案時候的group.id一致(一般來說不是個人都寫的是com.公司名縮寫)在這裡插入圖片描述
點選ok,我們再在com.lzh資料夾下新建(pojo,mapper,controller,service和util)五個資料夾,分別存放實體類,操作資料類,控制層業務類,介面服務類和工具類,此時檔案結構是這樣的在這裡插入圖片描述
好,到這一步,我們先放下idea,我們去準備資料庫和表(使用mysql資料庫)請自行下載
作者使用navicat操作mysql資料庫,就是下面這個軟體
在這裡插入圖片描述

進入mysql資料庫
1.新建資料庫
在這裡插入圖片描述
點選確認

2.新建查詢,建立user表

use test;
CREATE TABLE user (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(30) ,
  PRIMARY KEY (id)
) DEFAULT CHARSET=UTF8;

3.準備資料

use test;
INSERT INTO `user` VALUES(NULL,"皮卡丘");

在test資料庫中,user表裡,插入一條資料

資料準備完成,接下來我們回到專案,在pojo資料夾下,新建User類
跟資料庫中的欄位匹配,User類中欄位分別是id,和name

在這裡插入圖片描述

package com.lzh.pojo;

public class User {
    public Integer id;
    public String name;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

再mapper包下新建UserMapper介面,注意是介面,interface
新建get方法,根據id查詢user並返回User類
在這裡插入圖片描述

package com.lzh.mapper;

import com.lzh.pojo.User;

public interface UserMapper {
    public User get(Integer id);
}

繼續再mapper包下新建UserMapper.xml檔案用來寫入sql語句操作資料庫

注意這裡的namespace一定得對應上包名類名,(如果複製作者的程式碼,請修改namespace換成自己的mapper的路徑)
select中, id是對應UserMapper介面的get方法名,resultType對應的是返回型別,paraaterMap對應的是引數型別
(不瞭解的同學可以先去看Mybatis的資料,還有很多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.lzh.mapper.UserMapper">
            <select id="get" resultType="User" parameterType="Integer">
                  select * from  user where id= #{id}
            </select>
        </mapper> 

在這裡插入圖片描述
在service包下新建UserService介面,寫入get方法用來獲得User並返回

public interface UserService {
    public User get(int id);
}

在這裡插入圖片描述

接著在service包下新建UserServiceImpl類用來實現UserService介面和其中的get方法
@Service標註了這是一個Service
@Autowired自動裝配UserMapper,為我們省去了new的環節,這也是spring註解的特性
方法中呼叫了UserMapper中的get方法,我們再在後面傳入id,接下來就交給UserMapper其中的我們寫的sql語句自己的去操作了

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserMapper userMapper;
    
    @Override
    public User get(int id) {
        return userMapper.get(id);
    }
}

在這裡插入圖片描述
接下來我們在controller包下新建UserController,終於到了業務控制層

@Controller
@RequestMapping("")
public class UserController {
    @Autowired
    UserService userService;

    @RequestMapping("test")
    public ModelAndView get(int id){
        ModelAndView mav=new ModelAndView();
        mav.setViewName("test");
        User user=userService.get(id);
        mav.addObject("user",user);
        return mav;
    }
}

在這裡插入圖片描述
接下來我們到了整合SSM配置環節
開啟webapp包下WEB-INF包,編輯web.xml檔案
配置spring和springMVC

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</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>

  <!-- spring mvc核心:分發servlet -->
  <servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- spring mvc的配置檔案 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springMVC.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

web.xml
再resources包下新建applicationContext.xml 用於配置資料庫連線池和mybatis 中mapper掃描配置
(注:程式碼複製過去的時候別忘了修改檔案中資料庫賬戶密碼來匹配自己的mysql資料庫還有各種包路徑也需要修改)在這裡插入圖片描述

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




    <context:annotation-config />
    <context:component-scan base-package="com.lzh.service" />

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!-- 基本屬性 url、user、password -->
        <property name="url" value="" />
        <property name="username" value="" />
        <property name="password" value="" />
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />

        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="3" />
        <property name="minIdle" value="3" />
        <property name="maxActive" value="20" />

        <!-- 配置獲取連線等待超時的時間 -->
        <property name="maxWait" value="60000" />

        <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />

        <!-- 配置一個連線在池中最小生存的時間,單位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />

        <property name="validationQuery" value="SELECT 1" />
        <property name="testWhileIdle" value="true" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />

        <!-- 開啟PSCache,並且指定每個連線上PSCache的大小 -->
        <property name="poolPreparedStatements" value="true" />
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
    </bean>

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="typeAliasesPackage" value="com.lzh.pojo" />
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:com/lzh/mapper/*.xml"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <!--使用下面的方式配置引數,一行配置一個 -->
                        <value>
                        </value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.lzh.mapper"/>
    </bean>



</beans>

繼續在resources下新建springMVC.xml檔案
將controller生命加入spring管理

<?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:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        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/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">


    <context:annotation-config/>

    <!-- 將controller生命週期納入spring管理-->
    <context:component-scan base-package="com.lzh.controller">
        <context:include-filter type="annotation"
                                expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <!-- 開啟註解-->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes" value="text/plain;charset=UTF-8"/>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/>
    <!--檢視定位-->
    <bean
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="order" value="1"/>
        <property name="defaultViews">
            <list>                <!-- JSON View -->
                <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
                </bean>
            </list>
        </property>
    </bean>

    <!--開通靜態資源的訪問-->
    <mvc:default-servlet-handler/>
    <!-- 對上傳檔案的解析-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 上傳檔案大小上限,單位為位元組(10MB) -->
        <property name="maxUploadSize">
            <value>10485760</value>
        </property>
        <!-- 請求的編碼格式,必須和jSP的pageEncoding屬性一致,以便正確讀取表單的內容,預設為ISO-8859-1 -->
        <property name="defaultEncoding">
            <value>UTF-8</value>
        </property>
    </bean>
</beans>


springMVC.xml
新建mybatis-config.xml檔案用來配置mybatis,不過作者目前只用到一個駝峰命名
(有興趣的小夥伴可以自定百度一下,這是一種命名規範,也用於java命名方法和資料庫命名方法的對接)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>
</configuration>

在這裡插入圖片描述
再再WEB-INF/jsp下面新建一個test.jsp檔案
${user}接收controller控制器傳過來的user,要使用jstl語句需要新增第一句,也可以通過用idea自動修改新增
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title></title>
</head>
<body>
    ${user}
</body>
</html>

在這裡插入圖片描述
接下來部署tomcat,點選add configuration
在這裡插入圖片描述
點選左上角的加號,找到Tomcat Server中的local
(注:如果找不到tomcat server,可以拉到最底端找到 items more,點選在裡面找)
在這裡插入圖片描述
點選了loca之後顯示這個頁面,點選其中的fix或者上面的Deployment
在這裡插入圖片描述
點選右邊的加號,選擇Artifact
在這裡插入圖片描述
選擇第二個war exploded,點選OK完成配置tomcat,點選ok,啟動tomcat在這裡插入圖片描述
啟動完後剛進來的頁面是這樣的
在這裡插入圖片描述
我們需要通過在位址列輸入剛才在控制器中 @RequestMapping(“test”)的test再加上id,就可以訪問這個test頁面了,
我們的url輸入的是
http://localhost:8080/test?id=1
因為此時user表中只有一個皮卡丘,id是1,所以 在後面加上?id=1用來傳輸sql語句所需要的id

查詢成功
在這裡插入圖片描述