這篇部落客要介紹 java web 環境以及項目搭建
适用于一些小的項目或者大學作業使用。
Sping + MyBatis + SpringMVC + Maven + MySQL
管理界面推薦 Vue 單頁面
開發第一步 環境配置
- jdk //運作 java 必備 ,oracle 官網下載下傳 。須注冊,
- git // 代碼版本管理,防止誤删,把值得儲存的項目上傳到 gitee 或 github
- mysql // 資料存儲 , 我一般用 wampserver , 內建了我所需要的
- maven // maven 項目需要的 ,不是必須的 ,也是解壓即可用的,搭建項目
- nodejs // 前後端分離開發時需要使用
- idea / eclipse //內建開發工具 ,推薦使用 idea , idea收費的,但是學生免費
- vscode //一個強大的文本編譯器,跨平台,易用
- tomcat // java web 伺服器環境, 下載下傳解壓即可用,如果是 maven 項目,會有一個tomcat 插件。tomcat 則不需要安裝
maven 和 node 預設的存儲倉庫是在 c 盤使用者目錄檔案夾下 需要修改, 以及預設的下載下傳源都是國外的需要修改,一般的話,node 下載下傳使用 cnpm 而不是 npm , maven 也是使用 淘寶的鏡像 。
maven 優點
在這邊介紹一下為什麼使用 maven , 在正常的一個 javaweb 項目(servlet)中,我們需要導入 jdbc 、 json 所需要的包,
至于 SSM 架構所需要的包就更多了,當少一個包就會各種報錯,而每個項目的包都差不多,每次這樣的導入。懶人是不能容忍的,需要自動導入,另外一個原因,就是統一了目錄,友善開發。還有 分布式 開發。
項目搭建
?idea很好用,是以我采用了 idea 作為開發環境。
項目的目錄結構 ,先上截圖 :
這裡面我使用了mybatis 逆向工程, 就是将表建好之後,通過官方的 jar 包,手寫一個類自動生成 pojo ,mapper 下的所有代碼。
運作環境我采用了tomcat 插件,可以在本地運作,也可以熱部署到遠端伺服器上。
需要自己手寫的是幾個配置檔案。
- pom.xml 這個相當于導入jar包
- web.xml
- main/resources 包下,除了 mapper 檔案夾下的(這個是自動生成的 )
pom.xml 熱部署被我注釋了
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>site.suimu</groupId>
<artifactId>mybatisGe</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>mybatisGe Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<!-- 設定項目編碼編碼 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- spring版本号 -->
<spring.version>4.3.5.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.4.1</mybatis.version>
</properties>
<dependencies>
<!-- java ee -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<!-- 單元測試 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- 實作slf4j接口并整合 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.2</version>
</dependency>
<!-- JSON -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.7</version>
</dependency>
<!-- 資料庫 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
<scope>runtime</scope>
</dependency>
<!-- 資料庫連接配接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring整合包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<!--MyBatis 官方提供了一種名為 “逆向工程” 的機制,其可以針對資料庫中的單表自動生成 MyBatis 執行所需要的代碼
包括:
Java 實體類、Mapper映射配置、Mapper代理接口-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 控制tomcat端口号 -->
<port>8080</port>
<!-- 項目釋出到tomcat後的名稱 -->
<!-- / 相當于把項目釋出名稱為ROOT -->
<!-- /abc -->
<path>/mavenSSM</path>
<!--配置熱部署-->
<!--<username>tomcat</username>
<password>tomcat</password>
<url>http://ip:port/manager/text</url>-->
</configuration>
</plugin>
</plugins>
</build>
</project>
web.xml
// tomcat 自動加載的檔案,需要在這裡配置加載 mybatis 和 spring 的配置檔案
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- 編碼過濾器 -->
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置DispatcherServlet -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置springMVC需要加載的配置檔案-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 比對所有請求 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
#資料庫位址
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8
#使用者名
jdbc.username=ssmUser
#密碼
jdbc.password=123456
#最大連接配接數
c3p0.maxPoolSize=30
#最小連接配接數
c3p0.minPoolSize=10
#關閉連接配接後不自動commit
c3p0.autoCommitOnClose=false
#擷取連接配接逾時時間
c3p0.checkoutTimeout=10000
#當擷取連接配接失敗重試次數
c3p0.acquireRetryAttempts=2
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:context="http://www.springframework.org/schema/context" 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/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">
<!-- 掃描service包下所有使用注解的類型 -->
<context:component-scan base-package="site.suimu.service"/>
<!-- 配置資料庫相關參數properties的屬性:${url} -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 資料庫連接配接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
<property name="minPoolSize" value="${c3p0.minPoolSize}"/>
<property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}"/>
<property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>
<property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/>
</bean>
<!-- 配置SqlSessionFactory對象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入資料庫連接配接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 掃描pojo包 使用别名 -->
<property name="typeAliasesPackage" value="site.suimu.pojo"/>
<!-- 掃描sql配置檔案:mapper需要的xml檔案 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!-- 配置掃描Dao接口包,動态實作Dao接口,注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 給出需要掃描Dao接口包 -->
<property name="basePackage" value="site.suimu.mapper"/>
</bean>
<!-- 配置事務管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入資料庫連接配接池 -->
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置基于注解的聲明式事務 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
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">
<!-- 掃描web相關的bean -->
<context:component-scan base-package="site.suimu.controller"/>
<!-- 開啟SpringMVC注解模式 -->
<mvc:annotation-driven/>
<!-- 靜态資源預設servlet配置 -->
<mvc:default-servlet-handler/>
<!-- 配置jsp 顯示ViewResolver -->
<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>
logback.xml 日志配置檔案
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
mybatis-generatorConfig.xml 逆向工程配置檔案
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<!-- 是否去除自動生成的代碼中的注釋 true:是 false:否-->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 資料庫連接配接資訊:驅動類、連接配接位址、使用者名、密碼 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://47.100.116.143/ssm"
userId="ssmUser"
password="123456">
</jdbcConnection>
<!-- 預設 false,把 JDBC DECIMAL 和 NUMERIC 類型解析為 Integer
為 true 時解析為 java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- targetProject:生成 POJO 類的位置 -->
<javaModelGenerator targetPackage="site.suimu.pojo"
targetProject="src/main/java">
<!-- enableSubPackages:是否讓 schema 作為包的字尾-->
<property name="enableSubPackages" value="false"/>
<!-- trimStrings:從資料庫傳回的值被清理前後的空格 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- targetProject:生成xml映射檔案存放位置 -->
<sqlMapGenerator targetPackage="mapper"
targetProject="src/main/resources">
<!-- enableSubPackages:是否讓 schema 作為包的字尾-->
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- targetProject:生成mapper接口存放位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="site.suimu.mapper"
targetProject="src/main/java">
<!-- enableSubPackages:是否讓 schema 作為包的字尾-->
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--生成對應表及類名
tableName:要生成的表名
domainObjectName:生成後的執行個體名
enableCountByExample:Count語句中加入where條件查詢,預設為true開啟
enableUpdateByExample:Update語句中加入where條件查詢,預設為true開啟
enableDeleteByExample:Delete語句中加入where條件查詢,預設為true開啟
enableSelectByExample:Select多條語句中加入where條件查詢,預設為true開啟
selectByExampleQueryId:Select單個對象語句中加入where條件查詢,預設為true開啟
-->
<table tableName="airplane"
domainObjectName="Airplane"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="true"
selectByExampleQueryId="false">
<property name="useActualColumnNames" value="true"/>
<property name="my.isgen.usekeys" value="true"/>
<generatedKey column="id" sqlStatement="JDBC"/>
</table>
<table tableName="menu"></table>
<table tableName="t_user"></table>
</context>
</generatorConfiguration>
TestMyBatisGenerator.java 檔案名随便,位置随便 運作 main 即可
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.api.ShellCallback;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class TestMyBatisGenerator {
public static void main(String[] args) throws Exception {
// warnings 為用于放置生成過程中警告資訊的集合對象
List<String> warnings = new ArrayList<String>();
// 指定是否覆寫重名檔案
boolean overwrite = true;
// 加載配置檔案
File configFile = new File(MyBatisGenerator.class.getClassLoader().getResource("mybatis-generatorConfig.xml").toURI());
// 配置解析類
ConfigurationParser cp = new ConfigurationParser(warnings);
// 配置解析類解析配置檔案并生成 Configuration 配置對象
Configuration config = cp.parseConfiguration(configFile);
// ShellCallback 負責如何處理重複檔案
ShellCallback callback = new DefaultShellCallback(overwrite);
// 逆向工程對象
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
// 執行逆向檔案生成操作
myBatisGenerator.generate(null);
// 列印提示資訊
System.out.println("MyBatis 逆向工程執行成功,重新整理項目檢視檔案!");
}
}
OK 可以愉快的開發了
我本人比較懶,有什麼問題下面留言,佛系回複