这里的ssm不是指的spring+springmvc+mybatis,而是指的spring+springmvc+mongodb,下面我将搭建一个简单的“ssm”框架。

1、新建一个maven项目,骨架使用webapp骨架。

2、在pom.xml中加入依赖。

 <dependencies>
<!-- 1. spring依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.7.RELEASE</version>
</dependency> <!-- 2. mongoDB依赖 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.7.0.RELEASE</version>
</dependency> <!-- 3. 日志依赖 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency> <!-- 4. 其他依赖 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.1</version>
</dependency>
</dependencies>

maven依赖

3、在web.xml中配置springmvc以及编码过滤器。

 <!-- 编码过滤器 -->
<filter>
<filter-name>CharacterEncoding</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>CharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- springmvc配置 -->
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

web.xml

4、配置文件部分,首先加入日志配置文件:log4j.properties

 log4j.rootLogger = DEBUG,file,stdout,error

 log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = D:/Logs/skyer/ssm-mongo.log
log4j.appender.file.MaxFileSize = 10MB
log4j.appender.file.MaxBackupIndex = 20
log4j.appender.file.Append = true
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] [%t] (%F\:%L)->%m %n log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.properties

5、加入mongodb配置文件:mongodb.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.skyer" />
<!-- 获取配置资源 -->
<context:property-placeholder location="classpath:mongodb.properties" /> <mongo:mongo id="mongo" host="${mongo.host}" port="${mongo.port}">
<mongo:options connections-per-host="${mongo.connectionsPerHost}"
threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
connect-timeout="${mongo.connectTimeout}"
max-wait-time="${mongo.maxWaitTime}"
auto-connect-retry="${mongo.autoConnectRetry}"
socket-keep-alive="${mongo.socketKeepAlive}"
socket-timeout="${mongo.socketTimeout}"
slave-ok="${mongo.slaveOk}"
write-number="1"
write-timeout="0"
write-fsync="true" />
</mongo:mongo> <!-- 设置使用的数据库名 -->
<mongo:db-factory dbname="${mongo.dbname}" mongo-ref="mongo" /> <!-- mongodb的模板 -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean> </beans>

mongodb.xml

6、加入mongodb的配置文件:mongodb.properties

 #数据库名称
mongo.dbname = db_name
#数据库地址
mongo.host=192.168.112.128
#数据库端口
mongo.port=27017
#一个线程变为可用的最大阻塞数
mongo.connectionsPerHost=8
#线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值
mongo.threadsAllowedToBlockForConnectionMultiplier=4
#连接超时时间(毫秒)
mongo.connectTimeout=1000
#最大等待时间
mongo.maxWaitTime=1500
#自动重连
mongo.autoConnectRetry=true
#scoket保持活动
mongo.socketKeepAlive=true
mongo.socketTimeout=1500
#读写分离
mongo.slaveOk=true
mongo.writeNumber=1
mongo.riteTimeout=0
mongo.writeFsync=true

mongodb.properties

7、加入spring的配置文件:spring-mvc.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:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
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/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 引入mongoDB文件 -->
<import resource="classpath:mongodb.xml"/> <!-- 配置视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<!-- 前缀:在视图名前加上前缀 -->
<property name="prefix" value="/" />
<!-- 后缀:在视图名后加上后缀 -->
<property name="suffix" value=".jsp" />
</bean> <!-- 扫描注解驱动 -->
<mvc:annotation-driven />
<!-- 配置扫描器 -->
<context:component-scan base-package="com.skyer" /> </beans>

spring-mvc.xml

8、建立项目的包和一些类,项目目录结构如下。

9、下面对项目中每一个类具体说明,先说User实体类:User.java

 // collection指定的相当于MySQL中的表名,也可以不指定,默认为实体类类名
@Document(collection = "db_skyer_user")
public class User { @Id
private int id;
private String name;
private String pwd;
private Date birthday; // getter和setter方法省略,请自行补上。 }

User.java

10、统一返回值实体类:ResultInfo.java

 public class ResultInfo<T> {

     private int code; // 返回代码(200:成功,500:失败)
private T data; // 返回的数据,正确的信息或错误描述信息 // getter和setter方法省略,请自行补上。 }

ResultInfo.java

11、Controller基类:BaseController.java

 public abstract class BaseController {

     /**
* 请求成功
*
* @param data 请求成功返回的内容
* @return
*/
public Object success(Object data) {
ResultInfo<Object> resultInfo = new ResultInfo<Object>();
resultInfo.setCode(200);
resultInfo.setData(data);
return resultInfo;
} /**
* 请求失败
*
* @param msg 失败信息
* @return
*/
public Object fail(String msg) {
ResultInfo<Object> resultInfo = new ResultInfo<Object>();
resultInfo.setCode(500);
resultInfo.setData(msg);
return resultInfo;
} }

BaseController.java

12、测试控制器:DemoController.java(注:这里的添加的时候,使用了for循环添加了100W条数据,为后续的索引测试使用)

 @Controller
@RequestMapping("/demo")
public class DemoController extends BaseController { private static final Logger L = Logger.getLogger(DemoController.class); @Autowired
private UserDao userDao; /**
* 通过主键查询
*
* @param id
* @return
*/
@RequestMapping("/findById/{id}")
@ResponseBody
public Object findById(@PathVariable("id") int id) {
try {
return super.success(userDao.findById(id));
} catch (Exception e) {
L.error("-------------------" + e);
e.printStackTrace();
}
return super.fail("查询错误!");
} /**
* 添加
*/
@RequestMapping("/add")
@ResponseBody
public Object add() {
try {
userDao.add();
return super.success("添加成功!");
} catch (Exception e) {
L.error("-------------------" + e);
e.printStackTrace();
}
return super.fail("添加失败!");
} }

DemoController.java

13、UserDao层:UserDao.java

 @Repository
public class UserDao { @Resource
private MongoTemplate mongoTemplate; public Object findById(int id) {
long begin = System.currentTimeMillis();
List<User> list = mongoTemplate.find(new Query(Criteria.where("name").is("name5217")), User.class);
long end = System.currentTimeMillis();
System.out.println("查询用时:" + (end - begin) + "毫秒。");
return list;
} public boolean add() {
User user = null;
long begin = System.currentTimeMillis();
System.out.println("开始插入。。。");
for (int i = 0; i < 1000000; i++) {
user = new User();
user.setId(i);
user.setName("name" + i);
user.setPwd("pwd" + i);
user.setBirthday(new Date());
mongoTemplate.insert(user);
if (i % 1000 == 0) {
System.out.println("第" + ((i / 1000) + 1) + "批插入成功,本批次共1000条数据。。。");
}
}
long end = System.currentTimeMillis();
System.out.println("插入完毕,共100W条数据,累计用时:" + (end - begin) / 1000 + "秒。");
return true;
} }

UserDao.java

14、代码这就完毕了,剩下的就是测试,启动web项目,访问对应的接口即可。下面贴几张我测试时候的截图。

a. 添加100W条记录:

b. 不加索引查询:

c. 加索引之后查询:

不一样的ssm的更多相关文章

  1. 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程

    本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...

  2. springmvc 多数据源 SSM java redis shiro ehcache 头像裁剪

    获取下载地址   QQ 313596790  A 调用摄像头拍照,自定义裁剪编辑头像 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:31359679 ...

  3. SSM项目搭建(提供源码)

    1创建web动态项目,项目结构截图 2.配置日志文件 #\u5B9A\u4E49LOG\u8F93\u51FA\u7EA7\u522B log4j.rootLogger=INFO,Console,Fi ...

  4. activiti工作流的web流程设计器整合视频教程 SSM和独立部署

    本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...

  5. activiti工作流的web流程设计器整合视频教程 SSM 和 独立部署

    本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...

  6. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)【转】

    使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...

  7. Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境【转】

    项目建设完成之后的结构: 数据库的表结构如下: 环境建设:搭建Maven环境.Tomcat环境.需要MySql 数据库支持,使用的编程工具Eclipse (这些是前期准备): 开始创建工程: 1.创建 ...

  8. java web后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化

    一.ssm框架搭建 1.1创建项目 新建项目后规划好各层的包. 1.2导入包 搭建SSM框架所需包百度云链接:http://pan.baidu.com/s/1cvKjL0 1.3整合spring与my ...

  9. SSM整合(三):Spring4与Mybatis3与SpringMVC整合

    源码下载 SSMDemo 上一节整合了Mybatis3与Spring4,接下来整合SpringMVC! 说明:整合SpringMVC必须是在web项目中,所以前期,新建的就是web项目! 本节全部采用 ...

  10. SSM整合(二):Spring4与Mybatis3整合

    上一节测试好了Mybatis3,接下来整合Spring4! 一.添加spring上下文配置 在src/main/resources/目录下的spring新建spring上下文配置文件applicati ...

随机推荐

  1. Python 打印矩形、直角三角形、等腰三角形、菱形

    # 1)打印一个星号 print('*') #2)打印一行6个星号 * * * * * * for i in range(6): print('*',end=' ') #3)打印6列星号 * * * ...

  2. javascript之原型链

    JavaScript 中,万物皆对象!(对于编程而言,可以说万物皆对象.) js中的原型链的作用时什么呢? 我自己的理解是,给一个人赋予一些技能, function people(name,age,s ...

  3. Vscode调试C的多文件工程配置

    关于Vscode的C语言的单文件调试,可以参见VScode调试C语言的设置(win10,Linux),里面已经说明基本的配置和使用. 下面说明一下如何调试多个文件的工程,首先写一个简单的工程,其中工程 ...

  4. fortran常用语句--读写带注释文档、动态数组等语法

    1.判断读取文档有多少行数据(文档最后的空行不计入其中): 首先在变量定义区域下方和执行语句前声明在程序中要被调用的GetFileN函数: external GetFileN 接下来在函数外部后边写上 ...

  5. es6面向对象

    <script> class user{ constructor(name,age){ this.name=name; this.age=age; } showName(){ alert( ...

  6. huffman树实现的压缩算法,java

    1.树的构建 package huffman; public abstract class BinaryTreeBasis { protected TreeNode root; public Bina ...

  7. vue-element 动态单选多选全选

    实现效果如图 数据格式如下: pps: [{"code":"6","createTime":"2018-09-07 00:00:0 ...

  8. OPC转发阿里云alink工具

    这个最近还在做 2019-04-24 今天抽空吧基本mqtt上传,OPC遍历,导出物模型功能先做了 上报操作日志,上报错误信息,导入参数,导出参数还没做 有需要可以联系微信NBDX123

  9. Android基础知识学习

    IPC  (Inter-Process Communication) 意思是: 进程间的通信,是指两个进程之间进行数据交换的过程. Android中如何开启多进程呢? 只需要给四大组件(Activit ...

  10. Jeecg框架简介

    官方地址:http://www.jeecg.org/