SSM框架简易实现(注解开发)

SSM框架简易实现(注解开发)

结构

一、pom坐标

1、打包
<packaging>war</packaging>
2、版本锁定
<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
  <!--版本锁定-->
  <spring.version>5.0.2.RELEASE</spring.version>
   <mybatis.version>3.4.5</mybatis.version>
  <mysql.version>8.0.23</mysql.version>
  <slf4j.version>1.6.6</slf4j.version>
  <log4j.version>1.2.12</log4j.version>
</properties>
3、坐标导入
 <dependencies>    
        <!--web工程依赖-->   
        <dependency>     
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>    
            <version>2.5</version>   
            <scope>provided</scope>    
        </dependency>    
        <dependency>    
            <groupId>javax.servlet.jsp</groupId>     
            <artifactId>jsp-api</artifactId>    
            <version>2.0</version>   
            <scope>provided</scope>  
        </dependency>  

        <!--jsp依赖-->
        <dependency>    
            <groupId>javax.servlet</groupId>     
            <artifactId>jstl</artifactId>    
            <version>1.2</version>  
        </dependency>

        <!-- spring核心依赖 -->   
        <dependency>     
            <groupId>org.springframework</groupId>    
            <artifactId>spring-context</artifactId> 
            <version>${spring.version}</version>  
        </dependency>   
        <dependency>    
            <groupId>org.springframework</groupId> 
            <artifactId>spring-jdbc</artifactId>     
            <version>5.0.2.RELEASE</version>  
        </dependency>   
        <dependency>   
            <groupId>org.springframework</groupId>   
            <artifactId>spring-tx</artifactId>    
            <version>${spring.version}</version>  
        </dependency>
        <dependency>   
            <groupId>org.aspectj</groupId>  
            <artifactId>aspectjweaver</artifactId> 
            <version>1.6.8</version>    
        </dependency>
        <!--spring-context依赖于:spring-aop、spring-beans、spring-core、spring-expression--> 
        <!--aop 
        <dependency>  
            <groupId>org.springframework</groupId> 
            <artifactId>spring-aop</artifactId>    
            <version>5.0.2.RELEASE</version>  
        </dependency>--> 
        <!--<dependency>   
            <groupId>org.springframework</groupId>   
            <artifactId>spring-beans</artifactId>  
            <version>5.0.2.RELEASE</version>    
        </dependency>    
        <dependency>   
            <groupId>org.springframework</groupId>    
            <artifactId>spring-core</artifactId>    
            <version>5.0.2.RELEASE</version> 
        </dependency>   
        <dependency>    
            <groupId>org.springframework</groupId> 
            <artifactId>spring-expression</artifactId>     
            <version>5.0.2.RELEASE</version>    
        </dependency>-->  

        <!--SpringMVC核心依赖--> 
        <dependency>    
            <groupId>org.springframework</groupId> 
            <artifactId>spring-webmvc</artifactId> 
            <version>${spring.version}</version>  
        </dependency> 
        <!--spring-webmvc依赖于:spring-context、spring-web-->   
        <!--<dependency>   
            <groupId>org.springframework</groupId>     
            <artifactId>spring-web</artifactId>   
            <version>${spring.version}</version>  
        </dependency>-->   

        <!--Mybatis核心依赖-->
        <dependency>    
            <groupId>org.mybatis</groupId>     
            <artifactId>mybatis</artifactId>    
            <version>${mybatis.version}</version>
        </dependency>   
        <!--mybatis依赖于:日志jar-->   
        <!--<dependency>  
            <groupId>log4j</groupId>    
            <artifactId>log4j</artifactId>   
            <version>${log4j.version}</version>  
        </dependency>   
        <dependency>    
            <groupId>org.slf4j</groupId>    
            <artifactId>slf4j-api</artifactId>   
            <version>${slf4j.version}</version>   
        </dependency>   
        <dependency>    
            <groupId>org.slf4j</groupId>   
            <artifactId>slf4j-log4j12</artifactId>   
            <version>${slf4j.version}</version> 
        </dependency>-->   

        <!--Mybatis与Spring整合--> 
        <dependency>    
            <groupId>org.mybatis</groupId> 
            <artifactId>mybatis-spring</artifactId>   
            <version>1.3.0</version>   
        </dependency>  

        <!--mybatis-spring提供的依赖:spring-jdbc、spring-context、spring-tx-->   

        <!--数据库相关-->  
        <!--数据库驱动-->   
        <dependency>  
            <groupId>mysql</groupId>   
            <artifactId>mysql-connector-java</artifactId>   
            <version>${mysql.version}</version>  
        </dependency>   
        <!--数据库连接池-->  
        <dependency>    
            <groupId>c3p0</groupId>   
            <artifactId>c3p0</artifactId>  
            <version>0.9.1.2</version> 
            <type>jar</type> 
            <scope>compile</scope>  
        </dependency>  
        <!--德鲁伊连接池--> 
        <!--<dependency>   
            <groupId>com.alibaba</groupId>  
            <artifactId>druid</artifactId>  
            <version>1.1.10</version>   
        </dependency>-->   
        
        <!--测试-->
        <dependency>    
            <groupId>org.springframework</groupId>  
            <artifactId>spring-test</artifactId> 
            <version>${spring.version}</version>  
        </dependency>   
        <dependency>  
            <groupId>junit</groupId> 
            <artifactId>junit</artifactId>    
            <version>4.12</version>   
            <scope>compile</scope> 
        </dependency> 
    </dependencies>
————————————————
版权声明:本文为CSDN博主「Offical_CodeStar」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45756240/article/details/119968645

二、web.xml

<web-app>
      <display-name>Archetype Created Web Application</display-name>
</web-app>
1、过滤器CharacterEncodingFilter:解决网页中文乱码问题
<!--解决中文乱码的过滤器:CharacterEncodingFilter-->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <!--设置编码集-->
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <!--过滤所有-->
    <url-pattern>/*</url-pattern>
</filter-mapping>
2、配置前端控制器DispatcherServlet:
<!--配置前端控制器:DispatcherServlet-->
  <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--加载springmvc.xml配置文件-->
        <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--启动服务器,创建该servlet-->
        <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
  </servlet-mapping>
3、配置Servlet监听器,加载spring的配置文件
    由于Servlet监听器默认只加载WEB-INF下的xml配置文件,所以在不移动applicationContext.xml位置的情况下,配置加载类路径的配置文件 
 <!--配置Servlet监听器,加载spring的配置文件:ContextLoaderListener-->
  <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!--由于Servlet监听器默认只加载WEB-INF下的xml配置文件,所以在不移动applicationContext.xml位置的情况下,配置加载类路径的配置文件-->
  <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

三、springmvc.xml

<?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">
</beans>
1、配置扫描包
<!--配置扫描包:只扫描controller-->
<context:component-scan base-package="cn.itcast">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
2、配置视图解析器InternalResourceViewResolver:将SpringMVC控制器中的返回结果封装成一个ModelAndView对象,通过SpringMVC中的视图解析器,使用ViewResolver对控制器返回的ModelAndView对象进行解析,将逻辑视图转换成物理视图,调用View中的render()方法对物理视图进行渲染。
<!--配置视图解析器对象:InternalResourceViewResolver-->
<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>
3、配置过滤静态资源包
<!--配置过滤静态资源-->
<mvc:resources location="/css/" mapping="/css/**" />
<mvc:resources location="/images/" mapping="/images/**" />
<mvc:resources location="/js/" mapping="/js/**" />
4、开启SpringMVC注解支持
<!--开启SpringMVC的注解支持-->
<mvc:annotation-driven></mvc:annotation-driven>

四、applicationContext.xml

<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.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">
</beans>
1、配置扫描包:将Controller的包过滤扫描
<!--开启注解的扫描,只处理service和dao,不处理controller-->
<context:component-scan base-package="cn.itcast">
    <!--配置不扫描的包-->
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
2、整合Mybatis:动态代理
<!-- 配置C3P0的连接池对象 :对应SqlMapConfig.xml的环境配置-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql:///ssm"/>
    <property name="user" value="root"/>
    <property name="password" value="123456"/>
</bean>

<!--配置SQLSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
</bean>

<!--配置IAccountDao接口所在的包:MapperScannerConfigurer  对应SqlMapConfig.xml的映射配置-->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="cn.itcast.dao"></property>
</bean>
3、声明式事务管理
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</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增强-->
<aop:config>
    <aop:advisor advice-ref="txAdvice" pointcut="execution(* cn.itcast.service.impl.*.*(..))"/>
</aop:config>

五、实体类:domain

Account
package cn.itcast.domain;

import java.io.Serializable;
/**
* 账户类
*/
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 +
                '}';
    }
}

六、持久层:dao

IAccountDao:注解开发,不需要实现类
package cn.itcast.dao;

import cn.itcast.domain.Account;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
* 账户持久层接口
*/
@Repository
public interface IAccountDao {
    /**
     * 查询所有
     * @return
     */
    @Select("select * from account")
    public List<Account> findAll();

    /**
     * 保存账户
     */
    @Insert("insert into account (name,money) values (#{name},#{money})")
    public void saveAccount(Account account);
}

七、业务层:service

1、IAccountService
package cn.itcast.service;

import cn.itcast.domain.Account;
import java.util.List;

/**
* 账户业务层接口
*/
public interface IAccountService {
    /**
     * 查询所有
     * @return
     */
    public List<Account> findAll();

    /**
     * 保存账户
     */
    public void saveAccount(Account account);
}

2、AccountServiceImpl
package cn.itcast.service.impl;

import cn.itcast.dao.IAccountDao;
import cn.itcast.domain.Account;
import cn.itcast.service.IAccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* 账户业务层实现类
*/
@Service("accountService")
public class AccountServiceImpl implements IAccountService {

    @Autowired
    private IAccountDao accountDao;

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

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

八、表现层:controller

AccountController
package cn.itcast.controller;

import cn.itcast.domain.Account;
import cn.itcast.service.IAccountService;
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控制层
*/
@Controller
@RequestMapping("/account")
public class AccountController {

    @Autowired
    private IAccountService accountService;

    @RequestMapping("/findAll")
    public String findAll(Model model){
        //调用service
        List<Account> list = accountService.findAll();
        //存入model
        model.addAttribute("list",list);

        return "list";
    }

    @RequestMapping("/saveAccount")
    public void saveAccount(Account account, HttpServletResponse response, HttpServletRequest request) throws Exception {
        //保存账户
        accountService.saveAccount(account);
        //重定向
        response.sendRedirect(request.getContextPath()+"/account/findAll");
        return;
    }
}

九、index.jsp

<%--
  Created by IntelliJ IDEA.
  User: 嘿,周星星
  Date: 2021/8/26
  Time: 10:33
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="account/findAll">查询所有账户</a>
    
    <form action="account/saveAccount" method="post">
        姓名:<input type="text" name="name"></br>
        金额:<input type="text" name="money"></br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

十、WEB-INF/pages/list.jsp

<%--
  Created by IntelliJ IDEA.
  User: 嘿,周星星
  Date: 2021/8/26
  Time: 15:09
  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" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>查询结果</h3>
    <c:forEach var="account" items="${list}">
        ${account.name}
        ${account.money}
    </c:forEach>
</body>
</html>
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值