1. 前言
自己從一個(gè)萌新開(kāi)始,經(jīng)歷了從網(wǎng)上到處找相關(guān)框架的搭建教程學(xué)習(xí)悉尾,再到兩家公司上班后也了解到完善項(xiàng)目中的框架體系仇箱。為了總結(jié)一下自己學(xué)習(xí)過(guò)程逗威,和搭建一個(gè)以后可擴(kuò)展和使用的通用框架,在搭建好框架后也準(zhǔn)備寫(xiě)這篇文章記錄記錄辟灰。
為了大家能夠更直接方便的復(fù)制即可用个榕,這篇文章會(huì)從較新手的角度敘述。各位大大若有看到芥喇,不喜勿噴西采。
2. 簡(jiǎn)介
在這里大概先對(duì)幾個(gè)框架做個(gè)介紹,想詳細(xì)了解的請(qǐng)另行百度继控。
SSM框架械馆,是Spring + Spring MVC + MyBatis的縮寫(xiě)胖眷,這個(gè)是繼SSH之后,目前比較主流的Java EE企業(yè)級(jí)框架霹崎,適用于搭建各種大型的企業(yè)級(jí)應(yīng)用系統(tǒng)珊搀。
2.1 spring
Spring是一個(gè)開(kāi)源框架,Spring是于2003年興起的一個(gè)輕量級(jí)的Java開(kāi)發(fā)框架尾菇,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來(lái)境析。它是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來(lái)完成以前只可能由EJB完成的事情派诬。然而劳淆,Spring的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性默赂、可測(cè)試性和松耦合的角度而言沛鸵,任何Java應(yīng)用都可以從Spring中受益。 簡(jiǎn)單來(lái)說(shuō)缆八,Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架曲掰。
2.2 spring mvc
Spring MVC屬于Spring Framework的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面耀里,它原生支持的Spring特性蜈缤,讓開(kāi)發(fā)變得非常簡(jiǎn)單規(guī)范。Spring MVC 分離了控制器冯挎、模型對(duì)象、分派器以及處理程序?qū)ο蟮慕巧埃@種分離讓它們更容易進(jìn)行定制房官。
2.3 mybatis
MyBatis本是apache的一個(gè)開(kāi)源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis 续滋。MyBatis是一個(gè)基于Java的持久層框架翰守。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis使用簡(jiǎn)單的XML或注解用于配置和原始映射疲酌,將接口和Java的POJOs(Plain Old Java Objects蜡峰,普通的 Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄±士遥可以這么理解湿颅,MyBatis是一個(gè)用來(lái)幫你管理數(shù)據(jù)增刪改查的框架。
2.4 maven
Maven是一個(gè)項(xiàng)目管理和整合的工具粥诫。Maven為開(kāi)發(fā)者提供了一套完整的構(gòu)建生命周期框架油航。開(kāi)發(fā)團(tuán)隊(duì)基本不用花多少時(shí)間就能自動(dòng)完成工程的基礎(chǔ)構(gòu)建配置,因?yàn)镸aven使用了一個(gè)標(biāo)準(zhǔn)的目錄結(jié)構(gòu)和一個(gè)默認(rèn)的構(gòu)建生命周期怀浆。在創(chuàng)建報(bào)告谊囚、檢查怕享、構(gòu)建和測(cè)試自動(dòng)配置時(shí),Maven可以讓開(kāi)發(fā)者的工作變得更簡(jiǎn)單镰踏。
簡(jiǎn)單來(lái)說(shuō)我們這里用到的就是構(gòu)建項(xiàng)目和下載依賴(lài)包函筋,后面的發(fā)布這些請(qǐng)自行研究
2.5 restful風(fēng)格
一種軟件架構(gòu)風(fēng)格、設(shè)計(jì)風(fēng)格奠伪,而不是標(biāo)準(zhǔn)跌帐,只是提供了一組設(shè)計(jì)原則和約束條件。這里引用一篇對(duì)restful風(fēng)格講解很不錯(cuò)的文章
restfu風(fēng)格
3. 環(huán)境
相關(guān)環(huán)境:jdk 1.7芳来、maven 3.5含末、 tomcat 7
編譯器:idea
在這里默認(rèn)java環(huán)境已經(jīng)搭建完成,若環(huán)境還存在問(wèn)題的看官請(qǐng)移步百度即舌,先把環(huán)境搭建完成佣盒。
3.1 idea集成maven
File->Settings
maven.png
3.2 idea集成jdk
File->Settings
jdk.png
3.3 idea集成tomcat
tomcat1.png
tomcat2.png
tomcat3.png
tomcat4.png
tomcat5.png
tomcat已配置成功,配置成功后如下圖顽聂,啟動(dòng)項(xiàng)目和調(diào)試項(xiàng)目
tomcat6.png
4. 框架搭建
先上一個(gè)已經(jīng)搭建完成的框架結(jié)構(gòu)圖肥惭,后面一邊寫(xiě)再一邊重新搭建一個(gè)。
項(xiàng)目結(jié)構(gòu).png
4.1 新建項(xiàng)目
項(xiàng)目使用idea開(kāi)發(fā)紊搪,所以所有操作都是在idea編譯器中進(jìn)行蜜葱。
File->New->Project ,選擇maven項(xiàng)目的webapp耀石,然后next
新建項(xiàng)目.PNG
在這里填寫(xiě)groupid和artifactid
groupid.png
然后一路next牵囤,即可看見(jiàn)項(xiàng)目已經(jīng)搭建成功,這是現(xiàn)在的項(xiàng)目架構(gòu)滞伟,除了看到web.xml什么也沒(méi)有
空架構(gòu)圖.png
在main下面創(chuàng)建一個(gè)java文件夾:main->右鍵New->Directory揭鳞,文件夾名java
并把它作為項(xiàng)目源代碼文件夾:File->Project Structure -> Modules->Sources
建立main.png
4.2 配置maven依賴(lài)
在這里我引入的依賴(lài)較多,便于后面的擴(kuò)展梆奈,大部分都有注釋野崇。可根據(jù)自己需要?jiǎng)h除無(wú)用的或者修改版本亩钟。在這里有個(gè)注意的地方乓梨,spring相關(guān)的依賴(lài),版本都要一致清酥,不然會(huì)出問(wèn)題扶镀。
pom.xml(從<dependencies>開(kāi)始)
<dependencies>
<!--servletAPI-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<!--springWEB-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<!--springMVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<!--spring tx 事務(wù)處理-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<!--spring aop-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<!--spring-jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<!--jstl-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!--mybatis spring整合包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!--c3p0鏈接池-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!--Mysql數(shù)據(jù)庫(kù)驅(qū)動(dòng)-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations-java5</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.6</version>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.40</version>
</dependency>
</dependencies>
4.3 配置web.xml
在這里主要配置spring mvc的前端控制器mvc-dispatcher,這里的classpath:ssm.xml是配置在resources下面的spring相關(guān)配置的xml总处,這里直接把spring和springmvc的相關(guān)東西都配置ssm.xml中狈惫。<url-pattern>/api/* </url-pattern>中/api/*是接口的請(qǐng)求路徑,后面會(huì)用到
web.xml
<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">
<display-name>ssm</display-name>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:ssm.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.html</welcome-file>
</welcome-file-list>
</web-app>
4.4 配置ssm.xml
- 在java目錄下新建com.bgy.ssm包放置java代碼
- 在resources目錄下創(chuàng)建sql-mapping文件夾放置mybatis的sql映射文件,為了ssm.xml中配置不報(bào)錯(cuò)胧谈,先建一個(gè)user.xml的文件放在里面忆肾,暫時(shí)不寫(xiě)東西
- 在resources目錄下創(chuàng)建sql-map-config.xml文件,配置mybatis相關(guān)屬性
sql-map-config.xml
<?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="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="defaultExecutorType" value="REUSE"/>
<setting name="defaultStatementTimeout" value="25000"/>
</settings>
</configuration>
- 在resources目錄下創(chuàng)建ssm.properties文件配置數(shù)據(jù)庫(kù)鏈接菱肖,這里我使用的是本地的數(shù)據(jù)庫(kù)客冈,改為自己的數(shù)據(jù)庫(kù)用戶(hù)和密碼即可
ssm.properties
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://127.0.0.1:3306/gcsj?characterEncoding=utf8
database_user=root
database_password=root
- 在resources目錄下新建ssm.xml文件,配置spring和springmvc的東西稳强,其中每個(gè)都寫(xiě)了注釋?zhuān)粝肷钊肜斫獾目稍偃ゲ殚嗁Y料场仲,也有些這個(gè)框架中暫時(shí)用不到的。
ssm.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" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">
<!--激活那些已經(jīng)在spring容器里注冊(cè)過(guò)的bean(無(wú)論是通過(guò)xml的方式還是通過(guò)package sanning的方式)上面的注解退疫。-->
<context:annotation-config />
<!--指定的package下掃描以及注冊(cè)javabean-->
<context:component-scan base-package="com.bgy.ssm"/>
<!--參數(shù)配置文件是以properties為后綴的-->
<context:property-placeholder location="classpath*:*.properties"/>
<!--自動(dòng)注冊(cè)spring mvc的一些bean渠缕,具體可百度詳查-->
<mvc:annotation-driven/>
<!--進(jìn)行靜態(tài)資源的訪(fǎng)問(wèn)-->
<mvc:resources mapping="/resources/**" location="/resources/"/>
<!--數(shù)據(jù)庫(kù)連接池,c3p0-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource " destroy-method="close">
<property name="driverClass" value="${driverClass}" />
<property name="jdbcUrl" value="${jdbcUrl}" />
<property name="user" value="${database_user}" />
<property name="password" value="${database_password}" />
<property name="acquireIncrement" value="1" />
<property name="initialPoolSize" value="5" />
<property name="maxPoolSize" value="20" />
<property name="minPoolSize" value="5" />
<property name="maxStatements" value="100" />
<property name="testConnectionOnCheckout" value="true" />
</bean>
<!--配置mybatis的sqlSessionFactory-->
<!--sql-map-config.xml是mybatis的相關(guān)配置褒繁,sql-mapping/*.xml是sql的映射文件-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:sql-map-config.xml" />
<property name="mapperLocations" value="classpath:sql-mapping/*.xml" />
</bean>
<!--配置掃描加了MybatisSqlMapping注解的interface亦鳞,并生成mapper對(duì)象-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.bgy.ssm" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
<property name="annotationClass" value="com.bgy.ssm.anotation.MybatisSqlMapping" />
</bean>
<!--spring的事務(wù)配置-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!--支持事務(wù)注解的(@Transactional)?-->
<tx:annotation-driven />
<!--聲明自動(dòng)為spring容器中那些配置@aspectJ切面的bean創(chuàng)建代理,織入切面-->
<aop:aspectj-autoproxy />
<!--注冊(cè)controllerAspect的bean棒坏,這個(gè)bean用于攔截controller的異常-->
<bean id="controllerAspect" class="com.bgy.ssm.aspect.ControllerAspect" />
</beans>
至此燕差,整個(gè)項(xiàng)目的框架已經(jīng)搭建完畢。
先來(lái)跑一下看看
run1.png
點(diǎn)啟動(dòng)項(xiàng)目后項(xiàng)目可正常訪(fǎng)問(wèn)index.jsp坝冕,到目前配置無(wú)錯(cuò)誤
后續(xù)更新請(qǐng)看下一篇文章
idea整合restful風(fēng)格的ssm框架(二)
目前全部文章列表:
idea整合restful風(fēng)格的ssm框架(一)
idea整合restful風(fēng)格的ssm框架(二)
idea整合spring boot+spring mvc+mybatis框架
idea整合springboot+redis
JVM學(xué)習(xí)之—Java內(nèi)存區(qū)域
JVM學(xué)習(xí)之—垃圾回收與內(nèi)存分配策略
專(zhuān)題整理之—不可變對(duì)象與String的不可變
專(zhuān)題整理之—String的字符串常量池