SSM框架搭建教程(从零开始,图文结合)
1、准备
IntelliJ IDEA
Tomcat
JDK
Maven
mysql
spring、springmvc、mybatis 了解
现在假设如上条件你都具备,那么通过我这篇博客 你一定可以整合出 SSM 框架,完成如下效果
整个博客共分为三部分:
- 建立 基于 Maven 的 WEB 项目,启动 Tomcat ,项目启动
- 整合 Mybatis+Spring ,进行单元测试 可以完成从数据库查询出数据功能
- 整合 Mybaits+Spring+SpringMVC,输入Url 完成整个 MVC 的流程
2、步骤
因为说的比较细,所以前面第一部分都了解可以跳过。
2.1 第一部分
1.新建基于 Maven 的Web工程
2.填写 GroupId 和 ArtifactId,参考
groupId一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称。域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。举个apache公司的tomcat项目例子:这个项目的groupId是org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,artigactId是tomcat。
3.填写 Maven 配置。
图片中1、2、3分别:
1:首先你要先配置好 Maven,如果配置好了,去 CMD DOSS 界面下输入mvn --version
命令,如果有显示,则代表已经配置好了,如果没,下载maven,配置环境变量。
maven下载地址
2:选择我们的 maven 文件夹下的 setting,这里特别要注意,可能因为 “墙”的原因,下载 maven jar 包 很容易卡住,所以建议在 setting.xml
配置国内镜像,比如阿里云。
<!-- 复制如上一段镜像代码配置,添加阿里云镜像 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
在相应位置填上如上代码即可。
3.这里为了从头开始,我新建了个仓库地址。这里大家随意,也可以和我一样。
4.填写工程名,module名,前者是 workspace 后者代表一个项目
5.建立架构包
新建文件夹,利用Sources
Resources
两个标签分别转化 Java 和 Resources 文件夹
6.新建tomcat并且配置
7.启动项目
2.2 第二部分
**1.添加 maven 依赖。**因为 pom.xml 里面 jar 包太多,太占内容,所以从源码中复制吧。
2.因为SSM三者整合全部放在一个 .xml 中太杂。所以这里拆成三个 spring-mybaits.xml
,spring-service
,spring-web
配置 spring-mybatis.xml
,包含如下内容:
- 数据库配置文件
jdbc.properties
。包含数据库地址 密码 库名等等。
<!-- 1.配置数据库相关参数properties的属性:${url} -->
<context:property-placeholder location="classpath:jdbc.properties" />
- 连接池。这里使用 c3p0。
<!-- 2.数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 配置连接池属性 -->
<property name="driverClass" value="${jdbc.driver}" />
<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="10000" />
<!-- 当获取连接失败重试次数 -->
<property name="acquireRetryAttempts" value="2" />
</bean>
- 配置SqlSessionFactory对象。专用来获取 sqlSession。
<!-- 3.配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource" />
<!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- 扫描entity包 使用别名 -->
<property name="typeAliasesPackage" value="ssm.entity" />
<!-- 扫描sql配置文件:mapper需要的xml文件 -->
<property name="mapperLocations" value="classpath*:mapper/*.xml" />
</bean>
在 resources
下新建 mybatis-config.xml
,此文件也称作 mybatis 的核心配置文件。里面内容为空 暂时
<?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>
新建 entity 包,用来放实体类,也就是 pojo。同时在 sqlSession 工厂中扫描整个实体类包。这样在 mapper 中就可以用 类名做别名,不用写整个类的相对位置路径了。
<select id="queryUserListByUsername" parameterType="String" resultType="User">
SELECT
*
FROM
USER
WHERE
username = #{username}
</select>
比如其中的 User。不然就要写成
ssm.entity.User
对于 sql 配置文件,我这里放在 resources-->mapper--> 下。
对于 *mapper.xml 的位置处理有很多中方式。有的放在 mapper
包下。然后在 mapper
下建立两个包,分别放 dao
和 mapper
还有分别根据功能建包,一个功能建一个包,其中包含一组 功能文件,分别是 *Dao *Mapper.xml
具体怎样做根据实际项目情况来,如果项目系统功能复杂还是建议后面两种,不然到时候会很痛苦(项目多,文件就多,如果第一种方法,则跨度大,屏幕占满 :) )
<property name="mapperLocations" value="classpath*:mapper/*.xml" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
根据自己实际情况填写
- mapper 动态代理开发,扫描 dao 接口。
<!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
<!-- 给出需要扫描Dao接口包 -->
<property name="basePackage" value="ssm.dao" />
</bean>
<property name="basePackage" value="ssm.dao" />
根据自己实际情况填写
ok!到这里位置,我们的 spring-mybatis 就配置好了。已经可以通过 mybatis 操作数据库了,现在我们来测试下 这一步出问题没。 先往数据库插入一些数据。这里我提供一份我的 sql 文件,如果各位有需要, 直接运行就可以了。
DROP TABLE IF EXISTS `items`;
CREATE TABLE `items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL COMMENT '商品名称',
`price` float(10,1) NOT NULL COMMENT '商品定价',
`detail` text COMMENT '商品描述',
`pic` varchar(64) DEFAULT NULL COMMENT '商品图片',
`createtime` datetime NOT NULL COMMENT '生产日期',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of items
-- ----------------------------
INSERT INTO `items` VALUES ('1', '台式机', '3000.0', '该电脑质量非常好!!!!', null, '2016-02-03 13:22:53');
INSERT INTO `items` VALUES ('2', '笔记本', '6000.0', '笔记本性能好,质量好!!!!!', null, '2015-02-09 13:22:57');
INSERT INTO `items` VALUES ('3', '背包', '200.0', '名牌背包,容量大质量好!!!!', null, '2015-02-06 13:23:02'); -- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` date DEFAULT NULL COMMENT '生日',
`sex` char(1) DEFAULT NULL COMMENT '性别',
`address` varchar(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '王五', null, '2', null);
INSERT INTO `user` VALUES ('10', '张三', '2014-07-10', '1', '北京市');
INSERT INTO `user` VALUES ('16', '张小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('22', '陈小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('24', '张三丰', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('25', '陈小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('26', '王五', null, null, null);
这是整个项目的结构。 在 entity
下建立 User
实体类,注意字段对齐。 在 dao
下建立 UserDao
import org.apache.ibatis.annotations.Param;
import ssm.entity.User;
import java.util.List; /**
* Created by guozhaohui628@gmail.com on 2018/5/7
* Description:
*/
public interface UserDao { public List<User> queryUserListByUsername(String username); public List<User> queryUserListByUsername2Sex(@Param("username")String username, @Param("sex") int sex); }
在 mapper
下新建 UserMappper.xml
用来写 sql 语句。因为测试,所以这里写一个简单的 sql 查询。
<?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="ssm.mapper.UserDao">
<!-- 目的:为dao接口方法提供sql语句配置 -->
<select id="queryUserListByUsername" parameterType="String" resultType="User">
SELECT
*
FROM
USER
WHERE
username = #{username}
</select> <select id="queryUserListByUsername2Sex" resultType="User">
SELECT
*
FROM
USER
WHERE
username = #{username}
AND sex = #{sex}
</select>
</mapper>
其中有一个地方要注意 <mapper namespace="ssm.mapper.UserDao">
映射位置 换成自己的,可能我们两不一样。
这里有个小技巧特别要注意,一般开发中,我们都是先在把 sql 写完运行正确才放到这里面来,比如下图中,并且为了美观,复制 sql 语句前都会规范下 sql 语句,避免太乱。
ok! 写一个测试类 测试下。
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import ssm.dao.UserDao;
import ssm.entity.User; import java.util.List; /**
* Created by guozhaohui628@gmail.com on 2018/5/7
* Description:
*/
public class TestPratice {
@Test
public void A(){
ApplicationContext ac = new ClassPathXmlApplicationContext("spring-mybatis.xml");
UserDao userDao = ac.getBean(UserDao.class);
List<User> userList = userDao.queryUserListByUsername2Sex("王五",1);
// List<User> userList = userDao.queryUserListByUsername("王五");
System.out.println(userList.toString());
}
}
好的,到这一步,说明我们的 mybatis 和 spring 整合没问题。
2.3 第三部分
现在来写 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"
xmlns:tx="http://www.springframework.org/schema/tx"
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/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 扫描service包下所有使用注解的类型 -->
<context:component-scan base-package="ssm.service" /> <!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource" />
</bean> <!-- 配置基于注解的声明式事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
spring-web
,里面内容比较少,只是扫描了 controller
用来保证前端控制器 DispatcherServlet
能够找到并进入相关方法中。 同时还配置了试图解析器 ViewResolve
, 这样我们跳转视图时直接写 视图名称即可,不用写相对地址路径了。<!-- 3.配置jsp 显示ViewResolver -->
<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> <!-- 4.扫描web相关的 controller -->
<context:component-scan base-package="ssm.controller" />
最后就是配置 web.xml。主要作用是 配置 前端控制器 DispatcherServlet
重点是拦截规则处理。这里我们是所有都拦截。其次是 刚才我们 书写的 三个 spring-*.xml
文件在这里配置启动。
<!-- spring mvc servlet-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring-*.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 此处也可以配置成 *.do *.action形式 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
然后就是日志和编码,对于当前的测试没啥作用,但是还是配置好吧
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param> <!-- 编码过滤器 -->
<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>
好的 终于搞完了,现在可以安心的写代码了。现在准备一个这样的 jsp 文件。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ page isELIgnored="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询商品列表</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/items/queryitem.action" method="post">
查询条件:
<table width="100%" border=1>
<tr>
<td><input type="submit" value="查询"/></td>
</tr>
</table>
商品列表:
<table width="100%" border=1>
<tr>
<td>商品名称</td>
<td>商品价格</td>
<td>生产日期</td>
<td>商品描述</td>
<td>操作</td>
</tr>
<c:forEach items="${itemList }" var="item">
<tr>
<td>${item.name }</td>
<td>${item.price }</td>
<td>${item.createtime}</td>
<td>${item.detail }</td>
<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
</tr>
</c:forEach>
</table>
</form>
</body> </html>
我们需要查询所有的 item 数据显示在上面。
首先写 ItemsDao
import org.springframework.stereotype.Repository;
import ssm.entity.Items; import java.util.List; /**
* Created by guozhaohui628@gmail.com on 2018/5/8
* Description:
*/
@Repository
public interface ItemsDao {
public List<Items> queryAllItemsList();
}
对应的 ImtesMapper.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">
<mapper namespace="ssm.dao.ItemsDao">
<!-- 目的:为dao接口方法提供sql语句配置 -->
<select id="queryAllItemsList" resultType="Items">
SELECT
*
FROM
items;
</select>
</mapper>
书写 ItemsService
接口和 其实现类
import ssm.entity.Items; import java.util.List; /**
* Created by guozhaohui628@gmail.com on 2018/5/8
* Description:
*/
public interface ItemsService { List<Items> queryAllItemsList(); }
package ssm.service; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import ssm.dao.ItemsDao;
import ssm.entity.Items; import java.util.List; /**
* Created by guozhaohui628@gmail.com on 2018/5/8
* Description:
*/
@Service
public class ItemsServiceImpl implements ItemsService { // 注入Service依赖
@Autowired
private ItemsDao itemsdao; @Override
public List<Items> queryAllItemsList() {
return itemsdao.queryAllItemsList();
}
}
最后写 ItemsController
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import ssm.entity.Items;
import ssm.service.ItemsServiceImpl; import java.util.List; /**
* Created by guozhaohui628@gmail.com on 2018/5/8
* Description:
*/
@Controller
public class ItemsController { // 注入Service依赖
@Autowired
private ItemsServiceImpl itemsService; @RequestMapping(value = "items/queryitem.action")
public ModelAndView itemsList(){
ModelAndView mav = new ModelAndView();
List<Items> itemsList = itemsService.queryAllItemsList();
System.out.println(itemsList.toString());
mav.addObject("itemList", itemsList);
mav.setViewName("itemList");
return mav;
}
}
.jsp中的代码已经写好了,直接用就可以了。 我们要测试 要么直接点击这个地址,要么点击查询
OK, 完事儿,写的比较细,所以比较长。希望对你有帮助~
参考:
SSM框架搭建教程(从零开始,图文结合)的更多相关文章
- 简单的SSM框架搭建教程
简单的ssm框架的搭建和配置文件 ssm框架里边的配置: 1.src路径下直接存放数据库和log4j的properties文件 2.src路径下建个config包,分别放置ssm的xml文件 3.修改 ...
- SSM框架搭建web服务器实现登录功能(Spring+SpringMVC+Mybatis)
初学java EE,虽然知道使用框架会使开发更加便捷高效,但是对于初学者来说,感到使用框架比较迷惑,尤其是各种jar包的引用.各种框架的配置.注解的使用等等. 最好的学习方法就是实践,于是下载了一个现 ...
- SSM 框架搭建
SSM框架搭建(Spring.SpringMVC.Mybatis) 一:基本概念 Spring : Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框 ...
- 实习小结(二)--- SSM框架搭建
SSM项目框架搭建 前几天做了一个学生信息管理的项目,使用纯控制台输入,查询数据库,将信息在控制台中打印,功能完善得差不多之后,老师让将这个项目移植到Web中,使用Spring+SpringMVC+M ...
- SpringMVC笔记——SSM框架搭建简单实例
落叶枫桥 博客园 首页 新随笔 联系 订阅 管理 SpringMVC笔记——SSM框架搭建简单实例 简介 Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发 ...
- idea ssm框架搭建
1.分享一篇完整的ssm框架搭建连接 大牛博客:https://www.cnblogs.com/toutou/p/ssm_spring.html#_nav_0 2.我的搭建的完整项目连接,可以进入我的 ...
- ssm框架搭建整合测试
下载各种jar包 mybatis下载 https://github.com/mybatis/mybatis-3/releases mysql驱动下载 http://mvnrepository.com/ ...
- SSM框架搭建详细解析
总结了一下搭建SSM框架流程,在以后用到的时候方便回头使用. 使用工具:MyEclipse 2015:Tomcat 8版本:jdk1.8版本. 首先: 1:创建一个WebProject项目,jdk1. ...
- SSM简明教程:简单的十步教你搭建人生第一个SSM框架[ SSM框架整合教程(Spring+SpringMVC+MyBatis) ]
SSM_BookSystem SSM框架基础 SSM_BookSystem ---> Hello CRUD 说明:本项目目前包含基础的CRUD 日期:2017-05-01 22:25:37 作者 ...
随机推荐
- bootstrap中的行和列布局
<!doctype html><html > <head> <meta charset="utf-8"> <link rel= ...
- Loadrunner的参数化解析
参数化的用法 例如 1.登录一个网站,我们可以有很多的不同的用户名和密码 2.创建客户时我们可以通过参数化使得客户编号,客户名称使用多种组合 等等.. 那么下面就为大家介绍参数化的用法 参数化有2种 ...
- Mysql启动失败
错误提示: 服务名无效 错误原因: mysql服务没有安装. 解决方法: 管理员的权限运行cmd 用dos命令进入到mysql安装目录下再进入到bin目录下 运行mysqld -install命令
- 使用 IntraWeb (36) - TIWServerControllerBase
每个应用须有且只有一个 Server Controller. TIWServerControllerBase 所在单元及继承链: IWServerControllerBase.TIWServerCon ...
- HDOJ 1770 - 阅读理解...树形DP
题意: 一个能量E可以通过吸收某个光子的能量变成E1或者释放某个光子的能量变成E2...并且任意两个能量的转化路径至多一条...现在有一堆能量,有一堆光子...如果某个能量与某个光子做直接运算(加上其 ...
- 查询当前Oracle数据库的实例
select name from v$database; select instance_name from v$instance; // 查看实例状态 >select instance_nam ...
- windows环境下面批量移动文件到指定文件夹里面
move D:批量新建文件夹\upload\20171225173033565_2052.jpg D:批量新建文件夹\1623 move D:批量新建文件夹\upload\20171225174344 ...
- 根据 train_test.prototxt文件生成 deploy.prototxt文件
本文参考博文 (1)介绍 *_train_test.prototxt文件与 *_deploy.prototxt文件的不同:http://blog.csdn.net/sunshine_in_moon/a ...
- Jexus 网站服务器和 ASP.NET 跨平台开发
微软的跨平台战略 微软在过去的一年多中时间中发生了令整个 IT 行业感到惊叹的变化.这一切始于 Ballmer 的退位和 Nadella 的决心,更始于早已在微软各个基层部门蠢蠢欲动的二次创业. 以开 ...
- java 字符串中参数化符号${}的解析
我们在很多地方都能看到代表参数意义的符号${},可能我们在写一些框架的时候,有时候也需要用到这个符号,但他们是如何精确解析的?或者说需要我们自已写的时候,如何写?我们先来看以下的几个场景: 1.字符串 ...