由於和班上大佬一塊兒合做了一個小項目,大佬是老師實驗室的,在實驗室期間自學了不少東西,因此爲了跟上大佬的腳步一塊兒合做,也得自學一些玩意兒SSM全家桶css
由於之前沒有學過servelet因此先從Servelet入手,而後在學Spring,Spring MVC,Mybatis。html
對於這三個已經利用零零散散的時間在How2j上不繫統的學習了使用,可是今天在準備把三個整合成SSM框架時,發現前面學的有的又已經忘了。因此爲了強化記憶,特此寫下整合博客方便本身理解java
因此,先實現使用SSM框架來查詢單表數據,並顯示mysql
1、關於IDEA建立SSM工程(http://how2j.cn/k/idea/idea-maven-idea-ssm-create/1397.html)web
注:按照教程建立會發現SSM工程中並無resource這個文件夾,這個文件夾不是普通文件夾而是resource專用文件夾spring
具體建立過程 https://blog.csdn.net/qq_37869130/article/details/82380529sql
2、實現效果數據庫
輸入地址,查詢單表數據並用表格顯示express
3、實現mybatis
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:web="http://java.sun.com/xml/ns/javaee" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> 6 7 <!-- spring的配置文件--> 8 <context-param> 9 <param-name>contextConfigLocation</param-name> 10 <param-value>classpath:applicationContext.xml</param-value> 11 </context-param> 12 <listener> 13 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 14 </listener> 15 16 17 <!-- spring mvc核心:分發servlet --> 18 <servlet> 19 <servlet-name>mvc-dispatcher</servlet-name> 20 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 21 <!-- spring mvc的配置文件 --> 22 <init-param> 23 <param-name>contextConfigLocation</param-name> 24 <param-value>classpath:springMVC.xml</param-value> 25 </init-param> 26 <load-on-startup>1</load-on-startup> 27 </servlet> 28 <servlet-mapping> 29 <servlet-name>mvc-dispatcher</servlet-name> 30 <url-pattern>/</url-pattern> 31 </servlet-mapping> 32 33 </web-app>
1.當輸入/listCategory時,SSM將會把這個請求交由web.xml文件處理
其中,Spring mvc代碼 會將全部訪問攔截交由DispatcherServlet處理,並讓resource文件夾的SpringMVC.xml指定Controller和jsp文件的所在文件夾
<context:annotation-config/> <!-- 掃描Controller,並將其生命週期歸入Spring管理--> <context:component-scan base-package="com.how2java.controller"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <mvc:annotation-driven /> <!--註解驅動,以使得訪問路徑與方法的匹配能夠經過註解配置--> <mvc:default-servlet-handler /> <!--靜態頁面,如html,css,js,images能夠訪問--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 視圖定位到/WEB/INF/jsp 這個目錄下 --> <property name="suffix" value=".jsp" /> </bean> </beans>
2.而後用web.xml的Spring核心 的applicationContext將 數據庫加入,使框架總體能操做數據庫
<context:annotation-config /> <context:component-scan base-package="com.how2java.service" /> 經過註解,將Service的生命週期歸入Spring的管理 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 配置數據源 <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>a123456</value> </property> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean"> 掃描存放SQL語句的Category.xml <property name="typeAliasesPackage" value="com.how2java.pojo" /> 處理的類文件夾 <property name="dataSource" ref="dataSource"/> 操做數據庫 <property name="mapperLocations" value="classpath:com/how2java/mapper/*.xml"/> 主函數操做方法接口文件 與Mapper關聯 </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 掃描Mapper,並將其生命週期歸入Spring的管理 <property name="basePackage" value="com.how2java.mapper"/> </bean> </beans>
3.掃描的的Controller 裏面有攔截/listCategory方法 則由Controller進行處理
package com.how2java.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.how2java.pojo.Category; import com.how2java.service.CategoryService; // 告訴spring mvc這是一個控制器類 @Controller @RequestMapping("") public class CategoryController { @Autowired //自動配置 CategoryService categoryService; @RequestMapping("listCategory") //攔截/listCategory public ModelAndView listCategory(){ ModelAndView mav = new ModelAndView(); //建立一個模式和視圖的結合 List<Category> cs= categoryService.list(); // 放入轉發參數 mav.addObject("cs", cs); // 放入jsp路徑 mav.setViewName("listCategory"); // 綁定jsp文件 return mav; // 把mav返回jsp中 } }
注:此處的CategoryService是一個接口,而具體實現方法則是CategoryImpl中的,而CategoryImpl中的list方法則是CategoryMapper 中的,而具體的sql語句則在Category.xml文件中
其中 Category.xml的<mapper namespace="com.how2java.mapper.CategoryMapper">要寫到Mapper與其綁定
@Service代表其是一個Service
<mapper namespace="com.how2java.mapper.CategoryMapper"> <insert id="add" parameterType="Category" > insert into category_ ( name ) values (#{name}) </insert> <delete id="delete" parameterType="Category" > delete from category_ where id= #{id} </delete> <select id="get" parameterType="_int" resultType="Category"> select * from category_ where id= #{id} </select> <update id="update" parameterType="Category" > update category_ set name=#{name} where id=#{id} </update> <select id="list" resultType="Category"> select * from category_ </select> </mapper>
4.最後用listCategory.jsp的foreach循環顯示出來
c:循環獲取的單個對象 varStatus:循環的名字
<table align='center' border='1' cellspacing='0'>
<tr>
<td>id</td>
<td>name</td>
</tr>
<c:forEach items="${cs}" var="c" varStatus="st">
<tr>
<td>${c.id}</td>
<td>${c.name}</td>
</tr>
</c:forEach>
</table>