900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 使用 IDEA Maven 整合 SSM 框架(Spring+SpringMVC+Mybatis)

使用 IDEA Maven 整合 SSM 框架(Spring+SpringMVC+Mybatis)

时间:2023-03-01 15:23:16

相关推荐

使用 IDEA Maven 整合 SSM 框架(Spring+SpringMVC+Mybatis)

博主声明:

转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主威威喵原创,请多支持与指教。

本文首发于此 博主:威威喵|博客主页:/smile_running

1、前言

由于博主之前写的这篇文章太水了,其实也是用处不大,所以我决定把这篇文章内容改了。改的内容是 ssm 框架的基本搭建与使用,由于博主毕业设计中需要做后台服务器的处理,我做的是 Android 端 app 的,但是需要数据交互,所以就当顺便学一下服务器的知识吧。

好吧,话不多说,我们自己开始整合 ssm 框架,建议你最好会先使用 Idea,因为我使用的是 Maven 的方式进行构建的,比较简单,容易上手。

2、正文

首先,我们需要创建一个新的Maven Project

以下就随便填写吧,做一个简单的 demo

下面这个属性最要添加一个archetypeCatalog = internal,如果不加这个参数,Maven 构建时会很慢,有时候直接卡住。

最后就创建出了一个空的 Maven 项目了,如下图:

到这里呢,你已经迈出了第一步。接下来,我们可以开始加入 Spring、SpringMVC、Mybatis、Json、Logger等依赖,这样才能够正常使用这些工具包。你只需要在pom.xml文件中添加如下的依赖即可(打开pom.xml 文件,将里面的 <dependencies> 标签替换成下面的内容,具体依赖的作用以下都有注释)

<dependencies><!-- 单元测试(选择版本大于 4.0 ,使用注解的方式) --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!-- Java Web 相关依赖 --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.8.0</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><!-- 日志工具:slf4j + logback --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.5</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.7</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.1.7</version></dependency><!-- 添加fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.41</version></dependency><!-- 数据库:mysql + c3p0 连接池 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.29</version></dependency><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency><!-- DAO 层:mybatis + mybatis-spring 整合 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.8</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.2</version></dependency><!-- Spring 核心依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.2.5.RELEASE</version></dependency><!-- Spring dao依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.2.5.RELEASE</version></dependency><!-- Spring web相关 --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.2.5.RELEASE</version></dependency><!-- Spring test --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>4.2.5.RELEASE</version></dependency><!-- 使用 redis 优化接口并发(优化‘地址暴露接口’) --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.7.3</version></dependency><!-- 使用 protostuff 来序列化存储对象 --><dependency><groupId>com.dyuproject.protostuff</groupId><artifactId>protostuff-core</artifactId><version>1.0.8</version></dependency><dependency><groupId>com.dyuproject.protostuff</groupId><artifactId>protostuff-runtime</artifactId><version>1.0.8</version></dependency></dependencies>

替换代码之后,会弹出这样的窗口,选择 import 即可。

这样我们的 ssm 框架所需的依赖库就已经引入成功了,下面开始编写配置文件进行框架的整合。在整合之前呢,我们先创建几个文件夹,用于存放配置文件。创建文件夹后,工程目录结构图如下:

我这里就写了一个简单的业务逻辑,一个使用 ssm 框架来写的用户登录功能。上图就是所有的类与配置文件,下面我来简单地介绍一下这些类的主要功能以及配置文件的作用。

dao 包,这里是与数据库访问的接口,对应的 spring-dao.xml就是操作数据库相关的配置信息,如 jdbc、c3p0 等等。service 包,与主要业务逻辑相关,spring-service.xml 的主要是扫描 service 包下的接口,方便注入到其它类中使用。web 包,就是 srpingMVC 相关的用于请求访问处理,spring-web.xml 主要是配置 controller 的相关属性。logback.xml 是日志的配置文件jdbc.properties 表示使用 jdbc 连接数据库驱动时要用的连接属性mybatis-config.xml 是与 mybatis 整合时所需的配置信息web.xml 需要配置请求的相关属性,比如 servlet 与 servlet-mapping 等。mapper 包下主要存放与业务相关的 sql 语句

大致就这些,接下来我们从jdbc.properties文件先开始,它的代码如下(是类似与 key - value 的方式存储):

jdbc.driverClasss=com.mysql.jdbc.Driverjdbc.Url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=truejdbc.username=rootjdbc.password=xww0826

spring-dao.xml文件中,就将它引用到连接数据库上,代码如下:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context" xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.1.xsd/schema/context /schema/context/spring-context.xsd /schema/tx /schema/tx/spring-tx.xsd"><!-- 加载 jdbc 属性文件 --><context:property-placeholder location="classpath:jdbc.properties"/><!-- 配置 c3p0 数据源 --><bean id="dataSource" class="com.mchange.boPooledDataSource"><!-- 配置 jdbc 连接基本属性--><property name="driverClass" value="${jdbc.driverClasss}"/><property name="jdbcUrl" value="${jdbc.Url}"/><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><!-- 配置 c3p0 连接池属性--><property name="initialPoolSize" value="5"/><property name="checkoutTimeout" value="20000"/><property name="maxPoolSize" value="40"/><property name="minPoolSize" value="10"/><!-- 关闭连接后是否自动提交--><property name="autoCommitOnClose" value="false"/><!-- 获取连接失败重试次数--><property name="acquireRetryAttempts" value="2"/></bean><!-- 配置 sqlSessionFactory 对象--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 注入数据库连接池--><property name="dataSource" ref="dataSource"/><!-- 自动扫描 mapper包下的所有 xml 文件 --><property name="mapperLocations" value="classpath:mapper/*.xml"/><!-- 配置 mybatis-config 文件 --><property name="configLocation" value="classpath:mybatis-config.xml"/><!-- 扫描包下的 entity 类 --><property name="typeAliasesPackage" value="com.xww.demo.entity"/></bean><!-- 配置扫描 dao 包,动态的实现 dao 接口,注入 spring 容器--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 注入 sqlSessionFactory --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!-- 扫描 dao 包下的接口,并实现它 --><property name="basePackage" value="com.xww.demo.dao"/></bean><!-- 配置事物管理 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 注入数据库连接池 --><property name="dataSource" ref="dataSource"/></bean><!-- 默认使用注解来管理事物 --><tx:annotation-driven transaction-manager="transactionManager"/></beans>

接下来是spring-service.xml文件,就配置一下扫描包的路径

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.1.xsd/schema/context/schema/context/spring-context.xsd"><!-- 自动扫描 service 包 --><context:component-scan base-package="com.xww.demo.service"/></beans>

然后是spring-web.xml文件,与 SpringMVC 相关的配置属性

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.1.xsd/schema/context/schema/context/spring-context.xsd /schema/mvc/schema/mvc/spring-mvc.xsd"><!-- 扫描 web 包(如:Controller) --><context:component-scan base-package="com.xww.demo.web"/><!-- springMVC 配置文件,开启注解,并提供一系列功能进行数据绑定(如:xml、Json,时间戳等数据支持) --><mvc:annotation-driven/><!-- 配置默认处理,允许使用 / 做整体映射,如静态资源的处理(jpg,png,js等) --><mvc:default-servlet-handler/><!--避免IE执行AJAX时,返回JSON出现下载文件 --><bean id="mappingJacksonHttpMessageConverter"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean><!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean></beans>

然后是mybatis-config.xml文件:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><settings><!-- 设置获取自增主键值 id--><setting name="useGeneratedKeys" value="true"/><!-- 自动将列名转为 entity 属性名 --><setting name="useColumnLabel" value="true"/><!-- 使用驼峰命名法来转换 --><setting name="mapUnderscoreToCamelCase" value="true"/></settings></configuration>

最后是logback.xml文件,配置日志相关设置:

<?xml version="1.0" encoding="UTF-8" ?><configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- encoders are assigned the typech.qos.logback.classic.encoder.PatternLayoutEncoder by default --><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="debug"><appender-ref ref="STDOUT"/></root></configuration>

以上就是 ssm 框架的所有配置文件代码,接下来我们来看 java 代码。首先是dao 包下的 LoginDao 接口,代码如下:

package com.xww.demo.dao;import com.xww.demo.entity.User;import org.apache.ibatis.annotations.Param;public interface LoginDao {// 用户登录User queryUser(@Param("username") String username, @Param("password") String password);}

接下来是mapper 包下的LoginDao.xml文件代码:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.xww.demo.dao.LoginDao"><select id="queryUser" parameterType="com.xww.demo.entity.User" resultType="com.xww.demo.entity.User">select user_name, pass_word from user where user_name = #{username} and pass_word = #{password}</select></mapper>

那么entity 类就不用多说了,提供 getter 和 setter 方法,不过一定要加一个空的构造函数,否则会出错,代码如下:

package com.xww.demo.entity;public class User {private String username;private String password;public User() {}public User(String username, String password) {this.username = username;this.password = password;}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;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}}

接着是service 包,这里就是业务逻辑处理相关的代码,包括业务逻辑的接口与实现类。

package com.xww.demo.service;import com.xww.demo.entity.User;public interface LoginService {User doLogin(String username, String password);}

package com.xww.demo.service.impl;import com.xww.demo.dao.LoginDao;import com.xww.demo.entity.User;import com.xww.demo.service.LoginService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class LoginImpl implements LoginService {@AutowiredLoginDao loginDao;@Overridepublic User doLogin(String username, String password) {return loginDao.queryUser(username, password);}}

然后是web 包的代码,这里是请求相关的逻辑代码,配置请求 url 、请求方式、请求参数等。代码如下:

package com.xww.demo.web;import com.alibaba.fastjson.JSONObject;import com.xww.demo.entity.User;import com.xww.demo.service.LoginService;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.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;@Controller@RequestMapping("/test")public class LoginController {@AutowiredLoginService loginService;@ResponseBody@RequestMapping(value = "/login", method = RequestMethod.POST)public String doLoginAction(@RequestParam("username") String username, @RequestParam("password") String password) {User user = null;try {user = loginService.doLogin(username, password);} catch (RuntimeException e) {//如果用户为null,在此处理异常}return JSONObject.toJSONString(user);}}

到这里还没结束,最关键的是需要把 servlet 添加到 web.xml 文件中去,否则你无论怎么请求,都是无法接收到响应的,代码如下:

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><!-- 编码过滤器 --><filter><filter-name>encodingFilter</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></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 配置 SpringMVC DispatcherServlet --><servlet><servlet-name>demo-LoginServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/spring-*.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>demo-LoginServlet</servlet-name><!-- 配置请求 url 模式 --><url-pattern>/</url-pattern></servlet-mapping><!-- session配置 --><session-config><session-timeout>15</session-timeout></session-config></web-app>

最后是我们的前端 jsp 代码,就是简单的使用bootstrap框架写的一个登录界面,index.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %><!DOCTYPE html><html><head><title>用户登录</title><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- 引入 Bootstrap --><link href="/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"><!-- HTML5 Shiv 和 Respond.js 用于让 IE8 支持 HTML5元素和媒体查询 --><!-- 注意: 如果通过 file:// 引入 Respond.js 文件,则该文件无法起效果 --><!--[if lt IE 9]><script src="/libs/html5shiv/3.7.0/html5shiv.js"></script><script src="/libs/respond.js/1.3.0/respond.min.js"></script><![endif]--></head><body><!-- 登录表单 --><form style="margin-left:500px;margin-top:200px;" action="test/login" method="post" target="_blank"><div class="form-group"><label for="user" stype="display:inline;">账户:</label><input type="text" class="form-control" id="user" name="username" style="display:inline;width:200px;"autocomplete="off"/></div><div class="form-group"><label for="password" style="display:inline;">密码:</label><input type="password" class="form-control" id="password" name="password" style="display:inline;width:200px;"autocomplete="off"/></div><button type="submit" class="btn btn-primary" style="margin-top: 10px">登录</button></form></body><!-- jQuery文件。务必在bootstrap.min.js 之前引入 --><script src="/jquery/2.1.1/jquery.min.js"></script><!-- 最新的 Bootstrap 核心 JavaScript 文件 --><script src="/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script></html>

接下来就是如何运行的问题了。使用 IDEA 添加 Local Tomcat,如下图:

添加项目,就是我们刚刚创建的这个项目名,如下图:

然后应用一下,直接运行 Tomcat 即可。那么你就会看到如下的 jsp 页面:

登录成功时,就会显示当前的登录名和密码,以 json 数据返回,登录失败则返回为 null,如下图:

数据库驱动使用的是 mysql,用到的 sql 命名如下:

# 创建数据库CREATE DATABASE test;# 创建用户表CREATE TABLE `user` (`id` INT NOT NULL auto_increment,`user_name` VARCHAR (16) NOT NULL,`pass_word` VARCHAR (16) NOT NULL,PRIMARY KEY (id, user_name)) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;# 插入数据INSERT INTO USER (user_name, pass_word)VALUES('xww', '0826'),('user1', '123456');

好了,本文所有代码就这些,一个简单的 ssm 框架就整合完成了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。