1. 程式人生 > >mac下IDEA配置Spring框架+mybatis+maven配置管理的web專案過程詳解

mac下IDEA配置Spring框架+mybatis+maven配置管理的web專案過程詳解

下面詳細講一下mac下怎麼利用IDEA來搭建一個利用spring框架+maven配置管理的web專案

1.再IDEA裡新建一個maven project,填入建立專案所必要的資訊


2.我們要利用spring框架或mybatis就得把與其相關的內容引入進專案啊,利用maven強大的依賴管理能力可以很方便的做到這一點。只需要在pom檔案裡填入相關的依賴即可,但是大部分人會蒙B,這個網站點選開啟連結可以很好的解決你的pom檔案配置問題。下面給出我的專案的pom檔案核心內容

<dependencies>
        <!--支援servlet的jar包-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>

        <!--springmvc框架-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>RELEASE</version>
        </dependency>

        <!--spring jdbc封裝-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>RELEASE</version>
        </dependency>

        <!--mybatis資料庫框架-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>RELEASE</version>
        </dependency>

        <!--官網原話是An easy-to-use Spring bridge for MyBatis sql mapping framework-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>RELEASE</version>
        </dependency>

        <!--資料庫連線池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>RELEASE</version>
        </dependency>

        <!--mysql資料庫連線-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.25</version>
        </dependency>
    </dependencies>

這裡要說的是第一次引入這些依賴的時候你本地的maven庫是沒有那些依賴的,找不到的依賴會顯示紅名,但是maven很方便,只要你點選螢幕右上角的Enable Auto-Import,它就可以從遠端maven庫裡自動的拉到你本地給你用,下圖可以看出,使用spring框架所需的依賴已經來進來你的專案了


3.是不是發現現在專案的結構和你之前使用Eclipse時的web專案不同?別怕,引入就好,點選下圖中的project structure,新增一個新的Module就好



繼續按照下圖示操作即可


4.先寫程式碼再配置其它檔案吧,主要要有資料庫一張表的一條記錄對應的實體類,通常稱為xxxbean,dao層提供資料庫的介面,service層面向用戶提供資料庫訪問服務,Controller是dispatch-servlet根據url mapping將請求轉發過去的控制類,本質上也是個servlet,它的內部根據進一步細化的請求資訊呼叫相關的方法,主要進行實現業務的邏輯並返回資料或是一個view,返回view的話需要經過配置的viewresolver“組裝”好頁面返回給請求者。大體的結構是這樣的:


我講的也不定是全對。歡迎批評指正,上面的內容是我自己學習springmvc時的理解。為了方便大家學習給出程式碼好了,反正也特別簡單,而且強大的IDEA好多東西都能生成了,尤其是像實體類那種只有setter和getter的類。。。

package edu.tju.bwju.bean;

public class User {
    private int id;
    private String name;

    public String getName() {
        return name;
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}
User類需要和資料庫的表能對應起來,表特別簡單,是這樣的



UserDao提供了一個根據id查詢user並返回一個User物件的方法

package edu.tju.bwju.dao;

import edu.tju.bwju.bean.User;
public interface UserDao {
    public User selectById(int id);
}

UserService提供了一個根據id查詢user並返回一個User物件的方法,但是它內部自動裝載了一個UserDao物件,並依靠它的方法來獲得查詢結果。這就是為什麼要同時有Dao層和Service層,因為Service層還可以利用Dao層的最一般的介面做很多組合,讓資料庫的使用更加靈活。

package edu.tju.bwju.service;

import org.springframework.beans.factory.annotation.Autowired;
import edu.tju.bwju.bean.User;
import edu.tju.bwju.dao.UserDao;
import org.springframework.stereotype.Service;

@Service
public class UserService implements UserDao{
    @Autowired
    private UserDao userDao;

    public User selectById(int id) {
        return userDao.selectById(id);
    }
}
dispatcher-servlet將請求的url中與user相關的請求轉發至UserController,controller內部進一步細化,比如mapping到 .../user/hello就會呼叫hello方法,hello方法完成查詢表中id為1的使用者並將使用者姓名輸出至控制檯的業務邏輯,然後返回給使用者一個頁面,即index.jsp
package edu.tju.bwju.controller;

import edu.tju.bwju.bean.User;
import edu.tju.bwju.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

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

    @RequestMapping(value="hello",method = RequestMethod.GET)
    public String hello(){
        User tmp = userService.selectById(1);
        System.out.println(tmp.getName());
        return "index";
    }
}
usermapper.xml裡面寫具體的sql語句,注意每一個方法的標籤型別,不只有select啊,具體的更復雜的寫法大家上網搜尋吧。也要注意方法的id和你在dao裡定義的方法是對應的啊,這樣才能讓你呼叫dao層的方法時去做sql mapping啊。
<?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="edu.tju.bwju.dao.UserDao">

    <select id="selectById" parameterType="int" resultType="User">
        select * from user where id = #{id}
    </select>

</mapper>

5.首先配置spring-mybatis.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:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!-- 配置資料來源 -->
    <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
          destroy-method="close">
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <!--<property name="url" value="${offline_db_url}"/>-->
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="1"/>
        <property name="minIdle" value="1"/>
        <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 'x'"/>
        <property name="testWhileIdle" value="true"/>
        <property name="testOnBorrow" value="false"/>
        <property name="testOnReturn" value="false"/>

        <!-- 關閉PSCache,並且指定每個連線上PSCache的大小 -->
        <property name="poolPreparedStatements" value="false"/>
        <property name="maxPoolPreparedStatementPerConnectionSize" value="-1"/>

        <!-- 配置監控統計攔截的filters -->
        <property name="filters" value="stat"/>
    </bean>


    <!--MyBatis factory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
        <property name="typeAliasesPackage" value="edu.tju.bwju.bean"/>

    </bean>

    <!--sqlSession-->
    <!--<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">-->
    <!--<constructor-arg index="0" ref="sqlSessionFactory" />-->
    <!--<constructor-arg index="1" value="BATCH" />-->
    <!--</bean>-->

    <!--mapper 自動對映, 配置sqlSessionFactoryBeanName屬性 決定優先載入 sqlSessionFactory-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="edu.tju.bwju.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>

    <!--<bean id="awareDataSourceProxy" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">-->
    <!--<property name="targetDataSource" ref="masterDateSource"/>-->
    <!--</bean>-->

    <!-- 配置事務管理器 -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager"/>

</beans>


6.配置web.xml,主要是告訴tomcat誰來做dispatcher-servlet,以及dispatcher-servlet從什麼路徑開始做url mapping
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>


</web-app>

7.配置dispatcher-servlet.xml,它除了引入spring-mybatis.xml外還幹了一件很重要的事,指定了誰是viewresolver及viewresolver的行為
<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


    <import resource="classpath:spring-mybatis.xml"/>

    <context:component-scan base-package="edu.tju.bwju"/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"/>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--<mvc:default-servlet-handler/>-->

    <mvc:annotation-driven/>
</beans>

8.都配置好了,是騾子是馬,點選綠色小箭頭啟動tomcat,tomact配置就不教了吧。。。

控制檯輸出


頁面返回index.jsp的內容




更復雜的內容顯示和功能實現也是也是以此為基礎的,到這裡就配置完成了,希望大牛發現我的不足之處批評指正,也希望更多朋友能走出初入框架配置的迷茫。。。希望別誤人子弟啊。。。

您的幫助是我莫大的鼓勵!喜歡的話可以掃描左側二維碼隨意打賞哈~支付寶微信都可以,歡迎看看我的其他文章~

這篇文章目前收到了不少朋友的支援,在這裡謝謝你們了,打賞有價,支援與鼓勵無價~