基于Maven的SSM框架整合(Spring+SpringMVC+MyBatis)

    xiaoxiao2021-03-26  11

    1、Maven引入需要的JAR包

    <?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.jtzen9</groupId> <artifactId>ssm</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <build> <finalName>ssm</finalName> <!-- 统一源代码与编译输出的JDK版本 --> <plugins> <!-- Compile --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-framework-bom</artifactId> <version>4.2.5.RELEASE</version> <type>pom</type> <!-- scope的值为import 它只使用在<dependencyManagement>中, 表示从其它的pom中导入dependency的配置 --> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- 1:日志 --> <!-- java日志:slf4j,log4j,logback,common-logging slf4f 是规范/接口 日志实现:log4j,logback,common-logging 使用:slf4j + logback --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.7</version> </dependency> <!-- 实现slf4j接口并整合 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.7</version> </dependency> <!-- 2:数据库相关依赖 --> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!-- c3p0数据库连接池 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <!-- 3:DAO框架 --> <!-- MyBatis依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.0</version> </dependency> <!-- MyBatis自身实现的spring整合依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!-- 4:Servlet web相关依赖 --> <!-- 若已在module里引入tomcat运行库,则无需此依赖库 --> <!-- Tomcat8为Servlet 3.1, Tomcat7为Servlet 3.0 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- jsp标签库 --> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <!-- jstl --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- 5:spring依赖 --> <!-- 5.1:spring核心依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <!-- 5.2:spring 数据访问与集成 dao层依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> </dependency> <!-- 5.3:spring web相关依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <!-- 5.4:spring test相关依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <!-- 6:工具类 --> <!-- 6.1:测试框架 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- 配置JSON视图解析器的依赖 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.3</version> </dependency> <!-- 配置multipart解析器需要导入commons-fileupload包 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> </dependencies> </project>

    2、目录结构

    3、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_3_1.xsd" version="3.1"> <!-- Spring MVC 页面请求乱码 --> <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> <!-- ContextLoaderListener上下文 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springConfig/spring-*.xml</param-value> </context-param> <!-- 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:springConfig/springmvc-web.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 主页 --> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>

    3、Spring整合配置文件

    按照controller、service、dao层等进行配置。其中,controller层(web)就是spring 整合 spring mvc配置;dao层就是spring 整合 mybatis的配置。

    3.1、SpringMVC配置文件:springmvc-web.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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 配置SpringMVC --> <!-- 1:开启SpringMVC注解模式 --> <!-- 简化配置: (1)自动注册DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter (2)提供一系列:数据绑定,数字和日期的format @NumberFormat,@DataTimeFormat, xml,json默认读写支持. --> <mvc:annotation-driven> <!-- 处理responseBody 里面日期类型 --> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="dateFormat"> <bean class="java.text.SimpleDateFormat"> <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss"/> </bean> </property> </bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 2:扫描web相关的bean --> <context:component-scan base-package="com.jtzen9.web"/> <!-- 3:静态资源默认servlet配置 (1)加入对静态资源的处理:js,gif,png (2)允许使用"/"做整体映射 --> <mvc:default-servlet-handler /> <!-- 4:配置InternalResourceViewResolver 将视图解析为Web应用的内部资源(一般为JSP) --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 5:配置ContentNegotiatingViewResolver 通过考虑客户端需要的内容类型来解析视图, 委托给另外一个能够产生对应内容类型的视图解析器 --> <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="contentNegotiationManager" ref="contentNegotiationManager" /> <property name="order" value="1" /> <property name="defaultViews"> <list> <!-- JSON View --> <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" /> </list> </property> </bean> <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> <!-- favorParameter设置为true可以用[?format=表述形式]这种方式。 --> <property name="favorParameter" value="true" /> <property name="parameterName" value="format" /> <property name="ignoreAcceptHeader" value="true" /> <property name="mediaTypes"> <value> json=application/json xml=application/xml htm=text/html </value> </property> <property name="defaultContentType" value="text/html" /> </bean> <!-- 6:配置multipart解析器,处理multipart形式的数据 CommonsMultipartResolver类需要导入commons-fileupload包 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 上传文件的大小 200*1024*1024即200M --> <property name="maxUploadSize" value="209715200" /> <!-- 默认编码 --> <property name="defaultEncoding" value="UTF-8" /> <!-- 是否延迟加载, resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常 --> <property name="resolveLazily" value="true" /> </bean> </beans>

    3.2、整合Mybatis

    3.2.1、spring-dao.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置整合mybatis过程 --> <!-- 1:配置数据库相关参数properties的属性:${url} --> <context:property-placeholder location="classpath:jdbc.properties" /> <!-- 2:数据库连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 配置连接池属性 --> <property name="driverClass" value="${driverClassName}"/> <property name="jdbcUrl" value="${jdbc_url}"/> <property name="user" value="${jdbc_username}"/> <property name="password" value="${jdbc_password}"/> <!-- c3p0连接池的私有属性 --> <property name="maxPoolSize" value="30"/> <property name="minPoolSize" value="10"/> <!-- 关闭连接后不自动commit --> <property name="autoCommitOnClose" value="false"/> <!-- 获取连接超时时间 --> <property name="checkoutTimeout" value="1000"/> <!-- 当获取连接失败重试次数 --> <property name="acquireRetryAttempts" value="2"/> </bean> <!-- 3:配置ORM框架的SessionFactory对象 --> <!-- 这里使用Mybatis框架 --> <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"/> <!-- 扫描entity包;多个包之间用;分隔 --> <property name="typeAliasesPackage" value="com.jtzen9.entity"/> <!--<property name="typeAliasesPackage" value="com.jtzen9.entity;com.jtzen9.dto.item"/>--> <!-- 扫面sql配置文件:mapper需要的xml文件 --> <property name="mapperLocations" value="classpath:mybatisDaoMapper/*.xml"/> </bean> <!-- 4:配置扫描DAO接口包,动态实现DAO接口,注入到spring容器中 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 注入sqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!-- 给出需要扫描DAO接口包 --> <property name="basePackage" value="com.jtzen9.dao"/> </bean> </beans>

    3.2.2、jdbc.properties

    driverClassName=com.mysql.jdbc.Driver jdbc_url=jdbc:mysql://localhost:3306/ssm jdbc_username=root jdbc_password=root

    3.2.3、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> <!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 --> <setting name="useGeneratedKeys" value="true"/> <!-- 使用列别名替换列名 --> <setting name="useColumnLabel" value="true"/> <!-- 开启驼峰命名转换 --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> </configuration>

    3.3、Service层及事务配置:spring-service.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:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 扫描service包下(包括其子包)所有使用注解的类型 --> <context:component-scan base-package="com.jtzen9.service" /> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入数据库连接池 --> <property name="dataSource" ref="dataSource"/> </bean> <!-- 配置基于注解的声明式事务 默认使用注解来管理事务行为 --> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>

    4、代码示例

    4.1、数据库数据:ssm.sql

    -- 数据库初始化脚本 -- 创建数据库 CREATE DATABASE ssm; -- 使用数据库 use ssm; -- 创建用户信息表 CREATE TABLE user( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户id', name VARCHAR(120) NOT NULL COMMENT '昵称', email VARCHAR(120) UNIQUE COMMENT '邮箱', phone BIGINT UNIQUE COMMENT '手机号码', PRIMARY KEY (id) )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户信息表'; -- 插入数据 INSERT INTO `user` VALUES ('1', '一天', '1@jtzen9.com', '1'); INSERT INTO `user` VALUES ('2', '两天', '12@jtzen9.com', '12'); INSERT INTO `user` VALUES ('3', '三天', '123@jtzen9.com', '123'); INSERT INTO `user` VALUES ('4', '四天', '1234@jtzen9.com', '1234'); INSERT INTO `user` VALUES ('5', '五天', '12345@jtzen9.com', '12345');

    4.2、Entity实体

    package com.jtzen9.entity; /** * Created by Zen9 on 2017/2/26. */ public class User { private Long id; private String name; private String email; private String phone; public User() { } public User(Long id, String name, String email, String phone) { this.id = id; this.name = name; this.email = email; this.phone = phone; } ... 省略getter和setter方法 ... @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", email='" + email + '\'' + ", phone='" + phone + '\'' + '}'; } }

    4.3、DAO层

    4.3.1、UserDao.java

    package com.jtzen9.dao; import com.jtzen9.entity.User; import java.util.List; /** * Created by Zen9 on 2017/2/26. */ public interface UserDao { // 根据id查询用户信息 User queryById(Long userId); // 查询所有的用户信息,不包含item信息 List<User> queryAll(); }

    4.3.2、UserDao.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"> <!-- 为UserDAO接口方法提供sql语句配置 --> <mapper namespace="com.jtzen9.dao.UserDao"> <resultMap id="userMap" type="User"> <id property="id" column="id"/> <result property="email" column="email"/> <result property="phone" column="phone"/> <result property="name" column="name"/> </resultMap> <select id="queryById" parameterType="long" resultMap="userMap"> SELECT * FROM user WHERE id = #{userId} </select> <select id="queryAll" resultMap="userMap"> SELECT * FROM user </select> </mapper>

    4.4、Service层

    package com.jtzen9.service; import com.jtzen9.entity.User; /** * Created by Zen9 on 2017/2/26. */ public interface UserService { User getUserMsg(Long userId); } package com.jtzen9.service.impl; import com.jtzen9.dao.UserDao; import com.jtzen9.entity.User; import com.jtzen9.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** * Created by Zen9 on 2017/2/26. */ @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT) public User getUserMsg(Long userId) { return userDao.queryById(userId); } }

    4.5、web层

    package com.jtzen9.web; import com.jtzen9.entity.User; import com.jtzen9.service.UserService; 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; /** * 用户控制器 * * Created by Zen9 on 2017/2/26. */ @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/getUserMsg") @ResponseBody public User getUserMsg(Long id){ User user = userService.getUserMsg(id); return user; } }

    4.6 运行展示

    说明

    有一篇挺不错的配置: SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    转载请注明原文地址: https://ju.6miu.com/read-450171.html

    最新回复(0)