1、首先创建maven项目(本帖以IDEA为开发环境)。点击file-->new-->project;在弹出的界面中,左侧选中maven,右上方选择需要的JDK,选择完毕点击next。
2、定义属性,引入spring、mybatis、mysql、freemarker需要的jar。<properties> <!-- 项目属性 --> <encoding>UTF-8</encoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <JDK.version>1.7</JDK.version> <spring.version>4.3.13.RELEASE</spring.version> <mybatis-spring.version>1.3.2</mybatis-spring.version> <mybatis.version>3.4.6</mybatis.version> <mysql-driver.version>5.1.18</mysql-driver.version> <freeMarker.version>2.3.23</freeMarker.version> <servlet.version>4.0.1</servlet.version></properties><dependencies> <!--核心--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!--管理bean--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!--上下文--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</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-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <!--el表达式--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <!--JDBC支持--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <!-- spring web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <!--MVC控制层框架--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet.version}</version> </dependency> <!--测试包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <!--mybatis-spring 适配器--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis-spring.version}</version> </dependency> <!--mybatis jar--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!--数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-driver.version}</version> </dependency> <!-- freemarker jar --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>${freeMarker.version}</version> </dependency> <!--以下为工具包 可以不引入--> <dependency> <!--Gson 对象转json 使用本地包--> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.0</version> <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/gson-2.8.0.jar</systemPath> </dependency> <dependency> <!--Json json转对象--> <groupId>org.nutz</groupId> <artifactId>nutz</artifactId> <version>1.r.60</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.3</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency> <!--工具包结束--></dependencies>jar引入完成
3、在src/main/下,新建目录 webapp。然后先建立好我们需要的package、directory、xml、properties等。如图所示,根据需要进行。
4、配置application.properties文件(jdbc信息、服务器IP、应用名称)jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/springMVC?characterEncoding=utf8jdbc.userName=rootjdbc.password=123456serverPath=/springappServer=http://127.0.0.1:8080appCode=springstaticPath=/spring/static
5、配置applicationContext.xml(该文件的主要功能:扫描、启用注解、启用定时逻晶诚湮任务、启用代理、定义静态资源侨嚅检货路径、加载properties文件、定义freemarker模板路径、freemarker视图解析器)。<?xml version="1.0" encoding="UTF-8"?><!--如果文件没有报错,启动报元素之类的错误,则找一个全面的xsi:schemaLocation来替换--><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:task="http://www.springframework.org/schema/task" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" 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-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> <!--支持注解方式--> <context:annotation-config/> <!--开启数据绑定 requestMapping等,如果不启用,则访问不到controller --> <mvc:annotation-driven/> <!--启用定时任务--> <task:annotation-driven/> <!--aspectj支持自动代理实现AOP功能--> <aop:aspectj-autoproxy proxy-target-class="true"/> <!--扫描指定包下的所有类(@Component、@Repository、@Service、@Controller)--> <context:component-scan base-package="com.test.spring"> <!--排除Repository,不扫描--> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> </context:component-scan> <!--排除静态资源路劲,不拦截--> <mvc:resources mapping="/static/**" location="/static/"/> <!--引入属性文件,在配置中占位使用 --> <context:property-placeholder location="/WEB-INF/application.properties"/> <!--<FreeMarker模板路径 --> <bean id="freemarkerConfigure" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/WEB-INF/mvcViews"/> <property name="defaultEncoding" value="UTF-8"/> </bean> <!--<FreeMarker视图解析器 --> <bean id="freemarkerResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/> <property name="contentType" value="text/html; charset=UTF-8"/> <property name="suffix" value=".ftl"/> <property name="order" value="0"/> <property name="attributesMap"><!--所有的ftl文件都能引用到的变量--> <map> <entry key="serverPath" value="${serverPath}"/> <entry key="appServer" value="${appServer}"/> <entry key="appCode" value="${appCode}"/> <entry key="staticPath" value="${staticPath}"/> </map> </property> </bean></beans>
6、配置spring-mybatis.xml文件(主要是配置数据源、扫描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: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-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!--引入属性文件,在配置中占位使用 --> <context:property-placeholder location="/WEB-INF/application.properties"/> <!-- 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.userName}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 会话工厂bean sqlSessionFactoryBean --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!--实体类路径--> <property name="typeAliasesPackage" value="com.test.spring.entity"/> <!--xml路径--> <property name="mapperLocations" value="classpath*:com/test/spring/dao/*.xml"/> </bean> <!-- 自动扫描对象关系映射 --> <bean name="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> <!-- 扫描应用健康检查下的Mapper文件 接口文件 --> <property name="basePackage" value="com.test.spring.dao" /> </bean> <!--定义事物管理器,由spring管理事务 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!--支持注解驱动的事务管理,指定事务管理器 --> <tx:annotation-driven transaction-manager="transactionManager"/></beans>
7、配置spring-servlet.xml,该xml是额外对拦截的自定义,比如对PC端和移动端的请求做不同处理,可以配置。如果不额外配置,文件可以为空。(我这里是空的)<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"></beans>
8、配置web.xml。(初始化参数、配置监听、配置过滤器、配置拦截器)。<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!--此处如果不配置<context-param>,则默认读取/WEB-INF/applicationContext.xml--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/spring-mybatis.xml</param-value> </context-param> <!--listener 不可以缺少--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> <!--字符集过滤--> <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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--此处如果不配置<init-param>,则默认读取/WEB-INF/${servlet-name}-servlet.xml --> <!-- <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-servlet.xml</param-value> </init-param>--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping></web-app>
9、现在可以部署到tomcat,path就用/spring,启动tomcat,看下是否报错。现在配置就完成了。
10、测试freemarker是否整合成功。1、在mvcViews目录下,新建一个html,然后重命名为index.ftl。2、在controller包下,新建一个HomeController类。3、重启tomcat,访问http://127.0.0.1:8080/spring/pc/index?name=张三文件内容如下图:
11、测试mybatis是否整合成功。新建表DROP TABLE IF EXISTS `t_book`;CREATE TABLE `t_book` ( `id` varchar(40) NOT NULL, `name` varchar(100) DEFAULT NULL COMMENT '书名', `profile` varchar(2000) DEFAULT NULL COMMENT '简介', `author` varchar(20) DEFAULT NULL COMMENT '作者', `publish_time` datetime DEFAULT NULL COMMENT '出版时间', `last_update` datetime DEFAULT NULL COMMENT '最后更新', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `t_book` VALUES ('0173e35c7f954b0e873ed33ae38c95a1', '这是一本书11', '这是一本书的简介', '就是我', '2018-08-16 00:00:00', '2018-08-15 13:44:08');INSERT INTO `t_book` VALUES ('1', '钢铁是这样练成的', '九年义务教育小学2年纪', '人民出版社', '2010-01-01 18:09:40', '2018-03-01 18:09:52');INSERT INTO `t_book` VALUES ('1dc08fe513fe43958bd65c9a5a788b29', '从入门到精通', 'java', '高奈夫斯基', null, '2018-08-14 18:17:22');INSERT INTO `t_book` VALUES ('25738821693865984', '巴黎圣母院', null, '雨果', '2018-08-14 12:00:07', '2018-08-14 12:00:07');INSERT INTO `t_book` VALUES ('25738821693865986', '人性的弱点', null, '威尔士', '2018-08-14 12:08:47', '2018-08-14 12:08:47');INSERT INTO `t_book` VALUES ('25738821693865990', '雷雨', null, '曹禺', '2018-08-14 14:49:24', '2018-08-14 14:49:24');INSERT INTO `t_book` VALUES ('25738821693865992', '孙子兵法', '著名的战争著作', '孙膑', '2017-01-04 00:00:00', '2018-08-16 15:38:40');在entity包下新建Book类,并添加get和set方法。public class Book implements Serializable { private static final long serialVersionUID = 1L; private String id; private String name; private String profile; private String author; private Date publishTime; private Date lastUpdate; private String publishTimeStr;//查询使用 private String lastUpdateStr;//查询使用}
12、建立dao的映射。在dao包下,新建BookMapper接口。public interface BookMapper { List<Book> getList();}在resource下的dao目录下,新建BookMapper.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.test.spring.dao.BookMapper"> <!--resultMap负责列名与bean的对应关系,以及类型转换--> <resultMap id="BookMap" type="com.test.spring.entity.Book"> <id column="id" property="id" jdbcType="VARCHAR"/> <result column="publish_time" property="publishTime" jdbcType="TIMESTAMP"/> <result column="last_update" property="lastUpdate" jdbcType="TIMESTAMP"/> </resultMap> <select id="getList" resultMap="BookMap" > select id,name,profile,author,publish_time ,last_update from t_book </select></mapper>
13、新建BookController类,内容如下:@Controller@RequestMapping(value = "/pc/book")public class BookController { @Resource private BookMapper bookMapper; @RequestMapping(value = "/list") public String list(Model model, String name){ List<Book> books = bookMapper.getList(); model.addAttribute("list",books); return "book/list"; }}mvcViews目录下,新建book目录,book目录下新建一个html,重命名为list.ftl,内容如下: <div>本页面的访问路径是:${appServer!}${serverPath!}/pc/book/list</div> <table> <thead><tr><td>作品名称</td><td>简介</td><td>作者</td><td>出版日期</td><td>更新日期</td></tr></thead> <tbody> <#if list?? && (list?size>0)> <#list list as item> <tr> <td>${(item.name)!}</td> <td>${(item.profile)!}</td> <td>${(item.author)!}</td> <td>${(item.publishTime?string('yyyy-MM-dd'))!}</td> <td>${(item.lastUpdate?string('yyyy-MM-dd HH:mm:ss'))!}</td> </tr> </#list> </#if> </tbody> </table>
14、重新启动tomcat,访问http://127.0.0.1:8080/spring/pc/book/list能看到数据,说明mybatis也成功了。