SSM整合
为什么整合?方便web的开发
Spring:管理我们在项目中的对象,比如service、dao、工具类对象。
SpringMVC:主要做web应用的开发,接收请求,返回处理结果。
Mybatis:完成数据库的操作,完成数据库的增删改查。
以注解方式为主,配置文件为辅。
SSM : 一个容器, SpringMVC容器管理整个项目中的所有对象。
SSM: SSM整合开发,在一个项目中使用springmvc + spring + mybatis
SSM 也有的叫SSI(IBatis)
SSM整合的思路:把视图层的对象交给SpringMVC容器管理, 把Service和Dao层对象交给Spring容器管理
把视图层的对象定义在SpringMVC的配置文件中:
1.处理器对象, 使用注解@Controller创建, 声明组件扫描器
2.视图解析器
3.注解驱动mvc:annotation-driven
把Service和Dao对象定义Spring的配置文件中:
1.Service层对象,使用注解@Service, 声明组件扫描器
2.数据源DataSource(druid, dbcp)
3.SqlSesisonFactory
4.MyBatis的动态代理技术,创建Dao对象
5.工具类和其他类
SpringMVC容器和Spring容器的关系:在理解上, SpringMVC容器是Spring容器的子容器,
那么在子容器中可以访问父容器中的对象,也就是Controller可以Service,
反过来Service不能Controller。
SpringMVC容器和Spring容器关系的建立是通过SpringMVC容器对象中的属性 parent实现的。
parent属性值是Spring的容器对象。
SpringMVC – parent – Spring
SSM整合的步骤:
1.使用springdb的数据库, student表
2.新建的web应用
导入jar:
1)spring的核心jar:spring-beans.jar,spring-core.jar,spring-context.jar,spring-expression.jar
2)spring-aop.jar
3)数据库和事务相关的:spring-jdbc.jar,spring-tx.jar
4)web相关的jar:spring-web.jar, spring-webmvc.jar
5)mybatis的核心jar:mybatis-3.4.5.jar
6)mybatis和spring整合的jar: mybatis-spring-1.3.1.jar
7)数据库的连接池 druid.jar
8) mysql的驱动,日志commons-logging.jar , log4j.jar
9)json的工具库jar:Jackson
3.修改web.xml
1)注册Spring的监听器,ContextLoaderListener, 创建spring的容器对象。 加载spring的配置文件
2)注册SpringMVC的中央调度器,创建SpringMVC的容器对象,加入SpringMVC配置文件
3)注册字符集过滤器,解决post请求乱码的问题
4.定义程序中包的结构, 实体beans, Dao包, Service包, Controller包
5.编写配置文件
1)springmvc的配置文件
2)spring的配置文件
3)定义数据库的属性配置文件
4)mybatis主配置文件
6.编写代码:定义实体类, Dao接口和sql映射文件, Service接口和实现类, Controller类
7.定义视图文件(jsp)
/*web.xml/
<?xml version="1.0" encoding="UTF-8"?> 25-SSM index.html index.htm index.jsp default.html default.htm default.jsp contextConfigLocation classpath:conf/applicationContext.xml org.springframework.web.context.ContextLoaderListener dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:conf/dispatcherServlet.xml 1 dispatcherServlet *.do characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 forceRequestEncoding true forceResponseEncoding true characterEncodingFilter /*/SpringMVC的配置文件/
<?xml version="1.0" encoding="UTF-8"?><!-- springmvc的配置文件 -->
<!-- 声明组件扫描器,指定Controller注解所在的包名 -->
<context:component-scan base-package="com.bjpowernode.controllers" />
<!-- 声明视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 声明注解驱动 -->
<mvc:annotation-driven />
/**Spring的配置文件**/
<?xml version="1.0" encoding="UTF-8"?>
<!-- spring的配置文件: Dao对象,Service对象,其他的工具类对象 -->
<!-- 声明组件扫描器,指定@Service注解所在的包名 -->
<context:component-scan base-package="com.bjpowernode.service" />
<context:property-placeholder location="classpath:conf/jdbc.properties"/>
<!-- 声明数据源(druid,dbcp) -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 声明SqlSessionFactoryBean,创建SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:conf/mybatis.xml" />
</bean>
<!-- 声明MyBatis的扫描器, 创建Dao接口的实现类对象 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
<property name="basePackage" value="com.bjpowernode.dao" />
</bean>
/jdbc.properties/
jdbc.url=jdbc:mysql://localhost:3306/springdb
jdbc.username=root
jdbc.password=root
/mybatis.xml*/
<?xml version="1.0" encoding="UTF-8" ?><!-- 配置别名 -->
<typeAliases>
<package name="com.bjpowernode.beans"/>
</typeAliases>
<!-- 配置sql映射文件 -->
<mappers>
<package name="com.bjpowernode.dao"/>
</mappers>
/beans*/
package com.bjpowernode.beans;
public class Student {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
/*controllers/
package com.bjpowernode.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(“jump”)
public class JumpController {
/**
* 定义处理器方法,跳转到一个视图页面
*/
@RequestMapping("tojsp.do")
public String toJsp(String target){
return target; //逻辑名称
}
}
package com.bjpowernode.controllers;
import java.util.ArrayList;
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.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.bjpowernode.beans.Student;
import com.bjpowernode.service.StudentService;
@Controller
@RequestMapping(“student”)
public class StudentController {
/**
* 引用类型 @Autowired ,@Resource
* byName, byType
*/
//byType
@Autowired
private StudentService studentService;
//学生的注册,添加功能
@RequestMapping("addStudent.do")
public ModelAndView addStudent(Student student){
ModelAndView mv = new ModelAndView();
//调用Service处理注册功能
int rows = studentService.addStudent(student);
if( rows > 0 ){
mv.addObject("msg", "注册成功!!!");
mv.setViewName("success");
} else {
mv.addObject("msg", "注册失败!!!");
mv.setViewName("fail");
}
return mv;
}
//查询学生
@ResponseBody
@RequestMapping("queryStudent.do")
public List<Student> queryStudents(){
List<Student> students = studentService.queryStudents();
//对查询结果做处理
if( students == null ){
students = new ArrayList<>();
}
return students; // [{},{}] []
}
}
/dao*/
package com.bjpowernode.dao;
import java.util.List;
import com.bjpowernode.beans.Student;
public interface StudentDao {
int insertStudent(Student student);
List<Student> selectStudents();
}
<?xml version="1.0" encoding="UTF-8" ?> insert into student(name,age) values(#{name},#{age})<select id="selectStudents" resultType="Student">
select id,name,age from student order by id desc
</select>
/service*/
package com.bjpowernode.service;
import java.util.List;
import com.bjpowernode.beans.Student;
public interface StudentService {
int addStudent(Student student);
List<Student> queryStudents();
}
package com.bjpowernode.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.bjpowernode.beans.Student;
import com.bjpowernode.dao.StudentDao;
import com.bjpowernode.service.StudentService;
@Service
public class StudentServiceImpl implements StudentService {
/**
* 引用类型 @Autowired ,@Resource
* byName, byType
*/
//byType
@Autowired
private StudentDao stuDao;
@Override
public int addStudent(Student student) {
int rows = stuDao.insertStudent(student);
return rows;
}
@Override
public List<Student> queryStudents() {
List<Student> students = stuDao.selectStudents();
return students;
}
}
/*addStudent.jsp/
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
addStudent.jsp
<tr>
<td>年龄:</td>
<td><input type="text" name="age" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="注册功能" /></td>
</tr>
</table>
</form>
姓名: |
/success.jsp*/
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
/*index.jsp/
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
${pageContext.request.contextPath }在jsp中相当于base标签