回头看SSM项目的创建

以mavenJavaweb项目为例

目录

1.创建项目

进入idea,new project

配置Maven路径:

2.配置文件

pom.xml文件

web.xml

ApplicationContext.xml

jdbc.properties

log4j.properties

springmvc.xml

3.Java部分

controller:控制器

service:业务逻辑接口

serviceImpl:业务逻辑实现类

dao:数据访问接口

domain:实体类,对应数据库中的表结构

3.Jsp页面


1.创建项目

进入idea,new project

配置Maven路径:

home path找maven的安装目录;

settings file找maven的conf目录下的settings.xml

Local repository是本地库,找到它的路径,同时它在settings.xml中有配置

2.配置文件

建好的项目如图:

pom.xml文件

管理依赖:

Spring Core & MVC (spring-contextspring-webmvc):提供了IoC容器、AOP、事务管理和MVC框架。

MyBatis (mybatis):核心的ORM框架。

MyBatis-Spring (mybatis-spring):关键的整合包,负责将MyBatis的生命周期融入Spring容器,使得MyBatis的SqlSessionMapper接口可以由Spring来创建和管理。

MySQL Driver (mysql-connector-java):连接MySQL数据库的必备驱动。

Druid (druid):阿里巴巴出品的高性能数据库连接池。连接池负责管理数据库连接,避免频繁创建和关闭连接带来的性能开销。

Spring JDBC & TX (spring-jdbcspring-tx):提供了JdbcTemplate和声明式事务管理的支持。

Servlet API (javax.servlet-api):编写Servlet和Web应用的基础API。

AspectJ (aspectjweaveraspectjrt):提供AOP(面向切面编程)能力,Spring的事务管理就是基于AOP实现的。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.qcby</groupId>
  <artifactId>SSMDemo1028</artifactId>
  <version>1.0.0</version>
  <packaging>war</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>5.3.18</spring.version>
    <mybatis.version>3.5.9</mybatis.version>
  </properties>

  <dependencies>
    <!-- Spring核心 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!-- Spring MVC -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!-- MyBatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>

    <!-- MyBatis-Spring整合 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.7</version>
    </dependency>

    <!-- 数据库驱动 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
    </dependency>

    <!-- 连接池 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.8</version>
    </dependency>

    <!-- Spring JDBC (包含事务管理) -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!-- Spring TX (事务管理) -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!-- Servlet API -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.7</version>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.9.7</version>
    </dependency>
  </dependencies>
</project>

web.xml

这是Web应用的总入口,它配置了Tomcat应该如何启动和运行应用。

<context-param> 与 ContextLoaderListener:

作用:启动Spring的根Web应用上下文(Root WebApplicationContext)。

流程:当Tomcat启动时,ContextLoaderListener监听器会初始化,读取contextConfigLocation参数指定的ApplicationContext.xml文件,创建一个Spring容器。这个容器主要承载业务层和持久层的Bean(如Service, Dao, 数据源, 事务管理器等)。

DispatcherServlet 与 springmvc.xml:

作用:启动Spring MVC的子应用上下文(Servlet WebApplicationContext),专门用于MVC相关的组件。

流程:当第一个HTTP请求到达时,名为springmvc的DispatcherServlet会初始化,并加载springmvc.xml配置。这个容器是根容器的子容器,可以访问根容器中的Bean,它主要承载表现层的Bean(如Controller, 视图解析器)。DispatcherServlet是所有HTTP请求的前端控制器,负责路由。

CharacterEncodingFilter:

作用:全局字符编码过滤器。

流程:在请求到达DispatcherServlet之前,该过滤器会拦截所有请求(/*),将请求和响应的字符编码强制设置为UTF-8,解决中文乱码问题。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

  <!-- 配置Spring监听器 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:ApplicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!-- 配置Spring MVC前端控制器 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!-- 字符编码过滤器 -->
  <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>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

ApplicationContext.xml

这是Spring框架的核心配置文件,负责管理业务逻辑、数据源和事务。

<context:component-scan base-package="com.qcby.service" />:

告诉Spring去扫描com.qcby.service包及其子包,将所有带有@Component, @Service等注解的类自动创建为Bean并纳入容器管理。

dataSource Bean (DruidDataSource):

配置数据库连接池。这里有一个潜在问题:driverClassName和url的值是硬编码的,通常使用jdbc.properties文件来配置,通过<context:property-placeholder>引入。

sessionFactory Bean (SqlSessionFactoryBean):

这是MyBatis与Spring整合的关键Bean。

它注入了数据源dataSource。

它通过mapperLocations属性指定了MyBatis的SQL映射文件(mapper/*.xml)的位置。

mapperScannerConfigurer Bean (MapperScannerConfigurer):

这是另一个关键整合组件。

它会自动扫描com.qcby.dao包,为其中每一个MyBatis的Mapper接口生成一个实现类的Bean,并将其注册到Spring容器中。这样,就可以在Service中直接使用@Autowired来注入Mapper接口,而无需编写其实现类。

事务配置 (transactionManager, <tx:advice>, <aop:config>)

transactionManager:定义事务管理器,它需要依赖数据源。

<tx:advice>:定义事务的增强 advice,即“事务应该如何运作”。这里配置了以find开头的方法为只读,其他所有方法都使用默认事务。

<aop:config>:定义切面,即“将上述事务增强应用到哪些地方”。这里通过AOP表达式指定,将事务增强应用到com.qcby.service包下所有以ServiceImpl结尾的类的所有公共方法上。

<?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.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--配置文件+注解方式-->
    <context:component-scan base-package="com.qcby.service" />

    <!--配置druid连接池-->
    <!--配置开源连接池 Druid连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql:///gan_da_shi_zu" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean>

    <!--Spring框架整合mybatis框架-->
    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
        <!--注入连接池对象-->
        <property name="dataSource" ref="dataSource" />
        <!--加载映射配置文件-->
        <property name="mapperLocations" value="classpath:mapper/*.xml" />
    </bean>

    <!--把dao对象存入到IOC容器中-->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactory" ref="sessionFactory" />
        <!--扫码dao所在的包,把包中接口的代码对象存入到IOC容器中-->
        <property name="basePackage" value="com.qcby.dao" />
    </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="*" />
        </tx:attributes>
    </tx:advice>

    <!--配置事务的增强-->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(public * com.qcby.service.*ServiceImpl.*(..))" />
    </aop:config>

</beans>

jdbc.properties

这是一个键值对属性文件,用于将易变的数据库配置与Spring主配置解耦。

它定义了驱动、URL、用户名和密码。

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/322?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=root

log4j.properties

用于配置Log4j 1.x版本的日志行为。

它设置了日志的输出目的地(控制台stdout和文件file)。

设置了日志的输出格式 (ConversionPattern)。

设置了日志的级别 (INFO)和特定包(com.xxx.dao)的级别(DEBUG),这在调试MyBatis生成的SQL时非常有用。

设置了日志文件的滚动策略(单个文件最大10MB,最多备份10个)。

# 日志级别
log4j.rootLogger=INFO, stdout, file

# 控制台输出
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=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# 文件输出
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/ssm.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# MyBatis日志
log4j.logger.com.xxx.dao=DEBUG

springmvc.xml

这个文件专门配置Web层(MVC)的相关行为。

<context:component-scan base-package="com.qcby.controller">:

专门扫描com.qcby.controller包,将带有@Controller注解的类注册为Web层的Bean。

viewResolver Bean (InternalResourceViewResolver):

视图解析器。当Controller返回一个字符串如"success"时,它会将其解析为具体的物理视图路径:/static/pages/success.jsp。

<mvc:annotation-driven />:

至关重要的配置。它注册了Spring MVC所必需的一系列处理器和适配器,使得@Controller, @RequestMapping, @ResponseBody等注解能够正常工作。它还默认配置了JSON转换(如果Jackson在classpath中)。

(注释掉的)<mvc:resources />:

如果启用,用于处理静态资源(CSS, JS, 图片)。它告诉Spring MVC,对于特定路径的请求(如/css/**)直接到文件系统目录(如/css/)下查找资源,而不要交给Controller处理。

总结:这个文件让Spring MVC能够找到Controller、解析视图,并处理静态资源。

<?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">

    <!-- 扫描controller的注解,别的不扫描 -->
    <context:component-scan base-package="com.qcby.controller"></context:component-scan>
    <!-- 配置视图解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- JSP文件所在的目录 -->
        <property name="prefix" value="/static/pages/" />
        <!-- 文件的后缀名 -->
        <property name="suffix" value=".jsp" />
    </bean>

    <!--静态资源不过滤
    <mvc:resources location="/css/" mapping="/css/**" />  -->
<!--    <mvc:resources location="/static/image/" mapping="/images/**" />-->
<!--    <mvc:resources location="/static/js/" mapping="/js/**" />-->

    <!-- 开启对SpringMVC注解的支持 -->
    <mvc:annotation-driven />

</beans>

3.Java部分

controller:控制器

作用:接收HTTP请求,调用Service,返回响应。

package com.qcby.controller;

import com.qcby.domain.Admin;
import com.qcby.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;

@Controller          // 标记为Spring MVC控制器
@RequestMapping("/admin")  // 根路径映射
public class AdminController {

    @Autowired      // 依赖注入Service
    private AdminService adminService;

    @RequestMapping("/select")  // 具体路径映射:/admin/select
    public void select(){
        List<Admin> admins = adminService.findAll();
        System.out.println("查询逻辑......");
        for(Admin ad : admins){
            System.out.println(ad);  // 在控制台输出
        }
    }
}

service:业务逻辑接口

作用:定义业务逻辑的方法声明

package com.qcby.service;

import com.qcby.domain.Admin;

import java.util.List;

public interface AdminService {
    List<Admin> findAll();
}

serviceImpl:业务逻辑实现类

作用:实现具体的业务逻辑,协调多个DAO操作。

package com.qcby.service.impl;

import com.qcby.dao.AdminDao;
import com.qcby.domain.Admin;
import com.qcby.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service  // 正确的注解位置 - 标记为Spring管理的Bean
public class AdminServiceImpl implements AdminService {

    @Autowired  // 依赖注入 - Spring自动注入AdminDao的实现
    private AdminDao adminDao;

    @Override
    public List<Admin> findAll() {
        return adminDao.findAll();  // 直接调用DAO层
    }
}

@Service:告诉Spring这个类是业务逻辑组件,要创建Bean并管理

@Autowired自动注入AdminDao的实例(由MyBatis-Spring整合包自动生成)

这里只是简单转发,实际项目中会包含复杂的业务逻辑

dao:数据访问接口

作用:定义数据库操作的方法声明。

这是一个接口,只有方法声明没有实现

MyBatis会通过动态代理自动生成这个接口的实现类

方法名findAll对应Mapper XML文件中的SQL语句ID

package com.qcby.dao;

import com.qcby.domain.Admin;

import java.util.List;

public interface AdminDao {
    List<Admin> findAll();
}

domain:实体类,对应数据库中的表结构

package com.qcby.domain;

public class Admin {

    private String name;
    private String password;

    public Admin(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public Admin(){}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "admin{" +
                "name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

4.Jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<body>
<h2><%= "Hello World!" %></h2>
<button id="select">查询</button>
</body>
<script>
    $(document).ready(function(){
        $("#select").click(function(){
            $.ajax({
                url:"admin/select",
                type:"get",
                success:function(){
                    console.log("查询成功")
                },
                error:function(){
                    console.log("查询失败")
                }
            })
        })
    })
</script>
</html>

这里就是简单接了按钮和绑定了事件,调用select接口,只是打印到了控制台:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值