ssm整合步骤——学习笔记


案例:ideaproject中的ssm

一、准备

  ①Service:业务层 

    接口、实现类

  ②Dao:持久层 

    接口(、实现类)

  ③domain:实体类

  ④web(controller):表现层控制类

  ⑤pom.xml:导19个依赖

二、spring

  ⑥applicationContent.xml:spring配置文件  

    开启注解扫描(只处理Service、Dao,而controller由SpringMVC处理)

  ①:

    给实体类加注解(将其交给IOC管理)

  ⑦SpringTest.java:测试类

    加载配置⑥

    获取对象①

    加载tomcat调方法运行(成功,则spring环境ok)

三、SpringMVC

  ⑧springmvc_config.xml:springmvc配置文件

    开启注解扫描(只扫描Controller)

    视图解析器(配置臊面前端页面所在位置)

    过滤静态资源(配置指定静态资源存放路径)

    开启springmvc注解支持

  ⑨web.xml:

    配置前端控制器:

      servlet servlet-mapping

      配置加载配置文件⑧

      配置启动服务器时创建Servlet

    配置解决中文乱码过滤器:

      filter filter-mapping

      配置应用的字符集

  ⑩index.jsp:

    写个超链接,用于测试④的findAll

  *④AccountController.java:

    findAll:返回list.jsp

    加注解(3个)

  ?list.jsp:

    随意写句话,表示这个页面是否被加载

  ?配置tomcat:

    配好后,启动tomcat,若list.jsp被加载成功,则springmvc配置好了

四、spring整合SpringMVC

  *④:

    ⑨中配置监听器(因为默认只加载WEB-INF中的applicationContext.xml,所以要重新配置文件路径)

    注入service(因为service通过applicationContext.xml放入IOC容器中,

           而运行tomcat后,web.xml中配置的是加载springm_config.xml

           且springm_config.xml中配置只扫service、dao

           所以需要一个监听器,监听到servlet(还是service)Context域被创建后,加载applicationContext.xml)

    调用service的方法

  ?运行tomcat:

    测试 

五、mybatis

  *②:

    加注解(2个)

  ?SqlMapConfig.xml:

    配环境

    引入映射配置文件(xml)/dao接口类继承类(注解 加载单个dao类)/dao接口所在包(注解 加载包下所有dao类)

  ?BatisTest.java:

    测试mybatis:

      加@Test注解至方法上

      加载Mybatis配置文件?

      创建工厂对象

      创SQLSession对象

      获取到代理对象

      调用dao中方法findAll() (成功,则成功)

      关闭资源

六、spring整合mybatis

  *⑥:

    整合Mybatis框架(实质:将?放进⑥):

      连接池

      工厂

      dao接口所在包

    给②AccountDao加注解(1个)

    给①实现类:

      注入accountDao

      引入accountDao的方法

  ? 在④中findAll方法中调用service接口中的方法,存人model中,list.jsp中添加isElIgnored和jstl头文件,遍历list表

七、添加事务管理器(完成保存操作)

  ? 在⑥中配置spring框架声明式事务管理:

    配置事务管理器

    配事务通知

    配AOP增强

  ?在⑩中添加save方法相关代码

  ?在④的AccountController中添加save方法

package com.xxx.controller;

import com.xxx.domain.Account;
import com.xxx.service.AccountService;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * 账户web层
 * @author 123
 * date 2021-08-09
 */
@Controller
@RequestMapping("/account")
public class AccountController {
    @Autowired
    private AccountService accountService;

    @RequestMapping("/findAll")
    public String findAll(Model model) {
        System.out.println("表现层:查询所有账户...");
        // 调用service的方法
        List list = accountService.findAll();
        model.addAttribute("list",list);
        return "list";
    }

    @RequestMapping("/save")
    public void save(Account account, HttpServletRequest request, HttpServletResponse response) throws IOException {
        System.out.println("表现层:保存账户...");
        accountService.saveAccount(account);
        response.sendRedirect(request.getContextPath()+"/account/findAll");
        return;
    }
}
package com.xxx.dao;

import com.xxx.domain.Account;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author 123
 * date 2021-08-09
 */
@Repository
public interface AccountDao {

    // 查询所有账户
    @Select("select * from account")
    public List findAll();

    // 保存账户信息
    @Insert("insert into account(name,money) values(#{name},#{money})")
    public void saveAccount(Account account);
}
package com.xxx.domain;

/**
 * @author 123
 * date 2021-08-09
 */
public class Account {

    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 +
                '}';
    }
}
package com.xxx.service.impl;

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

import java.util.List;

/**
 * @author 123
 * date 2021-08-09
 */
@Service("accountService")
public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountDao accountDao;

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

    @Override
    public void saveAccount(Account account) {
        System.out.println("业务层:保存账户...");
        accountDao.saveAccount(account);
    }
}
package com.xxx.service;

import com.xxx.domain.Account;

import java.util.List;

/**
 * @author 123
 * date 2021-08-09
 */
public interface AccountService {

    // 查询所有账户
    public List findAll();

    // 保存账户信息
    public void saveAccount(Account account);
}
package com.xxx.test;

import com.xxx.dao.AccountDao;
import com.xxx.domain.Account;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

/**
 * @author 123
 * date 2021-08-11
 */
public class TestMybatis {
    // 测试查询
    @Test
    public void run1() throws Exception {
        // 加载配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 创建SqlSessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        // 创建SQLSession对象
        SqlSession session = factory.openSession();
        // 获取到代理对象
        AccountDao dao = session.getMapper(AccountDao.class);
        // 查询所有数据
        dao.findAll();
        // 查询所有数据
        List list = dao.findAll();
        for (Account account : list) {
            System.out.println(account);
        }
        // 释放资源
        session.close();
        in.close();
    }

    // 测试保存
    @Test
    public void run2() throws Exception {
        Account account = new Account();
        account.setName("小花");
        account.setMoney(5000d);

        // 加载配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 创建SqlSessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        // 创建SQLSession对象
        SqlSession session = factory.openSession();
        // 获取到代理对象
        AccountDao dao = session.getMapper(AccountDao.class);
        // 保存数据
        dao.saveAccount(account);
        // 提交事务
        session.commit();
        // 释放资源
        session.close();
        in.close();
    }
}
package com.xxx.test;

import com.xxx.service.AccountService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author 123
 * date 2021-08-10
 */
public class TestSpring {
    @Test
    public void run1() {
        // 加载配置文件
        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        // 获取对象
        AccountService as = (AccountService)ac.getBean("accountService");
        // 调用方法
        as.findAll();
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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-3.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    
    <context:component-scan base-package="com.xxx" >
        
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    context:component-scan>

    
    
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.cj.jdbc.Driver">property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=GMT%2B8&characterEncoding=utf8">property>
        <property name="user" value="root">property>
        <property name="password" value="pq21ce">property>
    bean>
    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource">property>
    bean>
    
    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.xxx.dao">property>
    bean>

    
    
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    bean>
    
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="find*" read-only="true" />
            <tx:method name="*" isolation="DEFAULT" />
        tx:attributes>
    tx:advice>
    
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.xxx.service.impl.*ServiceImpl.*(..))" />
    aop:config>
beans>
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=GMT%2B8&&characterEncoding=utf8
jdbc.username=root
jdbc.password=pq21ce
### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       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
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    
    <context:component-scan base-package="com.xxx">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller">context:include-filter>
    context:component-scan>

    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/">property>
        <property name="suffix" value=".jsp">property>
    bean>

    <mvc:resources mapping="/js/**" location="/js/">mvc:resources>  
    <mvc:resources mapping="/css/**" location="/css/">mvc:resources>  
    <mvc:resources mapping="/images/**" location="/images/">mvc:resources>  

    <mvc:annotation-driven/>

beans>
<?xml version="1.0" encoding="UTF-8" ?>
DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <properties resource="jdbcConfig.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC">transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            dataSource>
        environment>
    environments>

    <mappers>
        <package name="com.xxx.dao"/>
    mappers>
configuration>
<%--
  Created by IntelliJ IDEA.
  Date: 2021/8/10
  Time: 11:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    Title


    

查询所有的账户

<%-- ${list}--%> <%-- 遍历 --%> var="account"> ${account.name}
app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >


  Archetype Created Web Application

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

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

  
  
    characterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    
  
  
    characterEncodingFilter
    /*
  
<%--
  Created by IntelliJ IDEA.
  Date: 2021/8/10
  Time: 11:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



    测试查询

    

测试包

姓名:
金额: