SSM集成
阅读原文时间:2022年03月22日阅读:1

SSM集成

Spring和各个框架的整合

Spring目前是JavaWeb开发中最终的框架,提供一站式服务,可以其他各个框架整合集成

Spring整合方案

SSH

Ssh是早期的一种整合方案

Struts2 : Web层框架

Spring : 容器框架

Hibernate : 持久层框架

SSM

主流的项目架构的三大框架(相对其他框架而言,最优秀)

SpringMVC : spring自己家的 Web层框架,spring的一个模块

Spring :容器框架

MyBatis :持久层框架

Spring与MyBatis整合

集成思路

实际开发,使用Maven项目,直接引入项项目在Maven仓库中的坐标即可

学习阶段: 手动导入jar包,从零开始集成(巩固基础知识)

创建java项目

准备集成相关jar包

Spring依赖包

SpringMVC依赖包

Mybatis依赖包

MyBatis和Spring框架集成的桥梁包

Spring自己并没有集成MyBatis框架,需要MyBatis自己来集成,所以需要自己提供Spring框架集成的桥梁包

如果我们使用的mybatis3.4.4 不能直接使用mybatis内置的 桥梁包版本,版本比较低,无法正常运行,需要单独下载一个比价高的版本

数据库驱动包和连接池

Jstl标签库依赖包

Mybatis支持的日志包log4j

项目集成需要各种配置文件

Mapper层

package cn.zj.ssm.mapper;

import java.util.List;

import cn.zj.ssm.pojo.User;

public interface UserMapper {

int insert(User user);

User selectByPrimaryKey(Integer id);

List selectList();

int delteByPrimaryKey(Integer id);

}

Mapperxml文件

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

insert into user (name,password,age)values(#{name},#{password},#{age})

delete from user where id = #{id}

完成项目层与层之间spring对象的创建和依赖关系的维护

Service层

package cn.zj.ssm.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import cn.zj.ssm.mapper.UserMapper;

import cn.zj.ssm.pojo.User;

import cn.zj.ssm.service.UserService;

@Service

public class UserServiceImpl implements UserService {

/*

* 问题: UserMapper 代理对象如何创建?

* 答 :使用 SqlSession 操作对象创建 !

*

* 问题 : SqlSession 对象如何创建?

*

* 答 : SqlSessionFactory 工厂对象创建?

*

* 问题: SqlSessionFactory 对象如何创建

*

* 1,和Spring框架集成之前

* MyBatis框架自己读取配置文件中的相关配置去创建

* 2, 和Spring框架集成之后

* 交个Spring容器来创建

* 问题: 如何在Spring框架中配置,创建出来SqlSessionFactory对象?

* mybatis和spring集成的类查阅 桥梁包

* org.mybatis.spring.SqlSessionFactoryBean 创建 SqlSessionFactory

*

*/

@Autowired

private UserMapper mapper;

@Override

public int insert(User user) {

return mapper.insert(user);

}

@Override

public User selectByPrimaryKey(Integer id) {

System.out.println(mapper);

return mapper.selectByPrimaryKey(id);

}

@Override

public List selectList() {

return mapper.selectList();

}

@Override

public int delteByPrimaryKey(Integer id) {

return mapper.delteByPrimaryKey(id);

}

}

测试代码

package cn.zj.ssm.test;

import java.util.List;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import cn.zj.ssm.pojo.User;

import cn.zj.ssm.service.UserService;

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("classpath:spring.xml")

public class UserServiceTest {

@Autowired

private UserService service;

@Test

public void testInsert() {

User user = new User(null, "乔峰", "qiaofeng", 30);

int row = service.insert(user);

System.out.println(row);

}

@Test

public void testSelectByPrimaryKey() {

User user = service.selectByPrimaryKey(8);

System.out.println(user);

}

@Test

public void testSelectList() throws Exception {

List users = service.selectList();

for (User user : users) {

System.out.println(user);

}

}

}

applicationContext配置文件的配置

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd

">

MyBatis 框架SqlSessionFactory对象的创建

* 问题: UserMapper 代理对象如何创建?

* 答 :使用 SqlSession 操作对象创建 !

*

* 问题 : SqlSession 对象如何创建?

*

* 答 : SqlSessionFactory 工厂对象创建?

*

* 问题: SqlSessionFactory 对象如何创建

*

* 1,和Spring框架集成之前

* MyBatis框架自己读取配置文件中的相关配置去创建

* 2, 和Spring框架集成之后

* 交个Spring容器来创建

* 问题: 如何在Spring框架中配置,创建出来SqlSessionFactory对象?

* mybatis和spring集成的类查阅 桥梁包

* org.mybatis.spring.SqlSessionFactoryBean 创建 SqlSessionFactory

*

*/

创建MyBatis框架工厂对象的 类在mybatis-spring1.2.1.jar 桥梁包中的

org.mybatis.spring.SqlSessionFactoryBean 类 如下图

配置文件

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd

">

classpath:cn/zj/mybatis/mapper/*Mapper.xml

创建MyBatis的Mapper接口的代理对象

使用桥梁包 org.mybatis.spring.mapper.MapperFactoryBean 创建 UserMapper代理对象

此种方式每一个Mapper接口需要单独配置,如果Mapper过多,创建Mapper可能造成配置代码过多

使用包扫描创建MyBatis的Mapper接口的代理对象

MyBatis的事务管理器的配置

一般开发,事务的管理都会使用aop切入到业务层

SpringMVC的集成

在在web.xml配置SpringMVC的前端控制器

http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app\_3\_0.xsd" version="3.0">

CharacterEncodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

CharacterEncodingFilter

/*

MVC

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:spring.xml

1

MVC

*.do

springmvc.xml配置文件

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

">

编写控制器 UserController

package cn.zj.ssm.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import cn.zj.ssm.pojo.User;

import cn.zj.ssm.service.UserService;

@Controller

@RequestMapping("/user")

public class UserController {

@Autowired

private UserService service;

@RequestMapping("/list")

public String list(Model m) {

//调用service查询所有用户方法

List users = service.selectList();

//共享数据

m.addAttribute("users", users);

return "/WEB-INF/view/user_list.jsp";

}

@RequestMapping("/delete")

public String delete(Integer id) {

System.out.println(id);

//调用service层的删除方法

service.delteByPrimaryKey(id);

return "redirect:/user/list.do";

}

}

user_list.jsp 页面

在jsp页面 使用jstl标签库需要先在页面引入jstl 标签库

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

Insert title here

用户列表

id 名称 密码 年龄 操作
${user.id} ${user.name} ${user.password} ${user.age} 删除    修改