搭建ssm框架+学习Spring,springMVC,MyBatis基础知识
先看一下项目结构:
- 创建一个maven项目
如图所示创建一个maven项目,注意jdk版本,最好为1.8
修改下maven设置:
设置如图所示,maven下载和配置
否则可能得到我这样的c盘
更改pom.xml文件,使用的这个教程里的:
<?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>org.example</groupId>
<artifactId>ssm</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 统一管理依赖版本-->
<spring.version>5.3.1</spring.version>
</properties>
<!--打包方式-->
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<!--springmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Mybatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!--mybatis和spring的整合包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- ServletAPI -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- Spring5和Thymeleaf整合包 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>
</dependencies>
</project>
更改后一片红,按那个即可,按完等它加载就ok啦
- 设置项目为web项目
依次点击,文件->项目设置->模块->web->加号
如果没有相应路径,点击…进入创建即可
进入右键即可新建文件夹
创建好后,点击确定
加上\web.xml,确定,最后点击应用就可以啦
最后,配置tomcat
此处编辑配置
添加tomcat本地
点击配置,选择本地安装好的tomcat
在部署中,配置工作
选择 war exploded,应用
最后我们可以检验一下是否配置成功:
(1)新建一个jsp文件,右键webappp,选择jsp/jspx
填入名字,选择jsp
点击运行
浏览器中输入这个http://localhost:8080/test.jsp:
这样就代表服务器起起来啦
乱码看着不舒服,调一下tomcat的配置,打开本地下载好的tomcat安装目录,打开logging.properties
把所有UTF-8替换成GBK
重启一下,就没有乱码了
再右键运行
以上一个maven的webapp项目就创建好啦
如果访问不成功,可以考虑三点:
(1)这里路径有没有问题:
(2)先停止项目,打开cmd,输入netstat -aon|findstr “8080”
如此就说明端口未被占用
(3)查看tomcat配置,要先停止这个项目的运行,按住win+r,输入startup.bat,如图:
回车:
浏览器中输入http://localhost:8080/
这样说明tomcat配置成功哦
再看一下项目结构:
- 来开始几个配置文件吧
- jdbc.properties—数据源连接信息文件
文件中配置如下数据库连接信息:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/xx?useSSL=true&useUncode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
#useSSL=true: 安全连接
#useUncode=true&characterEncoding=UTF-8: 防止出现保存乱码问题
#serverTimezone=Asia/Shanghai: mysql8.0+ 需要增加时区的配置
jdbc.username=root
jdbc.password=123456
- mybatis-config.xml-mybatis核心配置文件,依然在resources下
<?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核心配置文件-->
<configuration>
<!--settings:控制mybatis全局行为-->
<settings>
<!--设置mybatis输出日志-->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!--设置别名-->
<typeAliases>
<!-- 配置别名,在写sql文件中的resultType中使用-->
<typeAlias type="org.example.Main" alias="dept"/>
<package name="实体类的包名"/>
</typeAliases>
<!--设置mapper文件夹的路径,mapper文件夹中,写.xml文件,sql语句,不配置默认mappers创建在resources文件夹中-->
<!-- 映射器,告诉mybatis到哪去找.xml文件-->
<mappers>
<!--name是包名,包中所有mapper.xml一次都能加载,将包内的映射器接口实现全部注册为映射器-->
<package name="mappers"/>
</mappers>
</configuration>
- 配置Spring
spring是一个很大范围的,包括SpringMVC,SpringBoot其实都属于它,而SpringFramework是其他一切分支的基础。
以Ioc(控制反转)和AOP(面向切面编程)为内核
这里的spring应该指的是SpringFramework。
这里也记一下IOC(控制反转)和AOP(面向切面编程)是什么:
IOC(控制反转):以前在代码中对对象的操作转移到了spring框架中,由框架来控制对象的生命周期和对象之间的关系,
降低了组件之间的耦合,降低了业务对象之间替换的复杂性,使之能够灵活的管理对象。
AOP(面向切面编程):能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
(1)spring-dao.xml,Spring整合Mybatis的相关的配置文件和dao层
<?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">
<!-- 配置整合mybatis过程 -->
<!-- 关联刚配置的数据库文件jdbc.properties-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 2.数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- 配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 绑定mybatis文件:mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--设置类型别名所对应的包-->
<property name="typeAliasesPackage" value="org.example.pojo"></property>
<!--设置映射文件的路径,只有映射文件的包和mapper接口的包不一致时需要设置-->
<property name="mapperLocations" value="classpath:mappers/*.xml"></property>
</bean>
<!-- 4.配置扫描mapper接口包,动态实现mapper接口,注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 给出需要扫描Dao接口包 -->
<property name="basePackage" value="org.example.mapper"/>
</bean>
</beans>
(2)配置spring-service.xml,管理service层
创建文件步骤同上
<?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">
<!-- 扫描service包下所有使用注解的类型 -->
<context:component-scan base-package="org.example.service" />
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
可能会出现无法解析的错误:
配置文件的上方会出现这个:
直接点击创建,出现这个,点击+号
全选即可,点击确定以后应用就ok啦
(3)配置spring-mvc.xml,主要配置注解扫描 controller、访问静态资源、视图解析器
创建文件步骤同上
配置SpringMvc
<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/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/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--扫描控制层,让指定路径下的包注解(即@Controller)生效,统一交给IOC容器管理-->
<context:component-scan base-package="org.example.controller"/>
<!--静态资源默认servlet配置-->
<mvc:default-servlet-handler/>
<!--视图解析器,作用:prefix+视图名称+suffix 为最终要跳转的页面-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--支持注解驱动 annotation-driven帮助我们自动配置处理器映射器和处理器适配器-->
<!--解决JSON乱码问题-->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!--拦截器-->
<!-- <mvc:interceptors>-->
<!-- <mvc:interceptor>-->
<!-- <mvc:mapping path="/log/**"/>-->
<!-- <bean class="org.example.interceptor.LoginInterceptor"/>-->
<!-- </mvc:interceptor>-->
<!-- </mvc:interceptors>-->
</beans>
(4)最后Spring配置整合文件,applicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="spring-dao.xml"/>
<import resource="spring-service.xml"/>
<import resource="spring-mvc.xml"/>
</beans>
好了,配置就到此结束了
- 尝试写一个接口
(1)controller层:controller文件夹下,右键->新建->java类;名为:CourseController选择class
package org.example.controller;
import org.example.pojo.Course;
import org.example.service.CourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping(value="a")
public class CourseController {
@Autowired
private CourseService courseService;
@GetMapping("/find")
public List<Course> findcourse(){
return courseService.FindCourse();
}
}
(2)这个里面是必须和数据库里字段一一对应的,字段名必须相同,pojo层:右键->新建->java类;名为:Course选择class
package org.example.pojo;
public class Course {
private String CId;
private String Cname;
private String TId;
public String getCId() {
return CId;
}
public void setCId(String CId) {
this.CId = CId;
}
public String getCname() {
return Cname;
}
public void setCname(String cname) {
Cname = cname;
}
public String getTId() {
return TId;
}
public void setTId(String TId) {
this.TId = TId;
}
}
(3)mapper层,这个就是在spring-dao里配置的,扫描接口,现在在里面声明接口和下面的xml里写的是对应的。右键->新建->java类;名为:CourseFund选择接口
package org.example.mapper;
import org.example.pojo.Course;
import java.util.List;
public interface CourseFund {
List<Course> FindCourse();
}
(4)xml文件写sql,对数据库的操作
resources的mappers,右键-》新建-》文件-》名为:Course.xml
看这句 select id=“FindCourse” resultType=“Course”,id=“FindCourse” 这个就是在mapper层里接口中的方法了resultType=“Course” 这个就是返回的结果,我用的是pojo层里的,因为这个返回的就是那几个字段,如果你想选定字段,也可以在创建类,只写你要返回的字段,这里的resultType就是你创建的类名
<?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.example.mapper.CourseFund">
<!--获取list-->
<select id="FindCourse" resultType="Course">
select * from course
</select>
</mapper>
表你可在你数据库里随便创建一个,搞几个数,后面就能显示出来了
(4)service层,此层是用来写处理的,此处可以不要,但是还是写个
先创建一个接口CourseService,里写方法:
package org.example.service;
import org.example.pojo.Course;
import java.util.List;
public interface CourseService {
List<Course> FindCourse();
}
再在impl创建java类实现方法CourseServiceImpl,在这里可以进行处理,写逻辑:
package org.example.service.impl;
import org.example.mapper.CourseFund;
import org.example.pojo.Course;
import org.example.service.CourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional
public class CourseServiceImpl implements CourseService {
@Autowired
private CourseFund courseFund;
@Override
public List<Course> FindCourse() {
return courseFund.FindCourse();
}
}
最后访问这个接口:
就可以啦