SSM整合(Maven工程)

一、概述

SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。

Spring

  Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。

  Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地new一个对象,而是让Spring框架帮你来完成这一切。

SpringMVC

  SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。

mybatis

  mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。

二、代码分析

项目结构

文件配置信息

  1. pom.xml

一定要设置打包方式为war方式,不然不能生成webaap

<packaging>war</packaging>
    <dependencies>
<!-- SpringMVC -->
<!-- 因为Spring MVC属于SpringFrameWork的后续产品,所以导入该依赖就不用单独导入Spring依赖了-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.1</version>
</dependency> <!-- 导入该包开启事务管理-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.9</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> <!-- Spring5和Thymeleaf整合包 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.12.RELEASE</version>
</dependency> <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency> <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency> <!-- mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency> <!-- druid数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency> <!-- log4j日记依赖-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency> </dependencies> <!-- 解决资源读取问题-->
<build>
<resources>
<resource>
<directory>src/main/resources/</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
  1. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 设置编码,要在最前面-->
<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>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- 这里已经将SpringMVC配置-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringMVC-config.xml</param-value>
</init-param>
<!-- 服务器启动时加载 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <!--Spring配置: needed for ContextLoaderListener -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:ApplicationContext.xml</param-value>
</context-param> <!-- ContextLoaderListener监听器 -->
<!-- ContextLoaderListener监听器的作用就是启动Web容器时,自动装配ApplicationContext的配置信息-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
  1. SpringMVC-config.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 组件扫描,Spring配置和SpringMVC配置中都要配置这个 -->
<context:component-scan base-package="com.zhen.controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 配置Thymeleaf视图解析器 -->
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="order" value="1"/>
<property name="characterEncoding" value="UTF-8"/>
<property name="templateEngine">
<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver">
<bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"> <!-- 视图前缀 -->
<property name="prefix" value="/WEB-INF/templates/"/> <!-- 视图后缀 -->
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
<property name="characterEncoding" value="UTF-8"/>
</bean>
</property>
</bean>
</property>
</bean>
<!-- 视图控制器-->
<mvc:view-controller path="/" view-name="index"/>
<!-- 启动默认的Servlet-->
<mvc:default-servlet-handler/>
<!-- 启动注解驱动-->
<mvc:annotation-driven/>
</beans>
  1. 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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
<!-- 开启组件扫描,并且设置不扫描注解为Controller-->
<context:component-scan base-package="com.zhen">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan> <!-- 引入外部配置文件,类型为properties-->
<!-- 注意这里的classpath:别忘了-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置数据库连接池信息,关于连接池的所有属性配置都可以配置-->
<bean id="DataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</bean> <!-- 开启事务管理-->
<bean id="DataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="DataSource"/>
</bean> <!-- 创建一个sqlSessionFactory对象-->
<!-- 注意这里的classpath:别忘了-->
<bean id="SqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据库连接池-->
<property name="dataSource" ref="DataSource"/>
<!-- mybatis配置-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!-- 因为mybatis-config.xml中没有注册dao映射所以用此配置属性来注册mapping-->
<property name="mapperLocations" value="classpath:com/zhen/dao/*.xml"/>
</bean> <!-- 单独创建一个可以批量操作的SqlSession对象-->
<!-- 这个也可以没有,只是单独设置一个sqlsession可以进行批量操作,通过自动注入来用这个对象 -->
<!-- SqlSessionTemplate继承了SqlSession-->
<bean id="SqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="SqlSessionFactoryBean" />
<!--可以配置一个可以进行批量执行的sqlSession BATCH批量执行 -->
<constructor-arg name="executorType" value="BATCH"/>
</bean> <!-- 扫描所有的mapper接口的实现,让这些mapper能够自动注入;
base-package:指定mapper接口的包名
-->
<mybatis-spring:scan base-package="com.zhen"/>
</beans>
  1. 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>
<!-- 这里可以配置一些想要的mybatis的配置,但是Spring配置中都能配置,要想结构鲜明就很清楚来配置--> <typeAliases>
<typeAlias type="com.zhen.pojo.User" alias="User"/>
</typeAliases> </configuration>
  1. jdbc.properties
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/book
mysql.username=root
mysql.password=123456

类结构

  1. pojo
public class User {
private Integer id;
private String username;
private String password;
private String email; public User() {
} public User(Integer id, String username, String password, String email) {
this.id = id;
this.username = username;
this.password = password;
this.email = email;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} @Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
'}';
}
}
  1. Dao层
  • 接口
//要声明此注解,不然不能自动注入
@Repository
public interface UserMapping {
List<User> queryUser();
}
  • mapping
<?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="com.zhen.dao.UserMapping">
<!-- 在mybatis配置了别名-->
<select id="queryUser" resultType="User">
select *from t_user
</select>
</mapper>
  1. Service层
@Service
public class UserService {
@Autowired
private UserMapping userMapping; //自动注入来用一个可以批量操作的SqlSession,前提是在Spring配置文件中配置了这个对象,
// 然后用原始的方法将调用接口中的crud方法
//例如:public List<User> getBatchUser(){
// UserMapping mapper = batchSqlSession.getMapper(UserMapping.class);
// return mapper.queryUser();
// }
@Autowired
private SqlSession batchSqlSession; public List<User> getAllUser(){
return userMapping.queryUser();
} }
  1. Controller层
@Controller
public class SpringController {
//自动注入
@Autowired
public UserService userService; //请求映射
@RequestMapping("/getUser")
public String queryUser(Model model){
List<User> users = userService.getAllUser();
model.addAttribute("users",users);
return "Users";
}
}

三、总结

最新文章

  1. c++2008 并行配置文件和获取字典的所有key的方法
  2. [转]那些年我还不懂:IList,ICollection,IEnumerable,IEnumerator,IQueryable
  3. 用PDB库调试Python程序
  4. python pip和easy_install使用方式(转载)
  5. Log4Net 日志配置[附带源码]
  6. Qt中实现启动画面(延时过程中要加上app.processEvents())
  7. ratingbar设置不可调节星星数量
  8. css2.1实现圆角边框
  9. JSONP、图片Ping、XMLHttpRequest2.0等跨域资源请求(CORS)
  10. 【Tools】ubuntu虚拟机Vmware Tools 安装记录
  11. 安卓自定义日期控件(仿QQ,IOS7)
  12. java基础知识—抽象和封装
  13. HDU - 6203:ping ping ping (DFS序 贪心)
  14. mouseover,mouseout与mouseenter,mouseleave
  15. Windows下安装MySql5.7(解压版本)
  16. [CNBETA]动图告诉你 光速到底有多慢?
  17. hive中数据存储格式对比:textfile,parquent,orc,thrift,avro,protubuf
  18. cocos2d-x 3.0正式版 cmd创建project以及一键创建project
  19. 数据库的硬迁移和mysql 5.5.38源码安装
  20. 教你ABBYY FineReader 12添加图像的技巧

热门文章

  1. Failed to convert property value of type &#39;java.lang.String&#39; to required type &#39;java.util.Date&#39;
  2. Kotlin Coroutine(协程): 二、初识协程
  3. 根据使用者反馈,对开源项目 go-gin-api 新增两个功能
  4. Java中的四种引用和引用队列
  5. 阿里云低延时直播 RTS 能力升级 让直播推流效果更佳
  6. SyntaxError: unexpected EOF while parsing成功解决
  7. springMVC-9-异常处理器和拦截器
  8. springMVC-2-MVC初步了解
  9. Album++:分布式事务专辑-基础概念
  10. 微信小程序云开发-云存储-使用云开发控制台存储文件