初学者必看SSM基本项目(详细图解)

首先是pom.xml导入依赖,都是几个常见的依赖

  • springMVC
  • Spring JDBC
  • Spring Aop
  • Mybatis 依赖包
  • Spring整合MyBatis
  • Servlet

其他一些依赖现在暂时没看

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.ssm.example</groupId>
  <artifactId>SsmDemo</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>SSMDemo Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>

		<!-- 配置 SpringMVC 依赖包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <!-- Spring JDBC 依赖包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <!-- Spring AOP 依赖包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <!--MyBatis 依赖包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.2</version>
        </dependency>
        
        <!-- Spring 整合 MyBatis 依赖包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>

		<!-- MySQL 驱动依赖包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.41</version>
        </dependency>
		
        <!-- C3P0 数据源依赖包 -->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1</version>
        </dependency>
        
        <!-- jstl 依赖包 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

		<!-- ServletAPI 依赖包-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>

        <!-- junit 测试依赖包 -->
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
      </dependency>

  </dependencies>

    <!-- 如果不添加此节点,mybatis 的 mapper.xml 文件都会被漏掉 -->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

</project>

创建db.properties用来保存数据库连接相关信息

jdbc.jdbcUrl=jdbc:mysql://localhost:3306/ssm_example?userUnicode=true&characterEncoding=UTF-8
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=admin

当然,之后是需要建对应的数据库的

创建mybatis-config.xml 用来配置数据库操作的辅助信息

<?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>
    <settings>
        <!--用来打印sql-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <typeAliases>
        <!--这个参数的作用就是,用来指定一个包,这个位置就可以不用写对应的类名了-->
        <package name="org.wzw.entity"/>
    </typeAliases>
</configuration>

创建springmvc.xml用来注册扫描和视图解析器

mvc:annotation-driven/的作用:当配置了< mvc:annotation-driven/>后,Spring就知道了我们启用注解驱动。然后Spring通过< context:component-scan/>标签的配置,会自动为我们将扫描到的@Component,@Controller,@Service,@Repository等注解标记的组件注册到工厂中,来处理我们的请求。

视图解析器作用:他就是使用ViewResource进行视图解析,并在浏览器中渲染模型,而ViewResource是可以解析JSP,Velocity的。

prefix suffix是spring MVC试图解析器的一个属性,
prefix : 是指访问页面的前缀,指定页面存放的文件夹
suffix : 是指文件的后缀名,常见的后缀名有html,jsp,php,txt,mp3

创建applicationContext.xml用来配置MyBatis和数据库相关信息

(ps 这里用到了 C3P0 这个数据库连接池,对应之前的这个依赖)
有一个三大连接池之间的对比:https://blog.csdn.net/wawa3338/article/details/81380662

  <!-- C3P0 数据源依赖包 -->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1</version>
        </dependency>

这里还有一个MyBatis的mapper的映射地址,这个映射地址是用来写那些sql语句的吧,也就是那些xml文件的,这些文件内有sql语句
这里MyBatis 映射的时候,如果不在pom.xml中加入下面的代码的话,是不会成功的

src/main/java **/*.properties **/*.xml false

也就是maven 里面 的作用:
就是为了打包资源文件,因为在默认情况下,maven只打包src/main/resource下的资源。通过设置这个标签的话,就可以将我们需要用到的资源打包了。

而这里可以了解一下 classpath和classpath*的区别了:

classpath:
:表示从类路径中加载资源,classpath:和classpath:/是等价的,都是相对于类的根路径。资源文件库标准的在文件系统中,也可以在JAR或ZIP的类包中。
classpath*::假设多个JAR包或文件系统类路径都有一个相同的配置文件,classpath:只会在第一个加载的类路径下查找,而classpath*:会扫描所有这些JAR包及类路径下出现的同名文件。
classpath的优点是相对来说比较快,而classpath*的优点就是范围会广很多。
还有mapperLocations和configLoaction,甚至一个是s一个没有s

扫描Mybatis的mapper接口,这个和那个映射的关系是什么呢:(MapperScannerConfigurer和mapperLocations之间的区别):
mapperLoactions这个是用来扫描mapper.xml,而MapperScannerConfigurer是用来找mapper接口的,也就是一个是xml,一个是java代码.class

如果mapper.xml和mapper.class在同一个包下且同名的话,MapperScannerConfigurer扫描.class的同时会自动扫描到同名的Mapper.xml并装配到.class中
但如果这两个不在同一个包下面,或者不同名的话,那就必须要用mapperLocations指定的mapper.xml的位置了
而basePackage也就是对应的包路径

这里的事物管理器transactionManager和之前的SqlSessionFactoryBean的区别:
主要也是在于数据源的选择上吧

除去配置事物增强和开启基于注解的事务:

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

    <!--加载资源文件 是为了方便编码人员在一个阶段内不需要频繁书写一个参数的值,而在不同阶段间又可以方便的切换参数配置信息-->
    <context:property-placeholder location="classpath:db.properties"/>

    <!--配置C3P0数据源-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="driverClass" value="${jdbc.driverClass}"/>
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
        <property name="initialPoolSize" value="5"/>
        <property name="maxPoolSize" value="10"/>
    </bean>

    <!--配置MyBatis sqlSessionFactory-->
    <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--指定数据源,也就是前面那个-->
        <property name="dataSource" ref="dataSource"/>
        <!--指定Mybatis mapper的映射地址-->
        <property name="mapperLocations" value="classpath*:org/wzw/dao/*.xml"/>
        <!--指定Mybatis全局配置文件的位置-->
        <property name="configLocation" value="classpath*:mybatis-config.xml"/>
    </bean>

    <!--扫描Mybatis的mapper接口-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--扫描所有的dao接口,加入到ioc容器当中-->
        <property name="basePackage" value="org.wzw.dao"/>
    </bean>
    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--指定数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

</beans>

建立数据表

表名:ssm_example
建表代码如下:

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `gender` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `tel` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `cla` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

INSERT INTO `student` VALUES (1, '孔乙己', '男', 'kongyiji@163.com', '13509856897', '计算机1班');
INSERT INTO `student` VALUES (2, '阿强', '女', 'aqiang@126.com', '12345678909', '软件工程');
INSERT INTO `student` VALUES (3, '阿福', '男', 'afu@12345.com', '13657898762', '数学专业');
INSERT INTO `student` VALUES (4, '阿霞', '女', '12345@qq.com', '12378645987', '英语专业');
INSERT INTO `student` VALUES (5, '指南者', '男', 'compassblog@gmail.com', '13587690873', '打杂搬砖专业');

SET FOREIGN_KEY_CHECKS = 1;

在这里插入图片描述

建立实体类,在entity包

package org.wzw.entity;

public class Student {
    private int id;
    private String name;
    private String gender;
    private String email;
    private String tel;
    private String cla;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getCla() {
        return cla;
    }

    public void setCla(String cla) {
        this.cla = cla;
    }
}

写业务代码

StudentControll.java
package org.wzw.controller;

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 org.springframework.web.bind.annotation.ResponseBody;
import org.wzw.entity.Student;
import org.wzw.service.StudentService;
import org.wzw.service.impl.StudentServiceImpl;

@Controller
@ResponseBody
public class StudentController {
//这个类负责和前端做连接、
    //这里就简单写一个查找所有的学生
    //这里就需要注入service 用他来调用方法
    @Autowired
    private StudentService studentService;
    @RequestMapping("/findAll")
    public String test(){
       //这里就会调用对应的方法
        Student student=studentService.getOne();
        //获得之后,就需要注入
       // model.addAttribute("student",student);
        int id=student.getId();
        return "id= "+id;

    }

}

StudentService

package org.wzw.service;

import org.wzw.entity.Student;


public interface StudentService {

    Student getOne();
}


StudentServiceImpl
package org.wzw.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.wzw.dao.StudentDao;
import org.wzw.entity.Student;
import org.wzw.service.StudentService;

@Service
public class StudentServiceImpl implements StudentService {
    //这里就要实现那个方法 也是直接调用dao层的方法
    @Autowired
    private StudentDao studentDao;
    public Student getOne() {
        return studentDao.getOne();
    }
}

StudentDao

package org.wzw.dao;

import org.wzw.entity.Student;

import java.util.List;

public interface StudentDao {
    Student getOne();
}

StudentDao.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="org.wzw.dao.StudentDao">
    <select id="getOne" resultType="org.wzw.entity.Student">
select * from student;
    </select>
</mapper>

一些遇到的错误:
会出现关于数据库的操作,而其中当我不连接数据库的时候,会报错的是:数据库没连上
但这样一定程度上来说,数据库就是在尝试连接了。
可是当我开启数据库服务之后,就会出现:
java.sql.SQLException: Unknown system variable ‘query_cache_size’
结果网上说可能是版本过低:

<!--MyBatis 依赖包-->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.2</version>
</dependency>
<!-- Spring 整合 MyBatis 依赖包 -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>1.3.1</version>
</dependency>

改成:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.5</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.5</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.41</version>
</dependency>

改成

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.20</version>
</dependency>
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.0.1</version>
  <scope>provided</scope>
</dependency>

改成

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

然后运行一下:
在这里插入图片描述

  • 6
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSM框架是指Spring + SpringMVC + MyBatis的组合,它是一种常用的Java Web应用开发框架。下面我举例一个简单的SSM框架项目,并进行详细分析解释。 假设我们要开发一个书管理系统,包括书的增删改查功能。现在我们使用SSM框架来实现这个项目。 1. 环境搭建: - 首先,我们需要搭建好Java环境,包括JDK、Maven等。 - 然后,我们创建一个Maven项目,并添加Spring、SpringMVC和MyBatis的相关依赖。 2. 数据库设计: - 我们需要设计数据库表,包括书表(book)和书类别表(category)。 - 书表包括字段:书ID、书名称、书作者、书价格、书类别ID等。 - 书类别表包括字段:类别ID和类别名称。 3. 配置文件: - 在项目中,我们需要配置一些关键文件。 - 首先,我们创建一个Spring配置文件,配置Spring相关的Bean、数据源等。 - 然后,我们创建一个SpringMVC配置文件,配置SpringMVC相关的视图解析器、拦截器等。 - 最后,我们创建一个MyBatis配置文件,配置MyBatis的Mapper扫描路径、数据库连接等。 4. 实体类和Mapper接口: - 我们创建书实体类(Book)和书类别实体类(Category),并使用注解或XML配置表与对象的映射关系。 - 然后,我们创建书Mapper接口(BookMapper)和书类别Mapper接口(CategoryMapper),定义增删改查等方法。 5. 服务层和控制层: - 在服务层(BookService和CategoryService),我们实现业务逻辑,调用Mapper接口的方法进行数据库操作。 - 在控制层(BookController和CategoryController),我们处理请求,调用服务层的方法,返回结果给前端。 6. 前端页面: - 我们创建前端页面,包括书列表页面、书详情页面、书添加页面等。 - 使用HTML、CSS和JavaScript来实现页面的布局和交互效果。 - 在前端页面中,我们通过AJAX技术调用后端的接口,获取数据并展示在页面上。 以上就是一个简单的SSM框架项目的举例及详细分析解释。通过Spring来管理Bean的依赖注入和事务管理,通过SpringMVC来处理请求和返回响应,通过MyBatis来操作数据库。整个项目结构清晰,代码分层明确,能够提高开发效率和代码的可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值