栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SSM整合

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SSM整合

一、环境搭建 1、基本环境搭建 1.1、创建数据库和表结构
create database ssm;
use ssm;
create table account(
id int primary key auto_increment,
name varchar(20),
money double
);
1.2、新建一个Maven的web项目 

1.3、导入jar包坐标(pom.xml)

    UTF-8
    1.8
    1.8
    5.2.12.RELEASE
    1.7.32
    1.2.17
    8.0.26
    3.5.7
  

  
    
      junit
      junit
      4.11
      test
    
    
    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}
    
    
    
      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
      2.0.6
    
    
      c3p0
      c3p0
      0.9.1.2
      jar
      compile
    
  
1.4、建包

 

1.5、创建tomcat服务器

 

 

二、搭建三层架构和测试 2.1、搭建Spring框架和测试

搭建Spring容器,将常⽤对象的创建和销毁交给Spring容器来管理

2.1.1、项目中新建一个Spring配置文件ApplicationContext.xml:

 




    
    
    

2.1.2、写测试类进行测试:

2.1.2.1、创建账户数据表对应的类

package com.soft.domain;

public class Account {
    private long id;
    private String name;
    private double money;
    public long getId() {
        return id;
    }
    public void setId(long 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;
    }
}

2.1.2.2、编写service类

 

接口:

package com.soft.service;

import com.soft.domain.Account;

import java.util.List;

public interface AccountService {
     List findAll();
}

接口实现类:

package com.soft.service.impl;

import com.soft.domain.Account;
import com.soft.service.AccountService;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class AccountServiceImpl implements AccountService {

    @Override
    public List findAll() {
        System.out.println("业务层---->查询所有的账户");
        return null;
    }
}

2.1.2.3、测试建包

 

2.1.2.4、Spring集成测试框架

AccountServiceTest01:

 

package com.soft.service;

import com.soft.service.impl.AccountServiceImpl;
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;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:ApplicationContext.xml")
public class AccountServiceTest01 {
    @Autowired
    private AccountServiceImpl accountService;

    @Test
    public void findAllTest(){
        accountService.findAll();
    }
}

2.1.2.5、添加日志文件

注:上面由于缺少日志文件有警告,我们需要在resources目录下添加log4j.properties文件

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, ConSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, ConSOLE
# ConSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.ConSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %mn

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=D:/Java_MyBatis/MyBatis_log4j/ssm.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %mn

 

三、搭建与整合SpringMVC 3.1搭建SpringMVC 3.1.1、在web.xml中配置DispatcherServlet前端控制器

 Archetype Created Web Application
 
 
 dispatcherServlet
 org.springframework.web.servlet.DispatcherServlet
 
 contextConfigLocation
 classpath:springmvc.xml
 
 1
 
 
 dispatcherServlet
 /
 
3.1.2、在springmvc.xml配置中文的过滤器,配置开启注解扫描,配置过滤静态资源,开启springmvc.xml注解支持

注: 如果springmvc.xml开启了注解扫描,那么spring中(ApplicationContext.xml)的注解扫描关闭




    
    
    
    
    
        
        
    
    
    
    
    
    
    

3.1.3、index.jsp页面与success页面编写

index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    Hello World!
    查找所有的帐户

success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


成功

 

3.1.4、创建控制器

 

package com.soft.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/account")
public class AccountController {
    //查找所有的⽤户
    @RequestMapping("/findAll")
    public String findAll(){
        System.out.println("表现层--->查询所有的⽤户");
        return "success";
    }
}

四、Spring整合MyBatis框架 4.1、Spring整合MyBatis框架

修改applicationContext.xml配置



       
       
       
    
        
        
        
        
    
    
    
        
    
    
    
        
    
4.2、配置监听器,加载applicationContext.xml配置

在web.xml中配置监听,开启监听,在监听中读取applicationContext.xml配置




  Archetype Created Web Application

  
    contextConfigLocation
    
    classpath:ApplicationContext.xml
  
  
    org.springframework.web.context.ContextLoaderListener
  
  
  
    dispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:springmvc.xml
    
    1
  
  
    dispatcherServlet
    /
  
五、ssm整个流程测试 5.1、index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    Hello World!
    查找所有的帐户

5.2、controller包的AccountController类
package com.soft.controller;
import com.soft.domain.Account;
import com.soft.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@Controller
@RequestMapping("/account")
public class AccountController {

    @Autowired
    private AccountService accountService;
    //查找所有的⽤户
    @RequestMapping("/findAll")
    public ModelAndView findAll(){
        System.out.println("表现层--->查询所有的⽤户");
        List accounts = accountService.findAll();
        //创建ModelAndView
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("accounts",accounts);
        modelAndView.setViewName("success");
        return modelAndView;
    }
}
5.3、service包下的AccountServiceImpl类

5.3.1、接口类

 

package com.soft.service;

import com.soft.domain.Account;

import java.util.List;

public interface AccountService {
     List findAll();
}
5.3.2、接口实现类
package com.soft.service.impl;

import com.soft.dao.IAccountDao;
import com.soft.domain.Account;
import com.soft.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class AccountServiceImpl implements AccountService {

    @Autowired
    private IAccountDao accountDao;
    @Override
    public List findAll() {
        System.out.println("业务层--查询所有的帐户");
        List accounts = accountDao.findAll();
        return accounts;
    }
}
5.4、dao包下的IAccountDao
package com.soft.dao;
import com.soft.domain.Account;
import org.apache.ibatis.annotations.Select;
import java.util.List;

public interface IAccountDao {
    @Select("select * from Account")
    public List findAll();
}
5.5、success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    Title


	成功
	${accounts}

5.6、展示结果

 

六、添加事务管理 6.1、转账场景

A帐户钱减少 B帐户钱增加 在这⾥我们只做最简单的业务实现,不考虑具体的钱的变少,变多

6.2、index.jsp界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    Hello World!
    查找所有的帐户

    转帐

6.3、创建请求参数封装的类
package com.soft.domain;

public class TransferInfo {
    private int id1;
    private double money1;
    private int id2;
    private double money2;

    public int getId1() {
        return id1;
    }

    public void setId1(int id1) {
        this.id1 = id1;
    }

    public double getMoney1() {
        return money1;
    }

    public void setMoney1(double money1) {
        this.money1 = money1;
    }

    public int getId2() {
        return id2;
    }

    public void setId2(int id2) {
        this.id2 = id2;
    }

    public double getMoney2() {
        return money2;
    }

    public void setMoney2(double money2) {
        this.money2 = money2;
    }

    @Override
    public String toString() {
        return "TransferInfo{" +
                "id1=" + id1 +
                ", money1=" + money1 +
                ", id2=" + id2 +
                ", money2=" + money2 +
                '}';
    }
}
6.4、控制器类中添加对应的transfer方法
package com.soft.controller;
import com.soft.domain.Account;
import com.soft.domain.TransferInfo;
import com.soft.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@Controller
@RequestMapping("/account")
public class AccountController {

    @Autowired
    private AccountService accountService;
    //查找所有的⽤户
    @RequestMapping("/findAll")
    public ModelAndView findAll(){
        System.out.println("表现层--->查询所有的用户");
        List accounts = accountService.findAll();
        //创建ModelAndView
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("accounts",accounts);
        modelAndView.setViewName("success");
        return modelAndView;
    }

    //转帐的操作
    @RequestMapping("/transfer")
    public String transfer(TransferInfo transferInfo) {
        System.out.println(transferInfo);
        //表现层调⽤业务层的⽅法实现功能
        accountService.transfer(transferInfo);
        return "success";
    }
}
6.5、业务层service类中添加对应实现的方法 6.5.1、业务层接口
public interface AccountService {
 //查找⽤户
 List findAll();
 //转帐
 void transfer(TransferInfo transferInfo);
}
6.5.2、业务层具体实现
package com.soft.service.impl;

import com.soft.dao.IAccountDao;
import com.soft.domain.Account;
import com.soft.domain.TransferInfo;
import com.soft.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class AccountServiceImpl implements AccountService {

    @Autowired
    private IAccountDao accountDao;
    @Override
    public List findAll() {
        System.out.println("业务层--查询所有的帐户");
        List accounts = accountDao.findAll();
        return accounts;
    }

    @Override
    public void transfer(TransferInfo transferInfo) {
        //分别更新两个帐户的钱
        //业务层调⽤dao层数据模型层的更新帐户的⽅法
        accountDao.updateMoney(transferInfo.getId1(),transferInfo.getMoney1());
        //int a = 3/0;//出现异常
        accountDao.updateMoney(transferInfo.getId2(),transferInfo.getMoney2());
    }
}
6.5.3、dao层具体的实现
package com.soft.dao;
import com.soft.domain.Account;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

public interface IAccountDao {
    @Select("select * from account")
    public List findAll();

    @Update("update Account set money=${money} where id=${id}")
    void updateMoney(@Param("id") int id, @Param("money") double money);
}
6.5.4、转账出现的问题

如果在业务层transfer()⽅法中出现异常,那么有可能两个帐户只更新⼀个帐户的信息,这不符合现实的操作,我们需要使用事务

6.5.5、使用xml配置完成事务

在springvc.xml文件中配置



    
    
    
    
    
        
        
    
    
    
    
    
    
    
    
    
        
        
    
    
    
    
    
        
            
            
            
            
            
        
    
    
    



        
        
    
6.5.6、使用注解配置完成事务

a、springmv.xml中添加事务配置

    
    
        
        
    
    
    

b、在业务层添加事务的注解@Transactional

package com.soft.service.impl;

import com.soft.dao.IAccountDao;
import com.soft.domain.Account;
import com.soft.domain.TransferInfo;
import com.soft.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class AccountServiceImpl implements AccountService {

    @Autowired
    private IAccountDao accountDao;
    @Override
    public List findAll() {
        System.out.println("业务层--查询所有的帐户");
        List accounts = accountDao.findAll();
        return accounts;
    }

    @Override
    public void transfer(TransferInfo transferInfo) {
        //分别更新两个帐户的钱
        //业务层调⽤dao层数据模型层的更新帐户的⽅法
        accountDao.updateMoney(transferInfo.getId1(),transferInfo.getMoney1());

//        int a = 3/0;//出现异常

        accountDao.updateMoney(transferInfo.getId2(),transferInfo.getMoney2());
    }
}
七、拓展 7.1添加中文过滤器

在web.xml中添加中文的过滤




  Archetype Created Web Application

  
    contextConfigLocation
    
    classpath:ApplicationContext.xml
  

  
  
    characterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    
  
  
     characterEncodingFilter
     /*
  
  
  
    org.springframework.web.context.ContextLoaderListener
  

  
  
    dispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:springmvc.xml
    
    1
  
  
    dispatcherServlet
    /
  

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/322531.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号