一、开发前期
1、开发环境 :
当前用myeclipse jdk1.8 tomcat 6
2、创建项目
new —— web project ——— 记得把web.xml勾上
3、SSM框架整合配置
添加依赖
添加依赖的方式常用的有两种:
通过maven创建 项目,通过maven来添加依赖
本地导入对应的jar包,初学者可以使用,不过添加内容比较多
我们现在用本地导入 WEB-INF --lib文件夹中
添加配置文件
1、spring的基本配置
applicationContext.xml文件的配置
由于需要配置的内容比较多,我们可以成多个文件进行配置
在这里:applicationContext-dao.xml applicationContext-service.xml applicationContext-tx.xml
基本配置:命名空间和约束条件,来源于官网的模板
2、springMVC的基本配置
创建springMVC.xml文件,添加约束
3、mybatis的配置
4、log4j.properties配置
一般情况我们使用通用配置,如果有特殊要求,可以去学log4j的配置语法
二、开始整合配置
1、在web.xml(项目自带的配置文件) 配置其他配置文件启动或者关联
1.1、实例化并启动spring的容器(加载applicationContext,让这个配置文件起作用)
<!--实例化spring的容器 -->
<context-param>
<!-- 指定一下applicationContext的路径 -->
<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>
1.2、添加springmvc的配置
<!-- 添加springmvc的配置文件 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--当springMVC.xml文件不在默认位置(webroot下web-inf),那么需要我们手动配置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
注1:什么是DispatcherServlet?
- servlet,用来处理用户请求,前端控制器的(DispatcherServlet)跟之前的Servlet作用相似,都是用来接收用户请求.
- SpringMVC也是Servlet的实现,只不过SpringMVC增加了一个DispatchServlet,所有的http请求都是映射到这个Servlet上,请求进入到这个Servlet中之后,就算进入到了框架之中了,由这个Servlet来统一的分配http请求到各个Controller。
1.3、添加编码过滤器
<!-- 避免中文乱码 -->
<filter>
<filter-name>characterFilter</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>characterFilter</filter-name>
<!-- 匹配所有的请求,拦截下来 -->
<url-pattern>/* </url-pattern>
</filter-mapping>
其他配置按照正常开发流程,应该在这里配置(我们作为初学者,在需要的时候配置)
2、能够在浏览器上访问网页界面
1、创建前端界面
一般我们的前端界面放在WEB-INF下面自己创建的文件夹中,因为webRoot文件夹下,除了WEB-INF以外,都是对外开放的
我们的界面源码应该是被保护的
2、创建控制器
创建一个单独的包,用来存放所有的控制器
@Controller
public class IndexController {
//匹配访问路径
@RequestMapping("/index")
public String index(){
System.out.println("进来");
//返回的是你要访问的页面的名字(不包含后缀)
return "index";
}
}
3、在springMvc.xml文件配置扫描器和视图解析器
<!-- 配置扫描器:配置的是控制器的包名 -->
<context:component-scan base-package="com.qfedu.controller"></context:component-scan>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!--后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
4、测试
浏览器访问:http://loalhost:8080/GouWuShangCheng/index.action
总结:访问页面数据流跑通流程
三、SSM框架数据加载流程(springMVC 的model)
1、数据库的配置
在applicationContext-dao.xml文件配置dataSource
1.1配置数据库的连接(数据库的驱动和数据库版本必须匹配),配置连接池,还有数据库的连接
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/shop?characterEncoding=utf-8"></property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
</bean>
1.2 配置mybatis的sqlsession,将dataSource注入进来
<!--加载sqlsession工厂,同时加载mybatis.xml 注入数据源 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--name中的值是java文件中对应的对象名,ref是数据源配置的id值-->
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis.xml"></property>
</bean>
1.3 在applicationContext-tx.xml中配置数据源的事务管理
<!--添加事务管理-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
1.4 简单的配置mybatis(也可以不配置)
<configuration>
<settings>
<!--是否开启懒加载-->
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
<setting name="cacheEnabled" value="true"/>
</settings>
</configuration>
2、操作数据库,其实就是Mapper映射器的编写
2.1 、编写CategoryMapper.java文件
创建一个interface接口文件
public interface CategoryMapper {
/*查询所有目录的方法*/
public List<Category> selectALLCategory();
}
2.2 、创建CategoryMapper.xml文件
2.2.1 由于查询语句的返回是一个结果集,所以这里需要自定义映射集
<resultMap type="com.qfedu.pojo.Category" id="allCategory">
<!--column 的值是数据库表中的列名,property是pojo中的属性名-->
<id column="cid" property="cId" />
<result column="cname" property="cName" />
<!--一对多级联使用collection标签-->
<collection property="second" ofType="com.qfedu.pojo.CategorySecond">
<id column="csid" property="csId"/>
<result column="csname" property="csName"/>
<result column="cid" property="cId"/>
</collection>
</resultMap>
2.2.2 编写sql语句
<select id="selectALLCategory" resultMap="allCategory">
select category.*,categorysecond.* from category,categorysecond where
category.cid= categorysecond.cid
</select>
2.3 在applicationContext-dao.xml中配置mapper的扫描器
<!--配置mapper的扫描器-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.qfedu.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
3、业务逻辑代码的编辑,也就是service的编写
3.1 编写service类
在service里,我们调用mapper的方法,获取数据库的操作结果,然后进行逻辑处理
public class CategoryService {
@Autowired
public CategoryMapper categoryMapper;
/*调用mapper映射器的方法,或者数据库操作结果,并处理
* 这里是获取所有的目录*/
public List<Category> findAllCategory(){
//调用mapper方法,回去操作结果
List<Category> list=categoryMapper.selectALLCategory();
if(list!=null&&list.size()!=0){
return list;
}else{
return null;
}
}
}
3.2 在applicationContext-service.xml中配置service的bean
<bean id="categoryService" class="com.qfedu.service.CategoryService" > </bean>
3.3 在applicationContext-tx.xml中以service为aop的切入点,配置aop切面的切入点
<!--开启注解,添加通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="get*" propagation="SUPPORTS"/>
</tx:attributes>
</tx:advice>
<!--配置切面-->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.qfedu.service.*.*(..))"/>
</aop:config>
</beans>
4、在controller中调用service的方法,获取结果,向前端返回结果
@Controller
public class IndexController {
@Autowired
public CategoryService categoryService;
@RequestMapping("/index")
public String index(Model model){
//获取目录的数据,然后返回给前端界面
List<Category> cList=categoryService.findAllCategory();
model.addAttribute("cList", cList);
return "index";
}
}
5、在前端接收数据
<div class="span6">
<div class="hotProductCategory">
<!--${cList}这个就是接收数据,cList是键值对的键
var="c" 这个c是集合中的一个元素
${c.cId} cId是pojo的属性名 -->
<c:forEach var="c" items="${cList}">
<dl>
<dt>
<a
href="${pageContext.request.contextPath}/findCategorySecond.action?cid=${c.cId}&page=1">
${c.cName} </a>
</dt>
<c:forEach items="${c.second}" var="cs">
<dd>
<a
href="${pageContext.request.contextPath}/findCategorySecond1.action?csid=${cs.csId}&page=1">
${cs.csName}</a>
</dd>
</c:forEach>
</dl>
</c:forEach>
</div>
四、前端页面+数据库
四、简单总结
1、SSM整合思路
spring在进行管理时,是很有条理的,每个层都由spring管理,然后不同的层可以调用其它层,Handler调用service,service调用mapper等。
1整合dao层。mybatis和spring整合,通过spring管理mapper接口。使用mapper的扫描器自动扫描mapper接口在spring中进行注册。
2整合service层。通过spring管理 service接口。使用配置方式将service接口配置在spring配置文件中。实现事务控制。
3整合springmvc。由于springmvc是spring的模块,不需要整合。
2、整合分析
1、spring MVC + spring +mybatis,是标准的MVC设计模式,将整个系统划分为显示层,Controller层,Service层,DAO层四层
使用Spring MVC负责请求的转发和视图管理
spring实现业务对象管理,mybatis作为数据对象的持久化引擎。
2、Spring是一个开源框架,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,还能更好的让其他框架整合。
3、Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据、业务与展现进行分离。
4、MyBatis 是一个基于Java的持久层框架
Service层是建立在DAO层之上的,建立了DAO层后才可以建立Service层,而Service层又是在Controller层之下的,因而
Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。
每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。