自我学习SSM框架集成(一)
因为和班上大佬一起合作了一个小项目,大佬是老师实验室的,在实验室期间自学了很多东西,所以为了跟上大佬的脚步一起合作,也得自学一些玩意儿SSM全家桶
因为以前没有学过servelet所以先从Servelet入手,然后在学Spring,Spring MVC,Mybatis。
对于这三个已经利用零零散散的时间在How2j上不系统的学习了使用,但是今天在准备把三个整合成SSM框架时,发现前面学的有的又已经忘了。所以为了强化记忆,特此写下整合博客方便自己理解
所以,先实现使用SSM框架来查询单表数据,并显示
一、关于IDEA创建SSM工程(http://how2j.cn/k/idea/idea-maven-idea-ssm-create/1397.html)
注:按照教程创建会发现SSM工程中并没有resource这个文件夹,这个文件夹不是普通文件夹而是resource专用文件夹
具体创建过程 https://blog.csdn.net/qq_37869130/article/details/82380529
二、实现效果
输入地址,查询单表数据并用表格显示
三、实现
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>