今天和大家分享的是spring+springmvc+mybatis搭建框架的例子,說到這裡不得不說現在市面上一流大公司還有很多用這種架子,創業型公司大部分都用springboot整合的mvc+mybatis來構建應用,形成了兩種“趨勢”沒有統一;因此在後面會有一章springboot+mybatis構建系統的文章,希望多多支援。
- mybatis-generator逆向工程生成實體和配置檔案
- spring+springmvc+mybatis一系列配置
- 訪問靜態資源的兩種配置方式
- 引入事物註解
- 打成war包部署到tomcat
mybatis-generator逆向工程生成實體和配置檔案
java專案中mybatis很常用,要說靠手動來配置實體,對映檔案那可繁瑣了,為此有了快速生成實體和mapper檔案的generator工具;首先我們新建專案,初始化專案結構如:
然後建立名稱mybatis-generator.xml的配置檔案,裡面內容如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" 3 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> 4 <generatorConfiguration> 5 <!--引入資料來源--> 6 <!--<properties resource="classpath:application.properties"/>--> 7 <!--<properties url="D:\my_study\study_java\springcloud_demo\mybatis_demo\src\main\resources\application.properties"/>--> 8 <context id="DB2Tables" targetRuntime="MyBatis3"> 9 <!--自動實現Serializable介面--> 10 <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin> 11 <!-- 去除自動生成的註釋 --> 12 <commentGenerator> 13 <property name="suppressAllComments" value="true"/> 14 <property name="suppressDate" value="true"/> 15 </commentGenerator> 16 <!--資料庫基本資訊--> 17 <jdbcConnection driverClass="com.mysql.jdbc.Driver" 18 connectionURL="jdbc:mysql://119.111.111.111:3306/shenniu003_db" 19 userId="root" 20 password="root"> 21 </jdbcConnection> 22 <javaTypeResolver> 23 <property name="forceBigDecimals" value="false"/> 24 </javaTypeResolver> 25 <!--生成實體類的位置以及包的名字--> 26 <javaModelGenerator targetPackage="model" targetProject="src\main\java"> 27 <property name="enableSubPackages" value="true"/> 28 <property name="trimStrings" value="true"/> 29 </javaModelGenerator> 30 <!--生成map的位置--> 31 <sqlMapGenerator targetPackage="dao.mapper.xml" targetProject="src\main\java"> 32 <property name="enableSubPackages" value="true"/> 33 </sqlMapGenerator> 34 <!--生成Dao類存放位置--> 35 <javaClientGenerator type="XMLMAPPER" targetPackage="dao.mapper" targetProject="src\main\java"> 36 <property name="enableSubPackages" value="true"/> 37 </javaClientGenerator> 38 39 <!--<!–對應的表名,以及實體名–>--> 40 <table tableName="StoreUser" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" 41 enableUpdateByExample="false" > 42 </table> 43 </context> 44 </generatorConfiguration>
具體節點表示的作用請看備註資訊,當有了配置檔案我們有兩種方式可以執行通過這個xml配置來生成mapper等檔案,mvn是java開發很好的一種工具,這裡也使用mvn來執行這個配置工具,僅僅需要在pom.xml中如下配置:
1 <!--程式碼生成器--> 2 <plugin> 3 <groupId>org.mybatis.generator</groupId> 4 <artifactId>mybatis-generator-maven-plugin</artifactId> 5 <version>1.3.5</version> 6 <dependencies> 7 <dependency> 8 <groupId>mysql</groupId> 9 <artifactId>mysql-connector-java</artifactId> 10 <version>5.1.35</version> 11 </dependency> 12 <dependency> 13 <groupId>org.mybatis.generator</groupId> 14 <artifactId>mybatis-generator-core</artifactId> 15 <version>1.3.5</version> 16 </dependency> 17 </dependencies> 18 19 <!--作為DOM物件的配置--> 20 <configuration> 21 <!--允許移動生成的檔案--> 22 <verbose>true</verbose> 23 <!--是否覆蓋--> 24 <overwrite>true</overwrite> 25 <!--自動生成的配置--> 26 <configurationFile> 27 ${basedir}/src/main/resources/mybatis-generator.xml 28 </configurationFile> 29 </configuration> 30 </plugin>
通過mvn的mybatis-generator-maven-plugin外掛來執行生成,當配置完成mvn後,我們能在idea中的mvn管理器中看到如下選項:
雙擊執行即可,只要資料庫連線沒問題,就能正常生成檔案:
spring+springmvc+mybatis一系列配置
要說這個ssm已經流行了很多年了,大公司也還在繼續使用它,小型創業公司估計都往springboot上去靠了,因為springboot整合了很多東西帶來了很多便利;上家公司的某java中級工程師都還沒用過springboot,真讓人吃驚;在resources目錄中建立一個spring的資料夾,裡面分別存放3個檔案:spring-web.xml,spring-service.xml,spring-dao.xml;程式碼以此如下,spring-web.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 4 xmlns:context="http://www.springframework.org/schema/context" 5 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"> 6 <!--配置spring mvc--> 7 <!--開啟springmvc註解模式 xml,json的預設讀寫支援--> 8 <mvc:annotation-driven/> 9 10 <!--預設servlet配置靜態資源--> 11 <mvc:default-servlet-handler/> 12 13 <!--配置JSP 顯示ViewResolver--> 14 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 15 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 16 <property name="prefix" value="/WEB-INF/view/"/> 17 <property name="suffix" value=".jsp"/> 18 </bean> 19 20 <!--掃描web相關的bean--> 21 <context:component-scan base-package="controller"/> 22 23 <!--指定靜態資源對映--> 24 <!--<mvc:resources mapping="/**/*.js" location="/"/>--> 25 </beans>
spring-service.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 5 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"> 6 <!--掃描service包下所有使用註解的型別--> 7 <context:component-scan base-package="service"/> 8 9 <!--配置事務管理器--> 10 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 11 <!--注入資料庫連線池--> 12 <property name="dataSource" ref="dataSource"/> 13 </bean> 14 15 <!--配置基於註解的宣告式事務 16 預設使用註解來管理事務行為--> 17 <tx:annotation-driven transaction-manager="transactionManager"/> 18 </beans>
spring-dao.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 5 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"> 6 <!--資料庫引數--> 7 <!--<context:property-placeholder location="classpath:application.properties"/>--> 8 <bean id="propertyConfigurer" 9 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 10 <property name="location" value="classpath:application.properties" /> 11 </bean> 12 13 <!--資料庫連線池--> 14 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 15 destroy-method="close"> 16 <!--配置連線池屬性--> 17 <property name="driverClassName" value="${driver}" /> 18 <property name="url" value="${url}" /> 19 <property name="username" value="${username}" /> 20 <property name="password" value="${password}" /> 21 </bean> 22 23 <!--SqlSessionFactory物件--> 24 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 25 <!--往下才是mybatis和spring真正整合的配置--> 26 <!--注入資料庫連線池--> 27 <property name="dataSource" ref="dataSource"/> 28 <!--配置mybatis全域性配置檔案:mybatis-config.xml--> 29 <property name="configLocation" value="classpath:mybatis-config.xml"/> 30 <!--掃描sql配置檔案:mapper需要的xml檔案--> 31 <property name="mapperLocations" value="classpath*:dao/mapper/xml/*.xml"/> 32 </bean> 33 34 <!--配置掃描Dao介面包,注入到spring容器--> 35 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 36 <!--注入SqlSessionFactory--> 37 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> 38 <!-- 給出需要掃描的Dao介面--> 39 <property name="basePackage" value="dao"/> 40 </bean> 41 42 <!--<!– 配置Spring的事務管理器 –>--> 43 <!--<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">--> 44 <!--<property name="dataSource" ref="dataSource" />--> 45 <!--</bean>--> 46 47 <!--<!– 註解方式配置事物 Service支援Transiactional –>--> 48 <!--<tx:annotation-driven transaction-manager="transactionManager" />--> 49 </beans>
spring-dao.xml裡面涉及到了資料庫連線,這裡通過property引入一個資料庫連線串配置檔案:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:application.properties" /> </bean>
application.properties配置檔案內容如:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://119.111.1111.111:3306/shenniu003_db username=root password=1111.
需要注意的dao.xml中有對前面生成的mybatis實體和mapper掃描操作,具體看配置資訊;這裡我還分離出了一個mybatis-config.xml,主要是mybatis全域性配置資訊,mybatis-config.xml:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!--配置全域性屬性--> 7 <settings> 8 <!--使用jdbc的getGeneratekeys獲取自增主鍵值--> 9 <setting name="useGeneratedKeys" value="true"/> 10 <!--使用列別名替換列名 預設值為true--> 11 <setting name="useColumnLabel" value="true"/> 12 <!--開啟駝峰命名轉換Table:create_time到 實體的createTime--> 13 <setting name="mapUnderscoreToCamelCase" value="true"/> 14 </settings> 15 </configuration>
配置spring一系列檔案後,需要有一個入口吧這些檔案在程式啟動的時候載入,因此需要在web.xml中如下配置:
1 <!DOCTYPE web-app PUBLIC 2 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 3 "http://java.sun.com/dtd/web-app_2_3.dtd" > 4 5 <!--重點:這裡webapp不替換將無法在jsp頁面上使用jstl語法(網頁直接把標籤輸出來了)--> 6 <!--<web-app>--> 7 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 8 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 9 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 10 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 11 12 <display-name>Archetype Created Web Application</display-name> 13 14 <!--配置DispatcherServlet--> 15 <servlet> 16 <servlet-name>dispatcherServlet</servlet-name> 17 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 18 <!-- 配置SpringMVC 需要配置的檔案 --> 19 <init-param> 20 <param-name>contextConfigLocation</param-name> 21 <param-value>classpath:spring/spring-*.xml</param-value> 22 </init-param> 23 </servlet> 24 25 <servlet-mapping> 26 <servlet-name>dispatcherServlet</servlet-name> 27 <!--預設匹配所有請求--> 28 <url-pattern>/</url-pattern> 29 </servlet-mapping> 30 31 32 <welcome-file-list> 33 <welcome-file>/index.html</welcome-file> 34 </welcome-file-list> 35 36 </web-app>
這裡需要注意預設idea生成的web.xml中的web-app節點沒有schema引入,如果webapp不替換將無法在jsp頁面上使用jstl語法,這需要特別注意;
配置訪問靜態資源的兩種配置方式
由於採用的是mvc方式,因此對映使用dispatcherServlet來做適配,但是路由/攔截了對靜態資源的訪問,因此需要單獨處理下,有兩種方式:
1.可以在spring-web.xml中配置預設servlet適配:
1 <!--預設servlet配置靜態資源--> 2 <mvc:default-servlet-handler/>
2.直接通過mvc:resources引入資源:
1 <!--指定靜態資源對映--> 2 <mvc:resources mapping="/**/*.js" location="/"/>
引入事物註解
要使用事物,需要在spring-service.xml配置事物註解方式(這裡也可以通過切點方式):
1 <!--配置基於註解的宣告式事務--> 2 <tx:annotation-driven transaction-manager="transactionManager"/>
有了上面配置後,就可以在程式碼的service層通過 @Transactional(isolation = Isolation.DEFAULT) 註解引入事物並可選事物隔離機制(本篇忽略)
打成war部署到tomcat
對於java專案部署來說tomcat還是常用的容器,我們要把ssm工程打包成war包,需要在mvn中build節點中如下配置(注:本次專案mybatis的mapper檔案存放目錄不同,因此打包時需要包含下):
1 <!--載入非資源目錄的配置檔案--> 2 <resources> 3 <resource> 4 <directory>src/main/java</directory> 5 <includes> 6 <include>dao/mapper/xml/*.xml</include> 7 <include>**/*.xml</include> 8 <include>**/*.properties</include> 9 </includes> 10 <excludes> 11 <exclude>**/*-generator.xml</exclude> 12 </excludes> 13 <filtering>false</filtering> 14 </resource> 15 </resources>
由於我工程建立時候沒有main入口,因此在打包時候是不會成功的,我們需要通過手動新增一個如下main入口class:
1 public class ApplicationClass { 2 public static void main(String[] args) { 3 } 4 }
然後通過mvn的package命令即可打包成功,成功資訊如:
把war包拷貝到tomcat的webapps目錄,會自行解壓;本篇分享內容就這麼多,希望能對你有好的幫助,不放點個“贊”。