Maven 搭建SpringMvc+Spring+Mybatis详细记录
总觉得,看比人写的总是那么好,每次搭建框架时都会找博客,找教程来跟着一步一步走,虽然很快搭建成功了,但是经常情况是我并不知道我干了什么,也不记得具体步骤,到底为什么要这么做,今天我详细记录了一下自己搭建的过程,并且尽量理解每一步干什么。
SSM框架当下比较流行,我也是用这个框架来作为记录,尝试详细地记录下每一个步骤,学习,不要怕开头难。
一、创建一个新的Maven项目
1、 new -> Maven -> Maven Project
选择webapp工程。
2、maven项目建好以后,工程目录如图。可以看到index.jsp文件报错了,那是因为我们工程还没有引入web项目相关包。我们需要项目默认的source folder只有/src/main/resources。我们需要手动建立另外三个source folder。右键工程名->new->source folder,输入文件名(src/main/java src/test/java src/test/resources)
3、建立好source folder后,我们需要将文件与项目发布目录关联起来。
右键工程名->build path ->source ,双击对每个文件夹下的output folder。src/main/java和src/main/resources添加到target/classes,另外两个添加到target/teas-class
添加完毕后如图:
4、将maven引用包关联到项目发布目录里,在不用maven管理项目时,项目导入的包需要放在WEB-INFO/lib下,所以,我们需要将maven引用包也要关联到这个目录下。
build Path -> deployment Assembly
5、在工程最下面,打开pom.xml文件,添加依赖。
保存pom文件
添加成功后项目没有报错,一个maven创建的javaweb项目基本完成。
src/main/java 下放项目工程源码文件
src/main/resources 下放项目的一些配置文件
src/test/* 这里是测试相关目录。
视图文件一般放在webapp目录下。
到目前为止是一个基本的web项目,需要用到框架,就打入相关包,设置好配置文件就ok。
下面我就开始搭建SpringMvc + Spring + Mybatis
二、配置SpringMvc
1、首先需要导入SpringMvc的一些系列包,用maven导入,在pom配置文件里添加如下依赖就行。
我用的springmvc版本是4.1.6。我所有需要依赖的包都是在:http://mvnrepository.com/
上搜索,找到版本,然后把依赖添加到pom文件里,然后让maven自动去下载jar包到本地maven
库,如果有下载失败,也可手动下载jar包,然后通过mvn命令手动添加jar包到本地maven仓库。
我并不知道项目会用哪些jar,我大概知道一些,先添加进来,出错了,根据错误再导入相关jar包。
以下是我在pom文件中添加的依赖:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.6.RELEASE</version> </dependency>
2、所有包引入后,配置web.xml,使其具有springmvc特性,主要配置两处,一个是ContextLoaderListener,一个是DispatcherServlet.
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:spring-*.xml </param-value> </context-param> <!--配置spring监听器,配置ContextLoaderListener表示,该工程要以spring的方式启动。启动时会默认在/WEB-INF目录下查找spring-*.xml作为spring容器的配置文件,
该文件里可以初始化一些bean --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!-- Spring MVC Servlet 的配置, 配置DispatcherServlet表示,该工程将采用springmvc的方式。启动时也会默认在/WEB-INF目录下查找XXX-servlet.xml作为配置文件,
XXX就是DispatcherServlet的名字,该文件中将配置两项重要的mvc特性:HandlerMapping,负责为DispatcherServlet这个前端控制器的请求查找Controller; ViewResolver,负责为DispatcherServlet查找ModelAndView的视图解析器。也可以配置参数,指定加载的配置文件 此处使用指定的配置文件spring-*.xml --> <servlet> <servlet-name>Spring-Servlet</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> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Spring-Servlet</servlet-name> <url-pattern>/</url-pattern> <!--拦截所有请求--> </servlet-mapping> </web-app>
3、接下来添加springmvc的配置文件
在src/main/resources目录下新建spring-servlet.xml文件(满足spring-*.xml格式,可以被扫描到)。
spring-servlet.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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-autowire="byName"> <!-- 扫描包下的所有类,该包路径下的类可以不需要配置bean了 --> <context:component-scan base-package="cquzrj.vipserver.controller" /> <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> </beans>
4、我们可以简单测试一下。看是否报错,看到报错,认真看错误信息,找到错误源头,先不百度,尝试自己解决。
在src/main/java下新建包,并建一个类。
package cquzrj.vipserver.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class TestVip { /** * 1. 使用RequestMapping注解来映射请求的URL * 2. 返回值会通过视图解析器解析为实际的物理视图, 对于InternalResourceViewResolver视图解析器,会做如下解析 * 通过prefix+returnVal+suffix 这样的方式得到实际的物理视图,然后会转发操作 * "/WEB-INF/views/success.jsp" * @return */ @RequestMapping("/helloworld") public String hello(){ System.out.println("hello world"); return “index”; } }
若pom文件里添加的依赖全部成功,运行可以看到已经成功访问。报异常是因为我们还没有配置视图解析器。
5、配置视图解析器
在spring-servlet.xml中加入:
<!--配置视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean>
在这里,由于我配置的是JstlView,需要引入jstl包,在pom文件加入依赖:
<dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
如果下载包失败,在java resource处会有红色感叹号,这就需要手动在下载并引入了,最后检查一下上面第一节的第4步,看maven包有没有引用到发布目录。
当然,也可以配置其他的视图解析器例如org.springframework.web.servlet.view.InternalResourceView
重新启动项目,访问helloworld,会发现页面成功跳转到了index页面。说明视图解析成功。
三、配置Mybatis
1、 Mybatis整合spring,其实就是需要spring的IOC容器来管理mybatis的SqlSessionFactory,而不需要mybatis自己去管理。
依然在src/main/resources下新建配置文件spring-mybatis.xml
spring-mybatis.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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/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" default-autowire="byType"> <!--数据库连接,用阿里的druid连接池--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://10.10.102.6:3306/jeecgmybatis?useUnicode=true&charaterEncoding=utf-8" /> <!-- 打开预编译,并缓存预编译,在执行prepareStatement时,或mybaits中的参数填充时,提高效率。 jdbc:mysql://10.10.102.6:3306/jeecgmybatis?useServerPrepStmts=true&cachePrepStmts=true&useUnicode=true&charaterEncoding=utf-8 --> <property name="username" value="root" /> <property name="password" value="root" /> <!-- 初始化连接大小 --> <property name="initialSize" value="0"></property> <!-- 连接池最大数量 --> <property name="maxActive" value="20"></property> <!-- 连接池最大空闲 --> <property name="maxIdle" value="15"></property> <!-- 连接池最小空闲 --> <property name="minIdle" value="10"></property> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="60000"></property> </bean> <!-- sqlSessionFactory会被org.mybatis.spring.mapper.MapperFactoryBean使用 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:MyBatis-Config.xml"/> <property name="mapperLocations"> <list> <!-- mapper文件的放置位置 --> <value>classpath:cquzrj/vipserver/model/xml/*Mapper.xml</value> </list> </property> <property name="dataSource" ref="dataSource" /> </bean> <!-- mybatis的Mapper的扫描器 MapperScannerConfigure 会自动扫描 包下的所有接口自动生成代理对象: 对象名字为Mapper接口类名(首字母小写) --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="cquzrj.vipserver.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> </beans>
2、加入mybatis相关包,pom文件添加:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.13</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.7</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency>
同样,导入包失败,请手动下载后导入,在导入完成后,检查第一节第4步。
到目前为止,整个框架整合完毕,需要的就是测试了,我在本机测试通过,并在此记录一下,这里关于如何进行SpringMVC整合Mybatis进行开发,我这里先不写了,留作下次我整理清楚再详细绍介绍,本文是个人学习记录,其中难免有讲述不清和个人理解有误的地方,请谅解并欢迎指正,共同学习。还有,需要说明的一点是,前面工程的名字是ZRJCash,后面是ZRJCashVip,这是因为我后边儿手动改了名字,可以略过。
By--- Gonjan
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,