这两个步骤大家都很熟悉哈就不放截图了,有疑惑的朋友们可以戳博主的另一篇文章跟着步骤一步一步来 ==>
步骤一、二:创建maven项目+注入依赖
在这里罗列出我所用到的需要注入的常用依赖:
虽然在左侧看到依赖非常之多,但是很多是在导入的时候自动加载的,只需要引入我在代码中写的依赖就可以了
代码:
<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.dyit.ssm</groupId>
<artifactId>ssm-basic</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.spring.version>5.2.12.RELEASE</project.spring.version>
<project.lombok.version>1.18.16</project.lombok.version>
<project.junit.version>4.12</project.junit.version>
<project.mysql.version>8.0.22</project.mysql.version>
<project.mybatis.version>3.5.6</project.mybatis.version>
<project.mybatis-spring.version>2.0.6</project.mybatis-spring.version>
<project.slf4j.version>1.7.25</project.slf4j.version>
<project.jackson.version>2.12.1</project.jackson.version>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${project.lombok.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${project.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${project.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${project.spring.version}</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${project.junit.version}</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${project.mysql.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${project.mybatis.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${project.mybatis-spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${project.slf4j.version}</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${project.jackson.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.4</version>
</dependency>
</dependencies>
</project>
在这里我们需要配置的是,在ssm当中要使用到的springMVC和Mybatis的servlet配置文件,一共两个配置文件,下图是博主的项目结构,建议大家养成良好的编程习惯哈,比如管理好文件夹的结构。清晰明了的文件夹结构往往更方便我们去管理我们的项目。
首先,我们分别创建两个servlet文件的配置文件,因为ssm有两个容器,一个是springMVC管理前后端交互的,既管理controller层,另一个容器是spring+mybatis,管理除了第一个之外所有的,它的任务更重一些。
这两个位置文件的类型如图,创建过程是:
new —> 搜索spring —> 选择如图类型文件
分别起名为springmvc-servlet和springmybatis-servlet,放在对应的结构下:
在这一步,我们将数据源文件druid.properties也加进来,如图中放在mybatis下config文件夹位置,并编写好数据库信息:
模板代码如下,关键位置已做标记需要各位配置自己的数据库:
druid.url=jdbc:mysql://172.16.8.134:3306/car_db?useUnicode=true&serverTimezone=Asia/Shanghai&useSSL=true
druid.username=root
druid.password=123
durid.driverClassName=com.mysql.cj.jdbc.Driver
需要日志功能(可以良好记录我们的每次出错信息,有时候不能在控制台看到的错误信息可以在日志中看到)的话,将日志配置文件log4j.propertis文件也放在resource之下,我已经放进去了,这里设置的日志等级是debug,console,logfile
日志文件代码:
log4j.rootLogger=debug,Console,Logfile
#Console output
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} [%t] %rms (%-5p) [%c] -%l-- {%m}%n
log4j.appender.Logfile=org.apache.log4j.FileAppender
log4j.appender.Logfile.File=/Users/apple/sts_log/mybatis_log/log.log
log4j.appender.Logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.Logfile.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} [%t] %rms (%-5p) [%c] -%l-- {%m}%n
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
以上是src/java/resource下的配置文件,之后,我们在webapp下创建static文件夹,准备将前端界面静态文件放到当中,即页面文件路径都为:static/**.html , *号是根据你的页面名字哈,目前我们先搭建后台环境
使用ssm就要使用mybatis一套东西啦,我们在recourse之下还需要一个mapper文件夹,准备用来放置我们的mapper.xml文件(用来实现对数据库的操作)
项目结构清晰之后呢,我们开始书写具体的配置信息。首先是springMVC的servlet文件,其中大部分内容都是生成的不需要管,下图中标记出来的部分是我们需要写的,内容很少。
这里粗心的博主没有截图到标签们的左括号,需要大家在绿色标签的左边加上一个左尖括号哦!
内容解释:
代码:
<?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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
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-4.3.xsd">
<!-- 分别是:扫描有注解的文件放入容器 注解驱动 静态资源 -->
<context:component-scan base-package="com.dyit.ssm.controller"></context:component-scan>
<mvc:annotation-driven />
<mvc:resources location="static/" mapping="static/**" />
</beans>
这里的内容就比较多了,其中涉及到mybatis一套就需要配置数据库数据源、会话、mapper、事物等,不过不要担心,跟着博主耐心一步一步做下来就好了。
整体内容展示:
springmybatis-servlet.xml文件整体代码:
<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
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-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<context:component-scan base-package="com.dyit.ssm">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 读取数据源对象 druid文件 -->
<context:property-placeholder location="classpath:spring/mybatis/config/druid.properties" />
<!-- 数据源对象 -->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="${druid.url}"></property>
<property name="username" value="${druid.username}"></property>
<property name="password" value="${druid.password}"></property>
</bean>
<!-- 会话工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="druidDataSource"></property>
<property name="typeAliasesPackage" value="com.dyit.ssm.entity"></property>
<property name="mapperLocations" value="classpath:mapper/*.mapper.xml"></property>
</bean>
<!-- 绑定mybatis的操作接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dyit.ssm.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- 管理事务方式 -->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="druidDataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="txManager" />
</beans>
看完展示我们来说一下各部分详细解释:
<context:component-scan base-package="com.dyit.ssm">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<context:property-placeholder location="classpath:spring/mybatis/config/druid.properties" />
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="${druid.url}"></property>
<property name="username" value="${druid.username}"></property>
<property name="password" value="${druid.password}"></property>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="druidDataSource"></property>
<property name="typeAliasesPackage" value="com.dyit.ssm.entity"></property>
<property name="mapperLocations" value="classpath:mapper/*.mapper.xml"></property>
</bean>
<!-- 绑定mybatis的操作接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dyit.ssm.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- 管理事务方式 -->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="druidDataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="txManager" />
到这里我们的servlet就配置完成啦,接下来需要写web.xml文件。
首先是修改版本号为3.1 , 接着我们在这里配置一下刚刚写好的servlet的拦截请求相关配置
到这里配置文件部分就完成啦,接下来编写Java代码
首先展示一下搭建一个项目的基本包结构,我们模拟做一个汽车管理系统:
下面按照创建编写的顺序详细展开:
这里写了lombok的注解
代码:
package com.dyit.ssm.entity;
import org.apache.ibatis.type.Alias;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Alias("Car")
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Car {
private Integer id;
private String brand;
private String color;
private Double price;
}
package com.dyit.spring.dto;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class HttpResp {
private int code;
private String msgString;
private Object results;
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss",timezone="GMT+8")
private Date date;
}
代码:
package com.dyit.ssm.mapper;
import java.util.List;
import com.dyit.ssm.entity.Car;
public interface ICarMapper {
void save(Car car);
void delete(int id);
void update(Car car);
List<Car> findAll();
}
接着实现接口当中的方法,在其中使用了很多种标签帮助我们完成数据库操作语句的拼接,和标志不同的操作类型
代码:
<?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接口的位置,在这里要实现该接口方法 -->
<mapper namespace="com.dyit.ssm.mapper.ICarMapper">
<!-- 建立和表的映射关系 -->
<resultMap type="Car" id="carMap">
<id property="id" column="car_id" />
<result property="brand" column="car_brand" />
<result property="color" column="car_color" />
<result property="price" column="car_price" />
</resultMap>
<insert id="save">
INSERT INTO
car_tab(car_id,car_brand,car_color,car_price)
VALUES(#{id},#{brand},#{color},#{price})
</insert>
<delete id="delete">
DELETE FROM car_tab WHERE car_id = #{id}
</delete>
<update id="update">
UPDATE car_tab
<set>
<if test="brand!=null">
car_brand=#{brand},
</if>
<if test="color!=null">
car_color=#{color},
</if>
<if test="price!=null">
car_price=#{price},
</if>
</set>
WHERE car_id = #{id}
</update>
<select id="findAll" resultMap="carMap">
SELECT * FROM car_tab
</select>
</mapper>
首先我们写出CarService接口,这里是完成把controller来的请求向做分析处理,转换信息后去调用mapper层方法实现业务
接着写具体的实现类,在这里加入事物注解,看到前面与设置事物的配置生效了,出现了事物的标志符号,表现了面向切面aop:
这里是至关重要的一层,负责将前端来的数据转发到后台,将后台实现业务后的数据送回页面。
一般在写完对数据库等具体业务实现功能后先测试Service层,此时不需要启动tomcat,我们使用ssm当中Spring自带的测试框架。
在src/test/Java下创建测试模块,new —> 搜索junit
选择junit3,看到framework.TestCase出来,检查文件夹目录也没有问题。
然后看到最后一行,添加我们将要测试的类
搜索CarServiceImpl,选定我们自己包中的,之后ok —> NEXT
next!!!
next!!!
next!!!!!!!
选定要测试的方法。—> finish
之后就可以看到生成的文件自带我们的四种方法,补全功能即可:
这里的两个注解,第一个是启动我们的mybatis容器,第二个是使用ssm当中Spring自带的测试框架。
代码:
package com.dyit.ssm.test;
import static org.junit.Assert.*;
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;
import com.dyit.ssm.entity.Car;
import com.dyit.ssm.service.ICarService;
@ContextConfiguration(locations="classpath:spring/mybatis/springmybatis-servlet.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class testService{
@Autowired
private ICarService ics;
//@Test
public void testAddCar() {
ics.addCar(new Car(null,"奔驰300", "白色", 500000.00));
System.out.println("添加成功");
}
//@Test
public void testDeleteById() {
fail("Not yet implemented");
}
//@Test
public void testUpdate() {
fail("Not yet implemented");
}
@Test
public void testFindAll() {
System.out.println(ics.findAll());
}
}
可以看到我们数据库当中的内容是已经被查询到了哈,说明我们的service是没有问题的
这个就需要使用测试软件了,我使用的是postman,十分好用给大家安利一波。
输入我们的请求,这里测试findAll请求,选择GET方式
点击send后,看到结果是正常显示出来了,说明这一项功能是没有问题的,前后已经跑通啦!
到这里我们本次的分享就到尾声啦,整理不易,希望我们共同进步,期待你的一键三连哦~(手动狗头)