springspringmvcmybatis整合的开发思路和配置
SSM(Spring+SpringMVC+Mybatis)整合开发
1)MVC开发模式:B/S系统大多都是遵从MVC的开发模式开发的。M就是Model,模型层,负责数据的存储,就是代码中的类,最早的时候必须符合JavaBean的规范;V就是View,视图层,负责信息的展示,就是用户看到的应用页面;C就是Controller,控制器,这一层做的主要是逻辑层的操作,比如用户登录的后台代码,当然现在的逻辑层,在开发的过程中是由dao、service和controller共同组成的。
2)SSM这三者的作用分别是:
spring:Spring是一站式框架,因为Spring框架的性质是属于容器性质,容器中装了什么对象就有什么功能,所以可以一站式。
springmvc:SpringMVC是视图层,它是Spring框架的一部分,如果我们想要接收很多参数的话,直接就能把这些参数封装在一个类中,把类放到参数的位置就好了,SpringMVC就会自动帮助我们完成参数接收的过程,非常方便。
mybatis:即dao。dao也叫做持久层,作用就是将数据持久化到数据库之类的东西里面,也就是ORM框架。Mybatis非常好用。用DBUtils之类的数据库组件,并不灵活,稍微有些问题就无法读取或写入数据到数据库。Mybatis的出现大大解决了这个问题。
整合的结构
以小项目为例的项目结构
在这个小的web项目中,大致目录分成了java、resources、webapp三部分。
- java中有bean,这个目录是存放和数据库对应的基本类的;controller,这里面是存放控制器类的,这就类似于之前Servlet的作用;mapper,这是存放数据库映射文件的,最后是service,服务层,controller负责处理逻辑操作,service负责的是和mapper层交互,实现具体的功能,比如插入一条数据之类的。
- resources,资源路径,多数的配置文件和Mybatis的映射文件都放在这里
- webapp,这里面的内容和之前的开发一样,只是多出来一个SpringMVC的配置文件
我们将整体的结构分成了五个部分,分别是前端页面、Spring容器、数据库连接池、数据库(这两部分其实可以合成一部分)、Maven依赖管理。
完成一个web请求的个过程大致如下:
- 前端页面发起一个http请求:localhost:8080
- http请求被Tomcat服务器得到,接着到Servlet中寻找映射路径,当然有了SpringMVC就无需去执行复杂的配置了,我们可以像Servlet3.0那样使用注解开发,SpringMVC前端控制器的注解是@RequestMapping,通过请求的url,寻找映射路径,找到对应Controller类的方法
- 在Controller中,注入了诸多的Service,Controller可以直接调用这些service进行操作
- controller调用Service后,Service就要执行对应的方法,在Service中同样注入了mapper,即可调用相应的mapper方法执行数据库操作
- mybatis中,mapper层分成两部分,分别是接口和实现,调用mapper接口方法的时候,就会去找到对应方法的映射,这些映射就是执行数据库操作的语句,本质上还是sql语句
- 完成controller操作以后,再通过SpringMVC前端控制器控制页面跳转或者重定向之类的操作,但是现在一般使用ajax技术,提高前端页面的性能。
创建流程:
使用IDEA搭建SSM环境
新建Maven项目
建立web项目
配置comcat
jar包:pom.xml
<dependencies>
<!-- Junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- spring包 core、web、oxm、tx、jdbc、webmvc、aop、context、test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<!-- 导入Mysql数据库链接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 导入c3p0的jar包,用来在applicationContext.xml中配置数据库 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<!-- JSTL标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!-- 日志文件管理包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- 格式化对象,方便输出日志 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- json和bean之间相互转换 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- 上传组件包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons-codec.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectjweaver.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0-b07</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
resources中的配置
applicationContext.xml
<!--读取数据库配置型db.properties-->
<!--读取配置文件-->
<context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
<!--dataSource:C3P0连接池-->
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!--读取数据库需要用到工厂,工厂依赖mybatisxml文件和datasource-->
<bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:sqlMapconfig.xml"></property>
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
<!--指定扫描的包,如果扫描多个包,每个包之前用半角的逗号分隔-->
<property name="basePackage" value="com.huadian.mapper"></property>
</bean>
<context:component-scan base-package="com.huadian"></context:component-scan>
web.xml中的配置
<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:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
好了,文章就到这里,一个简单的项目就建立起来了