一、框架搭建前期環境准備
jdk8.0下載地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
apache-maven-3.5.0-alpha-1下載地址:https://archive.apache.org/dist/maven/maven-3/3.5.0/binaries/中安裝,
然后要進行倉庫和阿里鏡像的配置參考https://blog.csdn.net/weixin_42035152/article/details/80035373;
apache-tomcat-7.0.90;下載地址:https://tomcat.apache.org/download-70.cgi中標題為Core:下載,,前兩個為mac系統的下載;
mysql-5.6.41-macos10.13-x86_64,下載地址:Looking for previous GA versions?,可以選擇版本進行下載(我的電腦是mac系統,所以我安裝的是mac版本mysql);
這里安裝完畢以后,都需要配置環境變量,這里就不再進行說明了,可以參考其他的博客進行配置;
開發工具去官網下載https://www.jetbrains.com/idea/download/#section=mac根據自己電腦選擇下載相應的intellij idea,注冊請看https://www.cnblogs.com/chen-ya-ping/p/9622062.html
二、搭建框架
框架的搭建就從這里開始吧!
打開intellij idea.出現如下的界面,這時候我們先對Maven的地址進行配置一下吧,點擊Configure我們選擇preference;
這時候會直接跳轉到Maven配置界面如下圖所示,這是我們主要配置三個地方,Maven home directory請選擇你maven的安裝路徑,User setting file這是我們前面提到的倉庫和阿里鏡像的配置文件,Local repository是配置倉庫的地址,
配置完畢我們選擇apply然后Ok;
然后點擊下一步,我們看到下面的界面 ,GroupID是項目組織唯一的標識符, 比如我的項目叫test001 那么GroupID應該是 com.lixiaoming.test001 域名.公司名.項目名,ArtifactID就是項目的唯一的標識符, 一般是 項目名-xxx 比如test001-model
繼續下一步,如下圖顯示項目名稱和你的項目本地地址。
點擊完成,項目結構算是搭建起來了,下面我給出了自己的項目結構就是我們說明之前,我們先理解ssm框架是什么?
SSM是sping+springMVC+mysql集成的框架。
MVC即model view controller。
model層=entity層。存放我們的實體類,與數據庫中的屬性值基本保持一致。
service層。存放業務邏輯處理,也是一些關於數據庫處理的操作,但不是直接和數據庫打交道,他有接口還有接口的實現方法,在接口的實現方法中需要導入mapper層,mapper層是直接跟數據庫打交道的,他也是個接口,只有方法名字,具體實現在mapper.xml文件里,service是供我們使用的方法。
mapper層=dao層,現在用mybatis逆向工程生成的mapper層,其實就是dao層。對數據庫進行數據持久化操作,他的方法語句是直接針對數據庫操作的,而service層是針對我們controller,也就是針對我們使用者。service的impl是把mapper和service進行整合的文件。
(多說一句,數據持久化操作就是指,把數據放到持久化的介質中,同時提供增刪改查操作,比如數據通過hibernate插入到數據庫中。)
controller層。控制器,導入service層,因為service中的方法是我們使用到的,controller通過接收前端傳過來的參數進行業務操作,在返回一個指定的路徑或者數據表。
引用1:https://blog.csdn.net/mybloggerlxs/article/details/81569536
引用2:https://blog.csdn.net/woshiluoye9/article/details/70174582
三、搭建目錄結構:
這里的目錄建好之后還需要設置一下,讓idea識別目錄作用,選擇File-Project Structure,還有一種設置方式選擇java文件夾右擊Mark Directory as 設置的根文件,當然其實兩種方式效果相同。
四、文件配置內容
首先我們要在pox.xml中引進我們需要的jar包,在地址:http://mvnrepository.com/里面搜素自己需要的jar包,因為要進行下載會有點慢,需要耐心等待一下,這時我們配置SSM其他的文件。
pox.xml
<dependencies> <!--引入junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--引入servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0-alpha-1</version> <scope>provided</scope> </dependency> <!--引入jstl的包 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <!--引入jsp的編譯依賴 --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <!--引入log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!--spring springmvc mybatis --> <!-- spring和springmvc相關的構建 jar --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.2.1.RELEASE</version> </dependency> <!-- springmvc相關 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.2.1.RELEASE</version> </dependency> <!--springmvc需要用到json的轉換包 jackson --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.5.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.5.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.4</version> </dependency> <!--JSR303 后台校驗 hibernate validator --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.1.1.Final</version> </dependency> <!--上傳文件相關的jar包 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.3.2</version> </dependency> <!--跟加密算法相關的codeC --> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency> <!--orm或者jdbc組件需要用到的jar包 mybatis --> <!--mysql數據庫驅動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.0.8</version> <scope>runtime</scope> </dependency> <!--阿里的連接 druid連接池 類似於c3p0 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.15</version> </dependency> <!--引入mybatis需要的jar包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.1</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.2.1</version> </dependency>
我們引進的jar包可以在右側maven欄進行查看如下圖,當然也可以去本地倉庫里查看,如果pox.xml部分文件顯示紅色,可能是jar 包沒有下載到倉庫中,可能沒有從倉庫中引入你的jar 包,這是你需要進行刷新。
applicationContext.xml 主要是對Spring和mybatis進行整合,對數據庫連接。
<?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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" 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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <context:component-scan base-package="com.chatRotbot" > <!--過濾掉控制層的注解 --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <context:property-placeholder location="classpath:jdbc.properties" /> <!-- 配置druid數據源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClass}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!--注冊jdbc訪問數據的事務管理器 --> <bean id = "txManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref = "dataSource"></property> </bean> <!--開啟事物注解驅動 --> <tx:annotation-driven transaction-manager="txManager" /> <!--配置mybaits的SqlSessionFactory --> <bean id = "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref = "dataSource"></property> <property name="configLocation" value="classpath:mybatis-cfg.xml"></property> <property name="mapperLocations"> <list> <value>classpath:mapper/UserMapper.xml</value> </list> </property> <!--<property name="mapperLocations" value=""></property>--> </bean> <!-- 配置mybatis mapper接口 --> <bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--如果有多個報路徑,用逗號分開即可 --> <property name="basePackage" value="com.chatRotbot.dao.*"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> </beans>
jdbc.properties 數據庫連接的配置
jdbc.driverClass=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/chatRotbot
##?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true jdbc.username=root jdbc.password=123456
mybatis-cfg.xml mybtisde設置
<?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> <!--是否開啟自動駝峰命名規則映射, 即從經典數據庫列名 AB_CD 到經典 Java 屬性名 AbCd 的類似映射。 默認false --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 延遲加載總開關 --> <!-- <setting name="lazyLoadingEnabled" value="true" /> --> <!-- 設置按需加載 --> <!-- <setting name="aggressiveLazyLoading" value="false" /> --> <!--開啟二級緩存 --> <!-- <setting name="cacheEnabled" value="true"/> --> </settings> <!--在mybatis默認提供的別名的基礎上,我們還可以自定義別名引用 --> <typeAliases> <!--自定義user對象的別名 --> <!--<typeAlias type="com.chatRotbot.model.User" alias="user"/>--> <!-- 批量定義別名 --> <package name="com.chatRotbot.model" /> <!--<package name="com.chatRotbot.dao" />--> </typeAliases> <!-- 配置pageHelper分頁插件 --> <plugins> <plugin interceptor="com.github.pagehelper.PageHelper"> <!-- 設置數據庫類型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六種數據庫--> <property name="dialect" value="mysql"/> <!-- RowBounds參數offset作為PageNum使用 - 默認不使用 --> <property name="offsetAsPageNum" value="false"/> <!-- 使用RowBounds分頁會進行count查詢 --> <property name="rowBoundsWithCount" value="false"/> <!--當設置為true的時候,如果pagesize設置為0 就不執行分頁,返回全部結果 --> <property name="pageSizeZero" value="true"/> <!--合理化查詢 比如如果pageNum<1會查詢第一頁;如果pageNum>pages會查詢最后一頁(設置為false返回空)--> <property name="reasonable" value="false"/> <!-- 支持通過Mapper接口參數來傳遞分頁參數 --> <property name="supportMethodsArguments" value="false"/> <!-- 總是返回PageInfo類型,check檢查返回類型是否為PageInfo,none返回Page --> <property name="returnPageInfo" value="none"/> </plugin> </plugins> </configuration>
log4.properties 日志輸出設置
log4j.rootLogger=DEBUG, CONSOLE, FILE
## console 配置文件輸出的目的地 (控制台)
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy/MM/dd/HH:mm:ss} %-5p [%t] %10l - %m%n
## file 配置文件輸出的目的地 (寫入日志文件)
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=D:/logs/log4j.log
log4j.appender.FILE.MaxFileSize=1MB
log4j.appender.FILE.Append = true
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy/MM/dd/HH:mm:ss} %-5p [%t] %10l - %m%n
##第一個參數代表日志的級別 日志級別有五個 DEBUG INFO WARN ERROR FATAL
##常用的日志基本有4個 DEBUG INFO WARN ERROR
##DEBUG 我們為程序設定的一些調試信息
##INFO 為一般 要顯示的信息 ,比如登陸,參數的值
##WARN 一般為警告信息 ,比如說session丟失,文件路徑不存在
##ERROR 一般為異常信息 用於異常打印
##
##第二個和第三個參數代表日志信息的輸出地點 輸出地點分五個類型
##1.org.apache.log4j.ConsoleAppender(控制台)
##2.org.apache.log4j.FileAppender(文件)
##3.org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件)
##4.org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
##5.org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方--郵箱)
springmvc.xml spring和Springmvc的整合
<?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:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" 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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!--開啟spring組件掃描 --> <context:component-scan base-package="com.chatRotbot" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!--以下映射器和適配器的配置可以通過注解驅動來代替 --> <mvc:annotation-driven/> <!--配置視圖解析器 這個是專門用於解析jsp的視圖解析器 --> <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> <!--對靜態資源文件的訪問--> <mvc:resources mapping="/jsAndCss/**" location="/jsAndCss/" /> <!--文件上傳解析器 --> <bean id = "multipartResolver" class = "org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8"></property> <!--指定所上傳文件的總大小,單位字節。注意maxUploadSize屬性的限制不是針對單個文件,而是所有文件的容量之和 --> <property name="maxUploadSize" value="10240000"></property> </bean> <!--配置hibernate validator --> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> </bean> </beans>
web.xml springmvc 配置文件
<?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_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>ChatRobot</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!--加載spring的ioc容器 spring的配置文件一般要跟springmvc的配置文件分開 --> <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的DispatcherServlet springMVC的ioc容器包括控制層的注冊以及涉及到springmvc的相關配置 --> <!--配置前端的控制器 (servlet),攔截所有請求 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--如果不配置此初始化參數,springmvc會默認去加載classpath下面名稱為 [servlet-name]-servlet.xml(springmvc-serlvet.xml) --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:*.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 1:可以配置*.do,*.action 需要你在所有頁面請求的url帶.do或者.action的后綴 2:也可以配置/ ,此工程所有請求(包括.do .action,js/image/css)都會由springmvc解析 所以要對上述的靜態文件資源進行過濾 3:配置 /* ,返回的jsp也會有springmvc解析 ,不支持 總結:一般配置*.do,或者 *.action;如果需要restful風格的接口,最后用/來標識 --> <url-pattern>/</url-pattern> </servlet-mapping> <!-- springmvc提供的亂碼過濾器 --> <filter> <filter-name>CharacterEncodingFilter</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> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
index.jsp 項目啟動初始文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath() ; response.sendRedirect(path+"/gotoLogin"); %>
五、測試
首先進入終端或cmd進入docs輸入
mysql -hlocalhost -uroot -p;
輸入密碼進入數據庫,然后創建數據庫,如果顯示創建的數據庫,那么我們繼續下一步;
CREATE DATABASE chatRotbot;
SHOW DATABASE;
現在我們要在用intellij idea連接數據庫,進入設置mysql數據庫的頁面。
輸入下面的命令行,插入數據時,請吧xxxx換成具體數據;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶ID',
`email` varchar(255) NOT NULL COMMENT '用戶郵箱',
`password` varchar(255) NOT NULL COMMENT '用戶密碼',
`username` varchar(255) NOT NULL COMMENT '用戶昵稱',
`role` varchar(255) NOT NULL COMMENT '用戶身份',
`status` int(1) NOT NULL COMMENT '用戶狀態',
`regTime` datetime NOT NULL COMMENT '注冊時間',
`regIp` varchar(255) NOT NULL COMMENT '注冊IP',
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES ('1', 'xxx', 'xxxxx', 'xxxxx', 'root', '0', '2017-03-28 09:40:31', '127.0.0.1');
SET FOREIGN_KEY_CHECKS=1;