SSM(Spring(IOC和AOP)+SpringMVC+MyBatis)
总结:重中之中
1. 搭建Spring+MyBatis环境
- 引入spring开发包和applicationContext.xml
- 引入mybatis开发包和sqlmap-config.xml
- 引入mybatis-spring.jar
(SqlSessionFactoryBean/MapperScannerConfigurer等)2.编写实体类
- 根据数据表字段编写实体类属性(除大小写必须相同)
- 主键默认不能为空可以使用int
- 其他字段可以为空,查找为空发生错误int/double/float使Integer3.编写SQL定义
定义映射容器(namespace=”接口对象地址-包路径到类名”)
- 方法名与id属性一致4.编写Mapper映射器接口
- 参数类型与parameterType属性一致
- 返回值类中 :多行查询List,单行查询resultType,增删改void或int5.追加Spring配置
- 定义SqlSessionFactoryBean/MapperScannerConfigurer
- SqlSessionFactoryBean(读取配置资源sqlmap-configurer.xml/连接池:加载jdbc数据))
- MapperScannerConfigurer,利用SqlSessionc实例将所有mapper映射对象变为该接口的实体类对象(通过包路径basePackage创建目录下的接口对象)6.进行测试
-从Spring获取Mapper对象使用
创建容器,getbean获取dao对象使用7.编写controller处理器
- 获取dao对象数据进行操作
- MondelAndView(设置jsp页面名称/存储数据返回)8.编写jsp页面
- 引入jstl.jar包 foreach循环输出对象9. 配置MVC处理流程
- web.xml配置DispatcherServlet(springmvc环境的入口)(映射地址和参数进入application.xml配置文件)
- spring配置HandlerMapping
- spring配置Controller
- spring配置ViewResolver(class地址为子类InternalResourceViewResolver)注意:
sqlmap-config.xml中sql定义文件时必须以”/”分开
<mappers>
<mapper resource="cn/xdl/mapper/EmpMapper.xml" />
</mappers>
创建的Mapper对象id名是接口名首字母小写 EmpMapper bean =
context.getBean(“empMapper”,EmpMapper.class);
各部分细分:
1. 搭建Spring+MyBatis环境
- 引入spring开发包和applicationContext.xml
- 引入mybatis开发包和sqlmapconfig.xml
- 引入mybatis-spring.jar(SqlSessionFactoryBean/MapperScannerConfigurer等)
2. 编写实体类
根据数据表EMP编写实体类Emp
public class Emp implements Serializable{
/*
* 员工编号
*/
private int empno;
/*
* 员工姓名
*/
private String ename;
private String job;
private Integer mgr;
private Date hiredate;//用完整时间可以采用java.util.date; Timestamp
private Double sal;
private Double comm;
private Integer deptno;
/**
* 返回员工编号
* @return 员工编号
*/
public int getEmpno() {
return empno;
}
... ...
}
3. 编写SQL定义
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="cn.xdl.dao.EmpMapper">
<!-- 查询所有员工信息,按编号升序排列 -->
<select id="findAll" resultType="cn.xdl.entity.Emp">
select * from EMP order by EMPNO
</select>
</mapper>
- 编写Mapper映射器接口
public interface EmpMapper {
/**
* 查询所有员工信息,按编号升序排列
* @return 员工信息集合
*/
public List<Emp> findAll();
}
5. 追加Spring配置
定义SqlSessionFactoryBean/MapperScannerConfigurer
- 配置SqlSessionFactoryBean
作用是创建SqlSessionFactory工厂对象,提供SqlSession资源.由于必须注入dataSource,因此需要引入一个连接池组件(c3p0或dbcp)
<bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521/XE"></property>
<property name="driverClass" value="oracle.jdbc.OracleDriver"></property>
<property name="user" value="SCOTT"></property>
<property name="password" value="TIGER"></property>
</bean>
<bean id="ssf" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:sqlmap-config.xml">
</property>
<!-- 必须属性 -->
<property name="dataSource" ref="c3p0"></property>
</bean>
- 配置MapperScannerConfigurer
作用是扫描指定包,根据包下Mapper映射器接口创建出Mapper对象,Spring中的id名为接口名首字母小写。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactory" ref="ssf"></property>
<property name="basePackage" value="cn.xdl.dao"></property>
</bean>
6. 从Spring获取Mapper对象使用
String conf = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
EmpMapper empDao = ac.getBean("empMapper",EmpMapper.class);
List<Emp> list = empDao.findAll();
for(Emp e:list){
System.out.println(e.getEmpno()+" "+e.getEname());
}
Spring+Mybatis
1. 流程设计
(传统请求处理模式)
/emp/list.do–>DispatcherServlet–>HandlerMapping–>EmpListController
–>EmpMapper–>ModelAndView–>ViewResolver–>/emp_list.jsp(Ajax请求处理模式)
/emp/list.do–>DispatcherServlet–>HandlerMapping–>EmpListController
–>EmpMapper–>@ResponseBody–>返回List的JSON字符串
编写Ajax请求发送和回调处理函数
2. 实现传统请求处理模式
- 编写EmpListController
作用:接收请求和请求参数,调用Mapper对象处理,然后将结果利用ModelAndView返回
@Controller public class EmpListController {
@Resource private EmpMapper empDao;
@RequestMapping(“/emp/list.do”) public ModelAndView execute(){
//调用EmpMapper获取员工列表数据
List list = empDao.findAll();
//传递到emp_list.jsp
ModelAndView mav = new ModelAndView();
mav.setViewName(“emp_list”);
mav.getModel().put(“emps”, list);//${emps}=retquest.getAttribute(“emps”);
return mav; } }
- 编写emp_list.jsp
作用:利用EL和JSTL将Controller传出的数据显示。需要引入jstl.jar包
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<tr>
<td>编号</td>
<td>姓名</td>
<td>职位</td>
<td>工资</td>
<td>入职日期</td>
</tr>
<c:forEach items="${emps}" var="emp">
<tr>
<td>${emp.empno }</td>
<td>${emp.ename }</td>
<td>${emp.job }</td>
<td>${emp.sal }</td>
<td>${emp.hiredate }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
**3. 配置MVC处理流程**
- web.xml配置DispatcherServlet
<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:applicationContext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
- spring配置HandlerMapping
<mvc:annotation-driven />
- spring配置EmpListController
<!-- 扫描所有Controller -->
<context:component-scan base-package="cn.xdl.controller"/>
- spring配置ViewResolver
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property> </bean>