《二gradle創(chuàng)建SSM項目——Hello word》

一創(chuàng)建gradle web項目

1.以下是我的項目結構web工程+工具module恬偷,mapper用來存放mybatis-plus自動生成類雄坪,通過 MpGenerator.class 生成些阅。

項目結構,可擴展

2.剛創(chuàng)建的web項目webapp下沒有web.xml文件五垮,生成方式如下所示

生成web.xml

創(chuàng)建成功疯搅,失敗的話檢查以上步驟

二spring配置 在resources文件夾下面新建以下文件(1~4)

1.jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/tobi_fresh?            
useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root

2.logo4j.properties

log4j.rootLogger=error, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache=error
log4j.logger.java.sql.ResultSet=error
log4j.logger.java.sql.Connection=error
log4j.logger.java.sql.Statement=error
log4j.logger.java.sql.PreparedStatement=error
log4j.logger.org.springframework=error
log4j.logger.org.springframework.jdbc.support=error
log4j.logger.org.springframework.scheduling=error

3.applicationContext.xml 省略頭尾<beans>

<context:component-scan base-package="com.tobi.*.services"/>
<context:property-placeholder location="classpath:jdbc.properties"/>
 <!--數(shù)據(jù)源-->
   <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
   destroy-method="close">
     <property name="driverClassName" value="${jdbc.driver}"/>
     <property name="url" value="${jdbc.url}"/>
     <property name="username" value="${jdbc.username}"/>
     <property name="password" value="${jdbc.password}"/>

      <!-- 配置初始化大小膨处、最小崎场、最大 -->
      <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="true"/>
      <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>

      <!-- 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計 -->
      <property name="filters" value="stat"/>
    </bean>


    <!-- 定義 MP 全局策略 -->
    <bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
        <!-- 主鍵策略配置 -->
        <!-- 可選參數(shù) AUTO->`0`("數(shù)據(jù)庫ID自增") INPUT->`1`(用戶輸入ID") ID_WORKER->`2`("全局唯一ID") UUID->`3`("全局唯一ID") -->
        <property name="idType" value="2"/>
        <!-- 數(shù)據(jù)庫類型配置 -->
        <!-- 可選參數(shù)(默認mysql) MYSQL->`mysql`  ORACLE->`oracle` DB2->`db2` H2->`h2`  HSQL->`hsql` SQLITE->`sqlite` POSTGRE->`postgresql`  SQLSERVER2005->`sqlserver2005`  SQLSERVER->`sqlserver` -->
        <property name="dbType" value="MYSQL"/>
        <!-- 全局表為下劃線命名設置 true -->
        <!-- <property name="dbColumnUnderline" value="true"/>-->
        <!--邏輯未刪除全局值-->
        <!--<property name="logicNotDeleteValue" value="1"/>-->
        <!--邏輯刪除全局值  邏輯刪除的字段需要注解  @TableLogic-->
        <!-- <property name="logicDeleteValue" value="2"/>-->
    </bean>

    <!--  會話工廠 完美整合 mybatis螃宙, 不需要mybatis配置文件-->
    <bean name="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations">
            <array>
                <value>classpath:com/tobi/sqlxml/*.xml</value>
            </array>
        </property>
        <!-- 配置包別名 -->
        <property name="typeAliasesPackage" value="com.tobi.entity"/>

        <!-- 插件配置 -->
        <property name="plugins">
            <array>
                <!-- 分頁插件配置 -->
                <bean id="paginationInterceptor" class="com.baomidou.mybatisplus.plugins.PaginationInterceptor">
                    <!-- 指定數(shù)據(jù)庫方言 -->
                    <property name="dialectType" value="mysql"/>
                </bean>
                <!-- SQL 執(zhí)行分析攔截器 stopProceed 發(fā)現(xiàn)全表執(zhí)行 delete update 是否停止運行 -->
                <bean id="sqlExplainInterceptor" class="com.baomidou.mybatisplus.plugins.SqlExplainInterceptor">
                    <property name="stopProceed" value="false"/>
                </bean>
            </array>
        </property>
        <!-- MP 全局配置注入 -->
        <property name="globalConfig" ref="globalConfig"/>
    </bean>

    <!-- DAO接口所在包名蛮瞄,Spring會自動查找其下的類 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.tobi.mapper"/>
    </bean>


    <!--聲明式事物管理器-->
    <!-- 配置spring的PlatformTransactionManager,名字為默認值 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 配置基于注解的聲明式事務 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

4.spring-mvc.xml

<!-- 啟動注解驅(qū)動的Spring MVC功能谆扎,注冊請求url和注解POJO類方法的映射 -->
    <mvc:default-servlet-handler/>
    <!--自動生成文檔-->
    <mvc:resources location="classpath:/META-INF/resources/" mapping="swagger-ui.html"/>
    <mvc:resources location="classpath:/META-INF/resources/webjars/" mapping="/webjars/**"/>

    <!-- controller 掃描 -->
    <context:component-scan base-package="com.tobi.*.controller"/>

    <bean class="com.tobi.config.SwaggerConfig"/>
    <!-- handler(controller)映射器 用來尋找 controller 就是查找 對應的 @controller注解的類- 3.2以前是
        org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>

    <!-- handler(controller)適配器 用來執(zhí)行controller 3.2以前是 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter -->
    <bean   class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">

        <!-- 消息解析 -->
        <property name="messageConverters">
            <list>
                <bean   class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html; charset=UTF-8</value>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>


                <!-- 用來配置 返回json對象的參數(shù)挂捅, 默認 會出現(xiàn) 亂碼 需要導入 jackson-annotations.jar,jackson-core.jar,jackson-databind.jar -->
                <bean
                        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html; charset=UTF-8</value>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
            </list>
        </property>

        <!-- 定義自己的綁定器 -->
        <property name="webBindingInitializer" ref="binder"/>
    </bean>

    <bean id="binder"
          class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">

        <!-- 使用自己的綁定 解析器 比如 這里 用來 對 日期類型進行參數(shù)綁定 -->
        <property name="conversionService" ref="timeConversionService"/>

        <!-- 加 校驗器 -->
        <!-- <property name="validator" -->
    </bean>

    <bean id="timeConversionService"
          class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <!-- 定義自己的轉換器 -->
        <property name="converters">
            <set>
            </set>
        </property>
    </bean>


    <!-- 視圖解析器 配置解析JSP jstl 的解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 配置前綴和后綴 , controller層 return modelandview 返回文件時 不用寫前面的路徑和后面的文件后綴名 -->
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

5.web.xml

<!--加載 spring 容器 的配置文件-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <!--加載 spring 容器 的配置文件-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:log4j.properties</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

    <!--springMvc前端控制器-->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <!--springMvc前端控制器-->


    <!--阿里巴巴監(jiān)控配置-->
    <servlet>
        <servlet-name>DruidStatView</servlet-name>
        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DruidStatView</servlet-name>
        <url-pattern>/mysql/*</url-pattern>
    </servlet-mapping>


    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <async-supported>true</async-supported>
        <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>

    <welcome-file-list>
    <welcome-file>/log.html</welcome-file>
    </welcome-file-list>

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

三mapper自動生成 mapper燕酷、entity籍凝、mapperXml

1.在module的build.gradle中添加依賴

//MyBatis-plus
compile "com.baomidou:mybatis-plus:2.1.4"
compile group: 'org.apache.velocity', name: 'velocity', version: '1.7'
//數(shù)據(jù)庫驅(qū)動
compile "mysql:mysql-connector-java:5.1.23"
2.在 Java 文件夾建一個main方法(僅供參考,生成規(guī)則苗缩,數(shù)據(jù)庫地址需要自己配置)

 public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir("D:\\ProjectHub\\tobi\\mapper\\src\\main\\java");
        gc.setFileOverride(true);
        gc.setActiveRecord(true);
        gc.setEnableCache(false);// XML 二級緩存
        gc.setBaseResultMap(true);// XML ResultMap
        gc.setBaseColumnList(false);// XML columList
        gc.setAuthor("tobi");
        // 自定義文件命名饵蒂,注意 %s 會自動填充表實體屬性!
        // dev.setMapperName("%sDao");
        // dev.setXmlName("%sDao");
        // dev.setServiceName("MP%sService");
        // dev.setServiceImplName("%sServiceDiy");
        mpg.setGlobalConfig(gc);

        // 數(shù)據(jù)源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setTypeConvert(new MySqlTypeConvert(){
            // 自定義數(shù)據(jù)庫表字段類型轉換【可選】
            @Override
            public DbColumnType processTypeConvert(String fieldType) {
                return super.processTypeConvert(fieldType);
            }
        });
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        dsc.setUrl("jdbc:mysql://127.0.0.1:3306/tobi_fresh?characterEncoding=utf8");
        mpg.setDataSource(dsc);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        // strategy.setCapitalMode(true);// 全局大寫命名 ORACLE 注意
        strategy.setTablePrefix(new String[] {"b_","c_","m_","p_","s_","t_"});// 此處可以修改為您的表前綴
        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
        // strategy.setInclude(new String[] { "user" }); // 需要生成的表
        // strategy.setExclude(new String[]{"test"}); // 排除生成的表
        // 自定義實體父類
        // strategy.setSuperEntityClass("com.baomidou.demo.TestEntity");
        // 自定義實體酱讶,公共字段
        // strategy.setSuperEntityColumns(new String[] { "test_id", "age" });
        // 自定義 mapper 父類
        // strategy.setSuperMapperClass("com.baomidou.demo.TestMapper");
        // 自定義 service 父類
        // strategy.setSuperServiceClass("com.baomidou.demo.TestService");
        // 自定義 service 實現(xiàn)類父類
        // strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl");
        // 自定義 controller 父類
        // strategy.setSuperControllerClass("com.baomidou.demo.TestController");
        // 【實體】是否生成字段常量(默認 false)
        // public static final String ID = "test_id";
        // strategy.setEntityColumnConstant(true);
        // 【實體】是否為構建者模型(默認 false)
        // public User setName(String name) {this.name = name; return this;}
        // strategy.setEntityBuliderModel(true);
        mpg.setStrategy(strategy);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com");
        pc.setModuleName("tobi");
        pc.setMapper("mapper");
        pc.setXml("sqlxml");
        mpg.setPackageInfo(pc);

        // 自定義模板配置退盯,可以 copy 源碼 mybatis-plus/src/main/resources/template 下面內(nèi)容修改,
        // 放置自己項目的 src/main/resources/template 目錄下, 默認名稱一下可以不配置泻肯,也可以自定義模板名稱
         TemplateConfig tc = new TemplateConfig();
         tc.setController(null);
         //tc.setEntity("/templates/entity.java.vm");//模版自定義添加了邏輯刪除注解渊迁。
         //tc.setMapper(null);
         //tc.setXml(null);
         tc.setService(null);
         tc.setServiceImpl(null);
         //如上任何一個模塊如果設置 空 OR Null 將不生成該模塊。
         mpg.setTemplate(tc);

        // 執(zhí)行生成
        mpg.execute();

        // 打印注入設置
//        System.err.println(mpg.getCfg().getMap().get("abc"));
    }
生成成功后目錄結構

四 創(chuàng)建 controller, services

回到web項目,創(chuàng)建controller 和 services 包 類使用 @Controller @Services 注解


controller services 配置springmvc包掃描的時候注意包路徑 支持通配符
@Controller
public class LogController {

 @RequestMapping("log")
    @ResponseBody
    public AjaxMsg log(){
        Map<String,Object> map=new HashMap<>();
        map.put("title","hello word");
        map.put("content","a");
        AjaxMsg ajaxMsg=new AjaxMsg();
        ajaxMsg.setCode(200);
        ajaxMsg.setMsg("a");
        ajaxMsg.setObject(map);
        return ajaxMsg;
    }

    private class AjaxMsg{
      ```````
    }

    @RequestMapping("indexJsp")
    public String indexJsp(Model model){
        model.addAttribute("a","a");
        return "index";
    }
}

里面有個@ResponseBody注解用于瀏覽器直接返回 json 需要用到

compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: jackson_version
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: jackson_version
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: jackson_version
~ 對應spring-mvc灶挟,xml 中映射器適配器配置

五Hello word

添加一個Tomcat server 并部署 war(exploded) 運行后 輸了localhost:8080/index.html

hello word

最后

報錯406琉朽,檢查spring-mvc.xml 映射器適配器;jackson的三個包有沒有添加稚铣,
報錯404箱叁,檢查web.xml過濾器

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惕医,隨后出現(xiàn)的幾起案子耕漱,更是在濱河造成了極大的恐慌,老刑警劉巖抬伺,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件螟够,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機妓笙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門若河,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人给郊,你說我怎么就攤上這事牡肉。” “怎么了淆九?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵统锤,是天一觀的道長。 經(jīng)常有香客問我炭庙,道長饲窿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任焕蹄,我火速辦了婚禮逾雄,結果婚禮上,老公的妹妹穿的比我還像新娘腻脏。我一直安慰自己鸦泳,他們只是感情好,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布永品。 她就那樣靜靜地躺著做鹰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鼎姐。 梳的紋絲不亂的頭發(fā)上钾麸,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機與錄音炕桨,去河邊找鬼饭尝。 笑死,一個胖子當著我的面吹牛献宫,可吹牛的內(nèi)容都是我干的钥平。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼姊途,長吁一口氣:“原來是場噩夢啊……” “哼帖池!你這毒婦竟也來了?” 一聲冷哼從身側響起吭净,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肴甸,沒想到半個月后寂殉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡原在,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年友扰,在試婚紗的時候發(fā)現(xiàn)自己被綠了彤叉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡村怪,死狀恐怖秽浇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情甚负,我是刑警寧澤柬焕,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站梭域,受9級特大地震影響斑举,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜病涨,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一富玷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧既穆,春花似錦赎懦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至会钝,卻和暖如春伐蒋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迁酸。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工先鱼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奸鬓。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓焙畔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親串远。 傳聞我的和親對象是個殘疾皇子宏多,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)澡罚,斷路器伸但,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,811評論 6 342
  • 一步一步的搭建JAVA WEB項目,采用Maven構建留搔,基于MYBatis+Spring+Spring MVC+B...
    葉子的翅膀閱讀 12,665評論 5 25
  • 簡書 Wwwwei轉載請注明原創(chuàng)出處更胖,謝謝! 一些概念 Maven 一個項目管理工具,簡單的理解為一種標準化的方式...
    Wwwwei閱讀 9,170評論 13 57
  • 作者:王思婷 9歲 小花却妨,小花饵逐, 種在地里, 春天播種彪标, 夏天開花倍权, 秋天結籽, 冬天落下捞烟。 20161231
    我是Linny閱讀 133評論 1 1