博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SpringMVC】十、SSM整合入门
阅读量:3914 次
发布时间:2019-05-23

本文共 9991 字,大约阅读时间需要 33 分钟。

文章目录


整合的思路

  1. 整合说明:SSM整合可以使用多种方式,咱们会选择XML + 注解的方式
  2. 整合的思路
  3. 先搭建整合的环境
  4. 先把Spring的配置搭建完成
  5. 再使用Spring整合SpringMVC框架
  6. 最后使用Spring整合MyBatis框架
    在这里插入图片描述

一、搭建环境

创建数据库和表

create database ssm;use ssm;create table account(id int primary key auto_increment,name varchar(20),money double);

创建maven的工程导入依赖

(今天会使用到工程的聚合和拆分的概念,这个技术maven高级会讲)

  1. 创建ssm_parent父工程(打包方式选择pom,必须的)
  2. 创建ssm_web子模块(打包方式是war包)
  3. 创建ssm_service子模块(打包方式是jar包)
  4. 创建ssm_dao子模块(打包方式是jar包)
  5. 创建ssm_domain子模块(打包方式是jar包)
  6. web依赖于service,service依赖于dao,dao依赖于domain
  7. 在ssm_parent的pom.xml文件中引入坐标依赖
5.0.2.RELEASE
1.6.6
1.2.12
5.1.6
3.4.5
org.aspectj
aspectjweaver
1.6.8
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-test
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-jdbc
${spring.version}
junit
junit
4.12
compile
mysql
mysql-connector-java
${mysql.version}
javax.servlet
servlet-api
2.5
provided
javax.servlet.jsp
jsp-api
2.0
provided
jstl
jstl
1.2
log4j
log4j
${log4j.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
1.3.0
c3p0
c3p0
0.9.1.2
jar
compile

工程目录

在这里插入图片描述

实体类domain

public class Account implements Serializable {
private Integer id; private String name; private Double money; 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 Double getMoney() {
return money; } public void setMoney(Double money) {
this.money = money; } @Override public String toString() {
return "Account{" + "id=" + id + ", name='" + name + '\'' + ", money=" + money + '}'; }}

持久层AccountDao

持久层只写接口

/** * 账户dao接口 */public interface AccountDao {
/** * 查询所有 */ List
findAll(); /** * 保存账户 */ void saveAccount(Account account); }

业务层AccountService

public interface AccountService {
/** * 查询所有 */ List
findAll(); /** * 保存账户 */ void saveAccount(Account account);}
@Service("accountService")public class AccountServiceImpl implements AccountService {
public List
findAll() {
System.out.println("业务层,查询所有账户..."); return null; } public void saveAccount(Account account) {
System.out.println("业务层,保存账户..."); }}

表项层controller

在controller包下创建类AccountController,以后待用

Spring框架代码的编写


二、Spring框架测试

1. 搭建和测试Spring的开发环境

resources资源目录下创建ApplicationContext.xml配置文件,用来进行spring的配置.

2. 编写测试方法,进行测试

public class TestSpring {
@Test public void run1(){
// 1.加载 spring 的配置文件 ApplicationContext ac =new ClassPathXmlApplicationContext("classpath:ApplicationContext.xml"); // 2.获取对象 AccountService as = (AccountService) ac.getBean("accountService"); //3.调用方法 as.findAll(); }}

二、SpringMVC框架测试

1. 在web.xml中配置前端控制器

Archetype Created Web Application
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
dispatcherServlet
/
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
characterEncodingFilter
/*

2. springmvc.xml配置文件

在resources资源包下创建springmvc进行配置

3. 测试springmvc单独的正确性

index.jsp

查询所有

controller控制器方法

/** * 账户 web */@Controller@RequestMapping(path = "/account")public class AccountController {
@RequestMapping(path = "/findAll") public String findAll(){
System.out.println("表项层,查询所有账户..."); return "list"; }}

三、Spring整合SpringMVC的框架

1. 整合原理:

在这里插入图片描述

2.让web加载spring配置文件applicationContext.xml

  1. 目的:在controller中能成功的调用service对象中的方法
  2. 让springmvc在服务器启动时加载applicationContext.xml
    在web.xml中配置监听器,让监听器在监听到服务器启动时就加载applicationContext.xml

ContextLoaderListener监听器(该监听器只能加载WEB-INF目录下的applicationContext.xml的配文件)

org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:ApplicationContext.xml

3. 在controller中注入service对象,调用service的方法

/** * 账户 web */@Controller@RequestMapping(path = "/account")public class AccountController {
@Autowired private AccountService accountService; @RequestMapping(path = "/findAll") public String findAll(){
System.out.println("表项层,查询所有账户..."); // 调用service方法 accountService.findAll(); return "list"; }}

四、MyBatis框架测试

1. 使用注解方式编写sql语句

/** * 账户dao接口 */public interface AccountDao {
/** * 查询所有 */ @Select("select * from account") List
findAll(); /** * 保存账户 */ @Insert("insert into account (name,money) values(#{name},#{money})") void saveAccount(Account account);}

2. 编写SqlMapConfig.xml的配置文件

在resources资源包下创建

3. 测试能否操作数据库

public class TestMyBatis {
@Test public void run2() throws IOException {
//1.加载配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.构建者模式创建工厂 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //3.工厂模式生成session SqlSession session = factory.openSession(); //4.代理模式得到dao对象 AccountDao dao = session.getMapper(AccountDao.class); //5.调用dao方法 List
accouts = dao.findAll(); for (Account account:accouts){
System.out.println(account); } //6.关闭资源 session.close(); in.close(); } }

五、Spring整合MyBatis框架

目的:

把SqlMapConfig.xml配置文件中的内容配置到applicationContext.xml配置文件中。

因为我们的AccounService已经让spring容器替我们管理了,需要使用时随时注入。

因此我们也希望AccountDao也被spring容器管理,不需要再通过读取配置文件流使用工厂去手动创建。

这样在AccountServiceImpl类中直接使用AccountDao为业务层服务。

1. 在ApplicationContex.xml中编写spring的MyBatis配置

2. 在AccountDao接口中添加@Repository注解

3. 在service中注入dao对象,进行测试

4. 代码如下

  1. AccountService层使用注解注入方式创建AccountDao
@Service("accountService")public class AccountServiceImpl implements AccountService {
@Autowired private AccountDao accountDao; public List
findAll() {
System.out.println("业务层,查询所有账户..."); List
list = accountDao.findAll(); return list; } public void saveAccount(Account account) {
System.out.println("业务层,保存账户..."); accountDao.saveAccount(account); }}
  1. AcoountController表现层发出查询命令,并将结果展示到跳转的页面上
/** * 账户 web */@Controller@RequestMapping(path = "/account")public class AccountController {
@Autowired private AccountService accountService; @RequestMapping(path = "/findAll") public String findAll(Model model){
System.out.println("表项层,查询所有账户..."); // 调用service方法 List
list = accountService.findAll(); model.addAttribute("list",list); return "list"; }}
  1. 跳转目的页面 list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    查询所有

已经查询了所有账户信息

<%--遍历结果集--%>
${account.name}

六、总结概览,整合的思路

最后运行结果,在页面上点击连接首先传到 UserConteoller类中,执行里面的代码。

在这里插入图片描述

在这里插入图片描述

转载地址:http://kosrn.baihongyu.com/

你可能感兴趣的文章
从源代码的角度理解Java设计模式的装饰模式
查看>>
系统架构中为什么要引入消息中间件?
查看>>
Java内存模型详解
查看>>
Java NIO之Selector
查看>>
SLF4J源码解析(一)
查看>>
Spring AOP用法详解
查看>>
记一位朋友斩获BAT技术专家Offer的面试经历
查看>>
Java并发编程之阻塞队列与Fork/Join框架
查看>>
并发、并行傻傻分不清楚?
查看>>
一个Java程序员该有的良好品质
查看>>
程序员创业之如何获取第一笔风险投资
查看>>
听说小米进入世界500强啦?解读历年500强数据了解国情
查看>>
Maven中央仓库发布历程
查看>>
springBoot的过滤器,监听器,拦截器
查看>>
树状数组入门(简单的原理讲解)
查看>>
程序员的迷茫,迷茫的程序员
查看>>
datawhale课程[动手学数据分析]——Task01:数据加载及探索性数据分析
查看>>
datawhale课程[动手学数据分析]——Task02:数据清洗简述
查看>>
《统计学习方法第二版》学习笔记2——感知机
查看>>
《统计学习方法第二版》学习笔记3——K近邻法
查看>>