现在很多公司用的开源框架很多都是ssm框架的一个结构,这里我自己试着自己搭一个简单的框架,大家共同学习。下面一起跟着我搭建吧,本人菜鸟,有任何不对的地方有望指出。

框架结构:spring(4.3.9.RELEASE)+springmvc(4.3.9.RELEASE)+mybatis(3.4.4)+marven(4.0.0)需要注意的是,自己搭的时候注意mybatis的版本和spring的版本要兼容,具体可以去http://www.mybatis.org/spring/上查看

spring框架:核心是ioc和aop,主要负责bean容器的注入,和mybatis整合之后还负责数据库(连接数据库,sqlsession,事物)相关配置,并且还可以集成其他模块。

springmvc框架:主要处理请求,model,view,controller,一看就主要是controller和view之间的交互,所以主要配置controller和view的配置

mybatis框架:持久层框架,和spring整合之后负责有关sql的配置

软件:eclipse(4.4.1)+jdk1.7+tomcat7

一、创建一个maven项目 目录:

这里面的文件后面都会用到,都会一一说明,因为之前有搭过,后来忘了,现在搭的时候一些也忘了,也是百度了不少,所以有的地方我会啰嗦一点

一、先引入jar包,可以去http://search.maven.org/网站查询自己所需要的jar包 

<!-- spring相关jar包  -->
<!-- spring-context : 为Spring核心提供了大量扩展,
这里marven会自动添加其依赖jar包
spring-aop.jar(使用aop特性时使用的类)
  spring-beans.jar(包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类)
spring-core。jar:spring核心工具包
spring-orm。jar:spring对dao层特性的扩展
spring-expression:Spring表达式语言??这边不能理解?
-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- mvc框架相关类 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- aspect -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.11</version>
<scope>runtime</scope>
</dependency>
<!-- 用于整合orm框架(hibernate,ibatis,)-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.9.RELEASE</version>
</dependency> <!-- mybatis框架-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<!-- spring和mybatis整合,通过spring设置bean来管理mybatis的配置 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- oracle连接驱动 -->
<!-- maven没有提供oracle的连接驱动包 -->
<!-- 导入dbcp的jar包,用来在spring-mybatis.xml中配置数据库 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!--对Spring 对JDBC 数据访问进行封装的所有类-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.6.RELEASE</version>

<!-- 对json的支持 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0.pr4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0.pr4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0.pr4</version>
</dependency>

</dependency>

这里我用的数据库连接是oracle,好像marven上没法下载oracle的驱动jar包就自己下了 ,用mysql的自己添加一下mysql的驱动包

二、配置ApplicationContext.xml  spring的配置文件

oracal.properties   连接oracle相关数据配置

oracle.driverClassName=oracle.jdbc.driver.OracleDriver
oracle.url=jdbc:oracle:thin:@localhost:1521:xe
oracle.username=system
oracle.password=123456
oracle.initialSize=3
oracle.maxActive=300
oracle.maxIdle=2
oracle.minIdle=1

ApplicationContext.xml    spring的配置文件

<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 扫描除了controller之外的bean 和springmvc的功能区分开 -->
<context:component-scan base-package="com.lyj">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan> <!-- 加载连接oracle的配置文件 -->
<bean class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:oracle.properties</value>
</list>
</property>
</bean>
<!-- 数据库 连接 采用dbcp方式,我这边用的是oracle数据库-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${oracle.driverClassName}"/>
<property name="url" value="${oracle.url}"/>
<property name="username" value="${oracle.username}"/>
<property name="password" value="${oracle.password}"/>
<!-- 配置连接池相关属性 -->
<property name="initialSize" value="${oracle.initialSize}"/><!-- 启动时的连接数 -->
<property name="maxActive" value="${oracle.maxActive}"/><!-- 最大连接数 -->
<property name="maxIdle" value="${oracle.maxIdle}"/><!-- 最大空闲数,经过高峰之后 ,将连接渐渐释放直到释放到最大空闲值-->
<property name="minIdle" value="${oracle.minIdle}"/><!-- 最小空闲值,当空闲的连接数少于此值,连接池会申请连接 -->
</bean> <!-- 数据库连接已经建好,那么就要访问数据库,进行数据库操作 ,spring提供了sessionFactory 来建立与数据库的会话-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:sql-map-config.xml"/>
<property name="mapperLocations">
<list>
<value>classpath:mybatis/*/*-mapper.xml</value>
</list>
</property>
</bean> <!-- 通过注入sqlsessionFactory的方式来获取一个SqlsessionTemplate -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!-- 通过构造函数注入 -->
<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean> <!-- 扫描 basePackage下所有的接口,根据对应的mapper.xml为其生成代理类,实现dao曾的注入 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.lyj.*.mapper" /> </bean> <!-- 相关事务配置 -->
<!-- 可以理解为切面 -->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- transaction-manager:事务管理器,管理之前配置的数据库 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- name:配置用到事务的方法名(相当于切点) propagation:如何使用事务 read-only:是否只读 rollback-for:回滚(注意:代码中不能try..catch..如果catch了就不会抛出异常,spring接受不到异常,事务就不会回滚) -->
<tx:method name="*add*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="*delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="*update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice> <aop:config>
<!-- 切点集 这里配置在service层 ,在service层上面配置事物-->
<aop:pointcut expression="execution(* com.lyj.*.service..*(..))" id="pc"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
</aop:config> </beans>

 三、dispatcher-servlet.xml    springmvc配置文件

<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
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/mvc http://www.springframework.org/schema/mvc/spring-mvc-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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"
>
<!-- springmvc主要处理view和controller之间的交互,所以这边将view和controller单独放在springmvc的配置--> <!-- 定义 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler
它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理
-->
<!-- <mvc:default-servlet-handler /> --> <!-- 会自动注入DefaultAnnotationHandlerMapping处理@requestMapping,将请求路径放在请求映射表上 和AnnotationMethordHandlerAdpter:根据前台请求地址决定调用哪个方法 两个bean是用于springmvc分发请求用到的
并默认配置HttpMessageConverter:@responsebody返回某种格式,默认应该是json吧,是吗?哈哈,我这边出来就是json的
-->
<mvc:annotation-driven />
<!-- 扫描controller注解的类 -->
<context:component-scan base-package="com.lyj">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan> <!-- springMVC访问静态资源将/WEB-INF/resources路径通过ResourceHttpRequestHandler 映射成/resources/** 可以直接访问 -->
<mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" /> <!-- 相关视图配置 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean> </beans>

三、mybatis的配置文件  sql-map-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- mybatis的事情都让spring去做了,自己做啥呢,mybatis还有配置一些类的简写啊,全局配置啊,哈哈,万恶的spring -->
<!-- 可以用来配置类的别名 -->
<!-- <typeAliases></typeAliases> --> <!-- mybatis的一个插口,可以理解为拦截器拦截器,可以用来做基于mybatis的分页 -->
<!-- <plugins>
<plugin interceptor=""></plugin>
</plugins> -->
</configuration>

四、web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SSM</display-name> <!-- 加载spring配置 -->
<!--上下文,相当于全局的变量 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param> <context-param>
<param-name>xhlbqlhlog4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param> <!-- 监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!--过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern><!-- 匹配所有的路径包括有后缀的如。jsp,.html,.js等等 -->
</filter-mapping> <!-- 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:dispatcher-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<url-pattern>/</url-pattern>
<!-- 注意:这里是/ 不适用/*的原因:如访问student/queryStudednt路径时返回一个页面student/queryStudent.jsp
这是这个路径又被拦截,dispatcher-servlet去寻找@requestMapping("student/queryStudent.jsp")的controller,此时没有这个controller,就报404
换成/就直接返回页面了
-->
</servlet-mapping> <!-- 默认首页 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <!-- tomcat启动时首先加载WEB-INF下的web.xml,里面标签加载顺序 context-param》listener》filter》servlet ,spring的bean默认在起服务的时候就已经注入了--> </web-app>

五、测试

Student.java

package com.lyj.student.model;

import org.springframework.stereotype.Component;

@Component
public class Student {
private String id; private String name; private String age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} @Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
} }

StudentMapper.java(dao层)

package com.lyj.student.mapper;

import java.util.List;

import org.springframework.stereotype.Repository;

import com.lyj.student.model.Student;

@Repository
public interface StudentMapper { public List<Student> queryStudent();
}

studentMapper.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="com.lyj.student.mapper.StudentMapper">
<select id="queryStudent" resultType="com.lyj.student.model.Student">
select * from student
</select>
</mapper>

studentService.java

package com.lyj.student.service;

import java.util.List;

import com.lyj.student.model.Student;

public interface StudentService {

    public List<Student> queryStudent();
}

studentServiceImpl.java

package com.lyj.student.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.lyj.student.mapper.StudentMapper;
import com.lyj.student.model.Student;
import com.lyj.student.service.StudentService; @Service
public class StudentServiceImpl implements StudentService { @Autowired
StudentMapper mapper;
@Override
public List<Student> queryStudent() { return mapper.queryStudent(); } }

StudentController.java

package com.lyj.student.controller;

import java.util.List;
import java.util.Map; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.lyj.student.model.Student;
import com.lyj.student.service.StudentService; @Controller
public class StudentController { @Autowired
private StudentService studentService; @RequestMapping("student/queryStudent")
public ModelAndView queryStudent(){ ModelMap map=new ModelMap();
List<Student> list=studentService.queryStudent();
System.out.println(list.toString());
map.put("studentList", list);
return new ModelAndView("student/queryStudent"); } @RequestMapping("student/queryStudentJson")
@ResponseBody
public Map insertStudent(){
ModelMap map=new ModelMap();
List<Student> list=studentService.queryStudent();
System.out.println(list.toString());
map.put("studentList", list);
return map; }
}

访问:http://localhost:8081/SSM/student/queryStudent

控制台输出:[Student [id=1, name=小明, age=10], Student [id=2, name=小红, age=11], Student [id=3, name=小蓝, age=12]],页面也访问到了

六、注意:

1.jar包版本可能互相不支持,需注意,或者是不是少jar包了

2.eclipse配置方面,project facets的配置,jdk版本,web版本是不是对应的

3.配置文件中扫描bean的路劲,还有一些其他路径是否配置正确

等等。。。

好了就到这里。。。对于框架部分还是很浅的认知,目前只知道如何使用,哎。。。太菜。。。

动手搭建ssm框架的更多相关文章

  1. Maven项目搭建(二):Maven搭建SSM框架

    上一章给大家讲解了如何使用Maven搭建web项目. 这次给大家介绍一下怎么使用Maven搭建SSM框架项目. 首先我们来看一下pom.xml的属性介绍: project: pom的xml根元素. p ...

  2. 快速搭建ssm框架

    快速搭建SSM框架 因为最近有很多朋友问我自己的项目搭建的不够完善,并且经常出现一些小问题,那么今天我又整理了一下文档教大家如何快速搭建SSM框架我是用 eclipse搭建的,如果想用idear的话我 ...

  3. Eclipse中使用Maven搭建SSM框架

    Eclipse中不使用Maven搭建SSM框架:https://www.cnblogs.com/xuyiqing/p/9569459.html IDEA中使用Maven搭建SSM框架:https:// ...

  4. 第n次搭建 SSM 框架

    什么说第 N 次搭建SSM框架呢? 刚学习java的时候,搭建 SSM 框架想做一个个人项目之类的,后来没搭起来,也就拖延了,进入公司之后,接触的第一个项目就是SSM的,模仿了一下,也能搭个简简单单的 ...

  5. 详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(下)

    在上一篇(详解intellij idea 搭建SSM框架(spring+maven+mybatis+mysql+junit)(上))博文中已经介绍了关于SSM框架的各种基础配置,(对于SSM配置不熟悉 ...

  6. 详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(上)

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻 ...

  7. 使用Springboot快速搭建SSM框架

    Spring Boot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 一.环境准备 Idea 2017 或 201 ...

  8. IDEA搭建ssm框架测试衍生出的问题The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Develop\jdk7\jdk1.7.0_79\bin;

    最近玩起IDEA这开发工具,搭建ssm框架测试时,部署项目出现如下问题: 信息: The APR based Apache Tomcat Native library which allows opt ...

  9. 2018用IDEA搭建SSM框架(Spring+SpringMVC+Mybatis)

    使用IDEA搭建ssm框架 环境 工具:IDEA 2018.1 jdk版本:jdk1.8.0_171 Maven版本:apache-maven-3.5.3 Tomcat版本:apache-tomcat ...

  10. 使用maven搭建ssm框架的javaweb项目

    目前主流的javaweb项目,常会用到ssm(Spring+Spring MVC+Mybatis)框架来搭建项目的主体框架,本篇介绍搭建SSM框架的maven项目的实施流程.记之共享! 一.SSM框架 ...

随机推荐

  1. java中取整数绝对值_Java之——位运算求整数绝对值通过下面的位运算可以得到一个整数的绝对值

    public int abs( int a ) {return (a + (a >> 31)) ^ (a >> 31) ;//前半部分-1或+0,后半部分取反 } a为正数的情 ...

  2. js var

    var x= new Number(); alert(x)//0 x=new Object(); alert(JSON.stringify(x)) //{} x=new Boolean(); aler ...

  3. APP学习4

    1.Toast Toast是Android系统提供的轻量级信息提醒制度,用于向用户提示即时信息,它显示在引用程序界面的最上层,显示一段时间后自动消失,不会打断当前操作,也不获得焦点. Toast.ma ...

  4. paddle 错误(ValueError: all input arrays must have the same shape)

    参考:voc数据集执行eval.py命令报错 · Issue #3456 · PaddlePaddle/PaddleDetection (github.com) 配置文件加这两行: EvalReade ...

  5. potoshop制作一寸照片

    potoshop制作一寸照片 经常因为各种原因需要提供1寸照片,第一反应应还是跑照相馆专业.但是疫情封闭在家怎么高,刚好把偶尔使用一次的potoshop用起来,解决照片制作问题,一来能省几毛钱买茶叶蛋 ...

  6. 深入理解 epoll 原理

    从网卡如何接收数据说起 CPU 如何知道接受了数据? 进程阻塞为什么不占用 CPU 资源? 工作队列 等待队列 唤醒进程 内核接收网络数据全过程 同时监视多个 socket 的方法 select 的监 ...

  7. SqlSugar 代码生成 数据库及表

    在实际开发中如何在sqlsugar中通过model生成数据表呢? 废话不说上代码 一.引入sqlsugarcore 二.编写Model代码 先写一个model举例 namespace 用户管理.Mod ...

  8. 摹客RP,编辑界面缩放比例支持手动输入!

    Hello,小伙伴们,又到了摹客的新功能播报时间. 本月更新,摹客RP编辑界面缩放比例支持手动输入,并对部分组件的默认样式及属性进行了优化:摹客DT率先上线了3款黄金比例图层,辅助设计师更高效绘图:针 ...

  9. unity002

    物体轴心点变换 轴向变换 预览 暂停 逐帧播放 坐标 世界坐标 物体坐标 mesh 网格决定形状 渲染

  10. 公式b-(a-b)