前言

最近比较闲,复习搭建一下项目,这次主要使用spring+SpringMVC+Mybatis。项目持久层使用Mybatis3,控制层使用SpringMVC4.1,使用Spring4.1管理控制器,数据库连接池使用druid数据源,该项数据库暂使用MySQL。(如果是Oracle需修改pom.xml)

<!-- oracle连接 -->
    <dependency>
      <groupId>com.hynnet</groupId>
      <artifactId>oracle-driver-ojdbc6</artifactId>
      <version>12.1.0.1</version>
    </dependency>

1、 数据库表结构以及maven项目结构

数据表非常的简单(不是重点),如下:

创建Maven Project时,将Filter选择为org.apache.maven.archetypes。填写完相关项目坐标信息后项目结构如下:

注:若无src/main/Java,src/test/java,src/test/resources时,创建这个几个Source Folder。

2、修改pom.xml添加对应的包依赖

这儿将全部使用的Maven依赖贴出了,对应什么作用上面都有解释,如下:

pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>org.andy.sm</groupId>
  5. <artifactId>springmvc_mybatis_demo</artifactId>
  6. <packaging>war</packaging>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>springmvc_mybatis_demo Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. <spring.version>4.1.4.RELEASE</spring.version>
  13. <jackson.version>2.5.0</jackson.version>
  14. </properties>
  15. <dependencies>
  16. <dependency>
  17. <groupId>junit</groupId>
  18. <artifactId>junit</artifactId>
  19. <version>4.12</version>
  20. <scope>test</scope>
  21. </dependency>
  22. <!-- spring -->
  23. <dependency>
  24. <groupId>org.springframework</groupId>
  25. <artifactId>spring-core</artifactId>
  26. <version>${spring.version}</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework</groupId>
  30. <artifactId>spring-beans</artifactId>
  31. <version>${spring.version}</version>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.springframework</groupId>
  35. <artifactId>spring-context</artifactId>
  36. <version>${spring.version}</version>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.springframework</groupId>
  40. <artifactId>spring-tx</artifactId>
  41. <version>${spring.version}</version>
  42. </dependency>
  43. <dependency>
  44. <groupId>org.springframework</groupId>
  45. <artifactId>spring-web</artifactId>
  46. <version>${spring.version}</version>
  47. </dependency>
  48. <dependency>
  49. <groupId>org.springframework</groupId>
  50. <artifactId>spring-webmvc</artifactId>
  51. <version>${spring.version}</version>
  52. </dependency>
  53. <dependency>
  54. <groupId>org.springframework</groupId>
  55. <artifactId>spring-jdbc</artifactId>
  56. <version>${spring.version}</version>
  57. </dependency>
  58. <dependency>
  59. <groupId>org.springframework</groupId>
  60. <artifactId>spring-test</artifactId>
  61. <version>${spring.version}</version>
  62. <scope>test</scope>
  63. </dependency>
  64. <!-- mybatis 包 -->
  65. <dependency>
  66. <groupId>org.mybatis</groupId>
  67. <artifactId>mybatis</artifactId>
  68. <version>3.2.8</version>
  69. </dependency>
  70. <!--mybatis spring 插件 -->
  71. <dependency>
  72. <groupId>org.mybatis</groupId>
  73. <artifactId>mybatis-spring</artifactId>
  74. <version>1.2.2</version>
  75. </dependency>
  76. <!-- mysql连接 -->
  77. <dependency>
  78. <groupId>mysql</groupId>
  79. <artifactId>mysql-connector-java</artifactId>
  80. <version>5.1.34</version>
  81. </dependency>
  82. <!-- 数据源 -->
  83. <dependency>
  84. <groupId>com.alibaba</groupId>
  85. <artifactId>druid</artifactId>
  86. <version>1.0.12</version>
  87. </dependency>
  88. <dependency>
  89. <groupId>org.aspectj</groupId>
  90. <artifactId>aspectjweaver</artifactId>
  91. <version>1.8.4</version>
  92. </dependency>
  93. <!-- log4j -->
  94. <dependency>
  95. <groupId>log4j</groupId>
  96. <artifactId>log4j</artifactId>
  97. <version>1.2.17</version>
  98. </dependency>
  99. <!-- servlet -->
  100. <dependency>
  101. <groupId>javax.servlet</groupId>
  102. <artifactId>servlet-api</artifactId>
  103. <version>3.0-alpha-1</version>
  104. </dependency>
  105. <dependency>
  106. <groupId>javax.servlet</groupId>
  107. <artifactId>jstl</artifactId>
  108. <version>1.2</version>
  109. </dependency>
  110. <!-- json -->
  111. <dependency>
  112. <groupId>org.codehaus.jackson</groupId>
  113. <artifactId>jackson-mapper-asl</artifactId>
  114. <version>1.9.13</version>
  115. </dependency>
  116. <dependency>
  117. <groupId>com.alibaba</groupId>
  118. <artifactId>fastjson</artifactId>
  119. <version>1.2.3</version>
  120. </dependency>
  121. <dependency>
  122. <groupId>com.fasterxml.jackson.core</groupId>
  123. <artifactId>jackson-annotations</artifactId>
  124. <version>${jackson.version}</version>
  125. </dependency>
  126. <dependency>
  127. <groupId>com.fasterxml.jackson.core</groupId>
  128. <artifactId>jackson-core</artifactId>
  129. <version>${jackson.version}</version>
  130. </dependency>
  131. <dependency>
  132. <groupId>com.fasterxml.jackson.core</groupId>
  133. <artifactId>jackson-databind</artifactId>
  134. <version>${jackson.version}</version>
  135. </dependency>
  136. <!-- 文件上传 -->
  137. <dependency>
  138. <groupId>commons-io</groupId>
  139. <artifactId>commons-io</artifactId>
  140. <version>2.4</version>
  141. </dependency>
  142. <dependency>
  143. <groupId>commons-fileupload</groupId>
  144. <artifactId>commons-fileupload</artifactId>
  145. <version>1.2.2</version>
  146. </dependency>
  147. </dependencies>
  148. <build>
  149. <finalName>springmvc_mybatis_demo</finalName>
  150. <plugins>
  151. <!-- Run the JUnit unit tests in an isolated classloader -->
  152. <plugin>
  153. <groupId>org.apache.maven.plugins</groupId>
  154. <artifactId>maven-surefire-plugin</artifactId>
  155. <version>2.4.2</version>
  156. <configuration>
  157. <skipTests>true</skipTests>
  158. </configuration>
  159. </plugin>
  160. <plugin>
  161. <groupId>org.apache.maven.plugins</groupId>
  162. <artifactId>maven-war-plugin</artifactId>
  163. <version>2.3</version>
  164. <configuration>
  165. <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
  166. </configuration>
  167. </plugin>
  168. <!-- generate java doc -->
  169. <plugin>
  170. <groupId>org.apache.maven.plugins</groupId>
  171. <artifactId>maven-javadoc-plugin</artifactId>
  172. <version>2.9.1</version>
  173. <configuration>
  174. <javadocDirectory>target/javadoc</javadocDirectory>
  175. <reportOutputDirectory>target/javadoc</reportOutputDirectory>
  176. <charset>UTF-8</charset>
  177. <encoding>UTF-8</encoding>
  178. <docencoding>UTF-8</docencoding>
  179. <show>private</show>
  180. </configuration>
  181. </plugin>
  182. <!-- 部署至本机 -->
  183. <plugin>
  184. <groupId>org.codehaus.cargo</groupId>
  185. <artifactId>cargo-maven2-plugin</artifactId>
  186. <version>1.0</version>
  187. <configuration>
  188. <container>
  189. <containerId>tomcat6x</containerId>
  190. <home>D:\WebServer\apache-tomcat-6.0.39</home>
  191. </container>
  192. <configuration>
  193. <type>existing</type>
  194. <home>D:\WebServer\apache-tomcat-6.0.39</home>
  195. </configuration>
  196. </configuration>
  197. </plugin>
  198. </plugins>
  199. </build>
  200. </project>

3、使用Generator自动生成Mybatis相关表信息

自动生成表的Model,Mapping,Dao文件,先关使用见文章http://blog.csdn.net/fengshizty/article/details/43086833

并将其导入到项目的src/main/java包中。

其中生成的Model中UserInfo如下:

UserInfo.java(其中List<CourseInfo> courseInfos手动添加的)

  1. package org.andy.shop.model;
  2. import java.util.List;
  3. public class UserInfo {
  4. private Integer id;
  5. private String uname;
  6. private Integer unumber;
  7. private List<CourseInfo> courseInfos;
  8. public Integer getId() {
  9. return id;
  10. }
  11. public void setId(Integer id) {
  12. this.id = id;
  13. }
  14. public String getUname() {
  15. return uname;
  16. }
  17. public void setUname(String uname) {
  18. this.uname = uname == null ? null : uname.trim();
  19. }
  20. public Integer getUnumber() {
  21. return unumber;
  22. }
  23. public void setUnumber(Integer unumber) {
  24. this.unumber = unumber;
  25. }
  26. public List<CourseInfo> getCourseInfos() {
  27. return courseInfos;
  28. }
  29. }

Dao包中的UserInfoMapper.java

  1. package org.andy.shop.dao;
  2. import java.util.List;
  3. import org.andy.shop.model.UserInfo;
  4. public interface UserInfoMapper {
  5. int deleteByPrimaryKey(Integer id);
  6. int insert(UserInfo record);
  7. int insertSelective(UserInfo record);
  8. UserInfo selectByPrimaryKey(Integer id);
  9. int updateByPrimaryKeySelective(UserInfo record);
  10. int updateByPrimaryKey(UserInfo record);
  11. List<UserInfo> selectAll();
  12. }

mapping 中的配置文件UserInfoMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3. <mapper namespace="org.andy.shop.dao.UserInfoMapper">
  4. <resultMap id="BaseResultMap" type="org.andy.shop.model.UserInfo">
  5. <id column="id" property="id" jdbcType="INTEGER" />
  6. <result column="uname" property="uname" jdbcType="VARCHAR" />
  7. <result column="unumber" property="unumber" jdbcType="INTEGER" />
  8. </resultMap>
  9. <sql id="Base_Column_List">
  10. id, uname, unumber
  11. </sql>
  12. <select id="selectByPrimaryKey" resultMap="BaseResultMap"
  13. parameterType="java.lang.Integer">
  14. select
  15. <include refid="Base_Column_List" />
  16. from user_info
  17. where id = #{id,jdbcType=INTEGER}
  18. </select>
  19. <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
  20. delete from
  21. user_info
  22. where id = #{id,jdbcType=INTEGER}
  23. </delete>
  24. <insert id="insert" parameterType="org.andy.shop.model.UserInfo">
  25. insert into user_info (id,
  26. uname, unumber
  27. )
  28. values (#{id,jdbcType=INTEGER},
  29. #{uname,jdbcType=VARCHAR},
  30. #{unumber,jdbcType=INTEGER}
  31. )
  32. </insert>
  33. <insert id="insertSelective" parameterType="org.andy.shop.model.UserInfo">
  34. insert into user_info
  35. <trim prefix="(" suffix=")" suffixOverrides=",">
  36. <if test="id != null">
  37. id,
  38. </if>
  39. <if test="uname != null">
  40. uname,
  41. </if>
  42. <if test="unumber != null">
  43. unumber,
  44. </if>
  45. </trim>
  46. <trim prefix="values (" suffix=")" suffixOverrides=",">
  47. <if test="id != null">
  48. #{id,jdbcType=INTEGER},
  49. </if>
  50. <if test="uname != null">
  51. #{uname,jdbcType=VARCHAR},
  52. </if>
  53. <if test="unumber != null">
  54. #{unumber,jdbcType=INTEGER},
  55. </if>
  56. </trim>
  57. </insert>
  58. <update id="updateByPrimaryKeySelective" parameterType="org.andy.shop.model.UserInfo">
  59. update user_info
  60. <set>
  61. <if test="uname != null">
  62. uname = #{uname,jdbcType=VARCHAR},
  63. </if>
  64. <if test="unumber != null">
  65. unumber = #{unumber,jdbcType=INTEGER},
  66. </if>
  67. </set>
  68. where id = #{id,jdbcType=INTEGER}
  69. </update>
  70. <update id="updateByPrimaryKey" parameterType="org.andy.shop.model.UserInfo">
  71. update user_info
  72. set uname = #{uname,jdbcType=VARCHAR},
  73. unumber =
  74. #{unumber,jdbcType=INTEGER}
  75. where id = #{id,jdbcType=INTEGER}
  76. </update>
  77. <resultMap type="org.andy.shop.model.UserInfo" id="UserCourseMap"
  78. extends="BaseResultMap">
  79. <collection property="courseInfos" javaType="list"
  80. ofType="org.andy.shop.model.CourseInfo">
  81. <id property="id" column="course_id" jdbcType="INTEGER" />
  82. <result property="cname" column="cname" jdbcType="VARCHAR" />
  83. <result property="caddress" column="caddress" jdbcType="VARCHAR" />
  84. </collection>
  85. </resultMap>
  86. <select id="selectAll" resultMap="UserCourseMap">
  87. select u.id, u.uname,
  88. u.unumber, c.id course_id, c.cname, c.caddress from user_info u left
  89. join course_user_info cu on u.id = cu.uid
  90. left join course_info c on
  91. cu.cid = c.id
  92. </select>
  93. </mapper>

4、引入Spring并配置相关属性

在src/main/resources创建spring的配置文件,这里创建了spring.xml,信息如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
  6. http://www.springframework.org/schema/context
  7. http://www.springframework.org/schema/context/spring-context-4.1.xsd">
  8. <!--引入配置属性文件 -->
  9. <context:property-placeholder location="classpath:config.properties" />
  10. <!--自动扫描含有@Service将其注入为bean -->
  11. <context:component-scan base-package="org.andy.shop.service" />
  12. </beans>

5、引入Mybatis并配置数据连接池等信息

5.1、数据连接池druid配置信息

配置连接池配置信息在config.properties中,如下:

  1. #mysql version database druid setting
  2. validationQuery=SELECT 1
  3. jdbc.url=jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf-8
  4. jdbc.username=root
  5. jdbc.password=12345

5.2、配置Mybatis相关信息

以下是mybatis的配置信息:spring-mybatis.xml(ps:名字可随便起)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
  4. xmlns:aop="http://www.springframework.org/schema/aop"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
  8. http://www.springframework.org/schema/tx
  9. http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
  10. http://www.springframework.org/schema/aop
  11. http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
  12. ">
  13. <!-- 配置数据源 使用的是Druid数据源 -->
  14. <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
  15. init-method="init" destroy-method="close">
  16. <property name="url" value="${jdbc.url}" />
  17. <property name="username" value="${jdbc.username}" />
  18. <property name="password" value="${jdbc.password}" />
  19. <!-- 初始化连接大小 -->
  20. <property name="initialSize" value="0" />
  21. <!-- 连接池最大使用连接数量 -->
  22. <property name="maxActive" value="20" />
  23. <!-- 连接池最小空闲 -->
  24. <property name="minIdle" value="0" />
  25. <!-- 获取连接最大等待时间 -->
  26. <property name="maxWait" value="60000" />
  27. <property name="poolPreparedStatements" value="true" />
  28. <property name="maxPoolPreparedStatementPerConnectionSize"
  29. value="33" />
  30. <!-- 用来检测有效sql -->
  31. <property name="validationQuery" value="${validationQuery}" />
  32. <property name="testOnBorrow" value="false" />
  33. <property name="testOnReturn" value="false" />
  34. <property name="testWhileIdle" value="true" />
  35. <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
  36. <property name="timeBetweenEvictionRunsMillis" value="60000" />
  37. <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
  38. <property name="minEvictableIdleTimeMillis" value="25200000" />
  39. <!-- 打开removeAbandoned功能 -->
  40. <property name="removeAbandoned" value="true" />
  41. <!-- 1800秒,也就是30分钟 -->
  42. <property name="removeAbandonedTimeout" value="1800" />
  43. <!-- 关闭abanded连接时输出错误日志 -->
  44. <property name="logAbandoned" value="true" />
  45. <!-- 监控数据库 -->
  46. <property name="filters" value="mergeStat" />
  47. </bean>
  48. <!-- myBatis文件 -->
  49. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  50. <property name="dataSource" ref="dataSource" />
  51. <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
  52. <property name="mapperLocations" value="classpath:org/andy/shop/mapping/*.xml" />
  53. </bean>
  54. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  55. <property name="basePackage" value="org.andy.shop.dao" />
  56. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
  57. </bean>
  58. <!-- 配置事务管理器 -->
  59. <bean id="transactionManager"
  60. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  61. <property name="dataSource" ref="dataSource" />
  62. </bean>
  63. <!-- 注解方式配置事物 -->
  64. <!-- <tx:annotation-driven transaction-manager="transactionManager" /> -->
  65. <!-- 拦截器方式配置事物 -->
  66. <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
  67. <tx:attributes>
  68. <tx:method name="insert*" propagation="REQUIRED" />
  69. <tx:method name="update*" propagation="REQUIRED" />
  70. <tx:method name="delete*" propagation="REQUIRED" />
  71. <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
  72. <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
  73. <tx:method name="select*" propagation="SUPPORTS" read-only="true" />
  74. </tx:attributes>
  75. </tx:advice>
  76. <!-- Spring aop事务管理 -->
  77. <aop:config>
  78. <aop:pointcut id="transactionPointcut"
  79. expression="execution(* org.andy.shop.service..*Impl.*(..))" />
  80. <aop:advisor pointcut-ref="transactionPointcut"
  81. advice-ref="transactionAdvice" />
  82. </aop:config>
  83. </beans>

主要配置数据连接池,事务管理, mybatis关联映射等,事务采用aop的声明式事务。

6、引入日志

在src/main/resources中添加log4j日志配置信息:

log4j.properties

  1. ### set log levels ###
  2. log4j.rootLogger = INFO , C , D , E
  3. ### console ###
  4. log4j.appender.C = org.apache.log4j.ConsoleAppender
  5. log4j.appender.C.Target = System.out
  6. log4j.appender.C.layout = org.apache.log4j.PatternLayout
  7. log4j.appender.C.layout.ConversionPattern = [springmvc_mybatis_demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n
  8. ### log file ###
  9. log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
  10. log4j.appender.D.File = ../logs/springmvc-mybatis-demo.log
  11. log4j.appender.D.Append = true
  12. log4j.appender.D.Threshold = INFO
  13. log4j.appender.D.layout = org.apache.log4j.PatternLayout
  14. log4j.appender.D.layout.ConversionPattern = [springmvc_mybatis_demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n
  15. ### exception ###
  16. log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
  17. log4j.appender.E.File = ../logs/springmvc-mybatis-demo_error.log
  18. log4j.appender.E.Append = true
  19. log4j.appender.E.Threshold = ERROR
  20. log4j.appender.E.layout = org.apache.log4j.PatternLayout
  21. log4j.appender.E.layout.ConversionPattern = [sspringmvc_mybatis_demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

7、创建Service

在src/main/java中创建相关的org.andy.shop.service包和org.andy.shop.service.Impl包。

UserService接口:

  1. package org.andy.shop.service;
  2. import java.util.List;
  3. import org.andy.shop.model.UserInfo;
  4. /**
  5. * 创建时间:2015-1-27 下午5:15:03
  6. * @author andy
  7. * @version 2.2
  8. */
  9. public interface UserService {
  10. UserInfo getUserById(int id);
  11. List<UserInfo> getUsers();
  12. int insert(UserInfo userInfo);
  13. }

UserServiceImpl实现Service:

  1. package org.andy.shop.service.impl;
  2. import java.util.List;
  3. import org.andy.shop.dao.UserInfoMapper;
  4. import org.andy.shop.model.UserInfo;
  5. import org.andy.shop.service.UserService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. /**
  9. * 创建时间:2015-1-27 下午5:22:59
  10. *
  11. * @author andy
  12. * @version 2.2
  13. */
  14. @Service("userService")
  15. public class UserServiceImpl implements UserService {
  16. @Autowired
  17. private UserInfoMapper userInfoMapper;
  18. @Override
  19. public UserInfo getUserById(int id) {
  20. return userInfoMapper.selectByPrimaryKey(id);
  21. }
  22. @Override
  23. public List<UserInfo> getUsers() {
  24. return userInfoMapper.selectAll();
  25. }
  26. @Override
  27. public int insert(UserInfo userInfo) {
  28. int result = userInfoMapper.insert(userInfo);
  29. System.out.println(result);
  30. return result;
  31. }
  32. }

8、测试Spring和Mybatis配置

在src/test/java中写测试类,检测是否能够读出数据,若能读出则证明Spring+Mybatis整合成功。

TestUserService测试类:

  1. package org.andy.shop.service;
  2. import java.util.List;
  3. import org.andy.shop.model.UserInfo;
  4. import org.apache.log4j.Logger;
  5. import org.junit.Test;
  6. import org.junit.runner.RunWith;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.test.context.ContextConfiguration;
  9. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  10. import com.alibaba.fastjson.JSON;
  11. /**
  12. * 创建时间:2015-1-27 下午10:45:38
  13. *
  14. * @author andy
  15. * @version 2.2
  16. */
  17. @RunWith(SpringJUnit4ClassRunner.class)
  18. @ContextConfiguration(locations = { "classpath:spring.xml",
  19. "classpath:spring-mybatis.xml" })
  20. public class TestUserService {
  21. private static final Logger LOGGER = Logger
  22. .getLogger(TestUserService.class);
  23. @Autowired
  24. private UserService userService;
  25. @Test
  26. public void testQueryById1() {
  27. UserInfo userInfo = userService.getUserById(1);
  28. LOGGER.info(JSON.toJSON(userInfo));
  29. }
  30. @Test
  31. public void testQueryAll() {
  32. List<UserInfo> userInfos = userService.getUsers();
  33. LOGGER.info(JSON.toJSON(userInfos));
  34. }
  35. @Test
  36. public void testInsert() {
  37. UserInfo userInfo = new UserInfo();
  38. userInfo.setUname("xiaoming");
  39. userInfo.setUnumber(4);
  40. int result = userService.insert(userInfo);
  41. System.out.println(result);
  42. }
  43. }

若是测试成功,那证明已经成功了一半了。

9、引入SpringMVC

9.1 配置SpringMVC配置信息

SpringMVC的配置信息主要包括控制层Controller的bean管理,视图层和控制层配置等等,下面是spring-mvc.xml信息:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context-4.1.xsd
  9. http://www.springframework.org/schema/mvc
  10. http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
  11. <!-- 自动扫描controller包下的所有类,如果@Controller注入为bean -->
  12. <context:component-scan base-package="org.andy.shop.controller" />
  13. <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
  14. <bean id="mappingJacksonHttpMessageConverter"
  15. class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
  16. <property name="supportedMediaTypes">
  17. <list>
  18. <value>text/html;charset=UTF-8</value>
  19. </list>
  20. </property>
  21. </bean>
  22. <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
  23. <bean
  24. class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  25. <property name="messageConverters">
  26. <list>
  27. <!-- json转换器 -->
  28. <ref bean="mappingJacksonHttpMessageConverter" />
  29. </list>
  30. </property>
  31. </bean>
  32. <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
  33. <bean
  34. class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  35. <property name="viewClass"
  36. value="org.springframework.web.servlet.view.JstlView" />
  37. <property name="prefix" value="/WEB-INF/views" />
  38. <property name="suffix" value=".jsp" />
  39. </bean>
  40. <!-- 配置多文件上传 -->
  41. <bean id="multipartResolver"
  42. class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  43. <property name="defaultEncoding">
  44. <value>UTF-8</value>
  45. </property>
  46. <property name="maxUploadSize">
  47. <!-- 上传文件大小限制为31M,31*1024*1024 -->
  48. <value>32505856</value>
  49. </property>
  50. <property name="maxInMemorySize">
  51. <value>4096</value>
  52. </property>
  53. </bean>
  54. </beans>

自动扫描org.andy.shop.controller报下还有@Controller的控制层,注入为bean。

9.2、Web容器web.xml配置

web容器配置启动加载的配置文件,设置SpringMVC拦截的请求(此处拦截.htmls结尾的url请求)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  5. id="WebApp_ID" version="2.5">
  6. <display-name>springmvc_mybatis_demo</display-name>
  7. <context-param>
  8. <param-name>contextConfigLocation</param-name>
  9. <param-value>classpath:spring.xml,classpath:spring-mybatis.xml</param-value>
  10. </context-param>
  11. <filter>
  12. <filter-name>encodingFilter</filter-name>
  13. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  14. <init-param>
  15. <param-name>encoding</param-name>
  16. <param-value>utf-8</param-value>
  17. </init-param>
  18. <init-param>
  19. <param-name>forceEncoding</param-name>
  20. <param-value>true</param-value>
  21. </init-param>
  22. </filter>
  23. <filter-mapping>
  24. <filter-name>encodingFilter</filter-name>
  25. <url-pattern>/*</url-pattern>
  26. </filter-mapping>
  27. <listener>
  28. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  29. </listener>
  30. <!-- 防止spring内存溢出监听器 -->
  31. <listener>
  32. <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
  33. </listener>
  34. <servlet>
  35. <description>spring mvc servlet</description>
  36. <servlet-name>rest</servlet-name>
  37. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  38. <init-param>
  39. <param-name>contextConfigLocation</param-name>
  40. <param-value>
  41. classpath:spring-mvc.xml
  42. </param-value>
  43. </init-param>
  44. <load-on-startup>1</load-on-startup>
  45. </servlet>
  46. <servlet-mapping>
  47. <servlet-name>rest</servlet-name>
  48. <url-pattern>*.htmls</url-pattern>
  49. </servlet-mapping>
  50. <!-- 配置session超时时间,单位分钟 -->
  51. <session-config>
  52. <session-timeout>30</session-timeout>
  53. </session-config>
  54. <welcome-file-list>
  55. <welcome-file>index.jsp</welcome-file>
  56. </welcome-file-list>
  57. </web-app>

9.3、Controller控制层

在org.andy.shop.controller创建控制层,如UserController.java

  1. package org.andy.shop.controller;
  2. import java.util.List;
  3. import org.andy.shop.model.UserInfo;
  4. import org.andy.shop.service.UserService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.ui.ModelMap;
  8. import org.springframework.web.bind.annotation.PathVariable;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.ResponseBody;
  11. /**
  12. * 创建时间:2015-1-28 下午1:17:27
  13. * @author andy
  14. * @version 2.2
  15. */
  16. @Controller
  17. @RequestMapping("/user")
  18. public class UserController {
  19. @Autowired
  20. private UserService userService;
  21. @RequestMapping("/showInfo/{userId}")
  22. public String showUserInfo(ModelMap modelMap, @PathVariable int userId){
  23. UserInfo userInfo = userService.getUserById(userId);
  24. modelMap.addAttribute("userInfo", userInfo);
  25. return "/user/showInfo";
  26. }
  27. @RequestMapping("/showInfos")
  28. public @ResponseBody Object showUserInfos(){
  29. List<UserInfo> userInfos = userService.getUsers();
  30. return userInfos;
  31. }
  32. }

9.4、视图层

在WEB-INF创建视图总目录views(为了安全起见一般都在WEB-INF下创建),创建/user/showInfo.jsp视图文件。

  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6. <title>userInfo</title>
  7. </head>
  8. <body>
  9. 姓名: ${userInfo.uname}
  10. </body>
  11. </html>

9.5、项目总目录结构

到此为demo以及基本创建完成总目录如下:

10、项目测试

将项目编译,Maven build...输入clean compile package,部署到Tomcat服务器,启动项目。

测试1:测试第一个url,  http://localhost:8080/springmvc_mybatis_demo/user/showInfo/1.htmls

测试2:测试第二个json数据返回的url,  http://localhost:8080/springmvc_mybatis_demo/user/showInfos.htmls

Maven搭建SpringMVC+Mybatis项目详解的更多相关文章

  1. Maven搭建SpringMVC+Hibernate项目详解 【转】

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

  2. Maven搭建SpringMVC + SpringJDBC项目详解

    前言 上一次复习搭建了SpringMVC+Mybatis,这次搭建一下SpringMVC,采用的是SpringJDBC,没有采用任何其他的ORM框架,SpringMVC提供了一整套的WEB框架,所以如 ...

  3. Maven搭建SpringMVC+Hibernate项目详解

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

  4. Maven搭建SpringMVC+Hibernate项目详解(转)

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

  5. 从头开始基于Maven搭建SpringMVC+Mybatis项目(3)

    接上文内容,本节介绍基于Mybatis的查询和分页功能,并展示一个自定义的分页标签,可重复使用以简化JSP页面的开发. 从头阅读传送门 在上一节中,我们已经使用Maven搭建好了项目的基础结构,包括一 ...

  6. 从头开始基于Maven搭建SpringMVC+Mybatis项目(1)

    技术发展日新月异,许多曾经拥有霸主地位的流行技术短短几年间已被新兴技术所取代. 在Java的世界中,框架之争可能比语言本身的改变更让人关注.近几年,SpringMVC凭借简单轻便.开发效率高.与spr ...

  7. maven搭建springmvc+mybatis项目

    上一篇中已经成功使用maven搭建了一个web项目,本篇描述在此基础上怎么搭建一个基于springmvc+mybatis环境的项目. 说了这么久,为什么那么多人都喜欢用maven搭建项目?我们都知道m ...

  8. 从头开始基于Maven搭建SpringMVC+Mybatis项目(2)

    接上文内容,本节介绍Maven的聚合和继承. 从头阅读传送门 互联网时代,软件正在变得越来越复杂,开发人员通常会对软件划分模块,以获得清晰的设计.良好的分工及更高的可重用性.Maven的聚合特性能把多 ...

  9. 从头开始基于Maven搭建SpringMVC+Mybatis项目(4)

    接上文内容,上一节中的示例中完成了支持分页的商品列表查询功能,不过我们的目标是打造一个商品管理后台,本节中还需要补充添加.修改.删除商品的功能,这些功能依靠Mybatis操作数据库,并通过Spring ...

随机推荐

  1. C#学习系列-抽象方法与虚拟方法的区别

    参考:http://www.microsoftvirtualacademy.com/Content/ViewContent.aspx?et=9851&m=9838&ct=31054 如 ...

  2. PHP两种redirect

    PHP两种redirect redirect header('Location: /admin_data.php'); exit(); redirect `echo "<script& ...

  3. 【WP开发】如何处理溢出的文本

    本文内容适用于Runtime App框架 在用户界面上显示文本,用得严重多的是TextBlock,凡是轻量级的东西都会很常用,TextBlock对于显示简单.少量的文本内容相当适合,不过,在我们考虑要 ...

  4. java中同步嵌套引起的死锁事例代码

    /* 目的:自己写一个由于同步嵌套引起的死锁! 思路:多个线程在执行时,某一时刻,0-Thread绑定了LockA锁,1-Thread绑定了LockB锁! 当0-Thread要去绑定LockB锁时 和 ...

  5. Oracle Dataguard之switchover

    Oracle Dataguard的角色转换包含两类:Switchover和Failover.Switchover指主备之间角色转换,主库降为备库,备库升级为主库.而failover则是指主库出现问题时 ...

  6. MemCache在win7上的可视化配置以及Nodejs/Net应用

    惯例科普:MemCache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要频繁访问数据库的 ...

  7. Unity3D Player角色移动控制脚本

    1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position.之前写过类似的文章,这次增加了平时常用API的脚本,每个脚本均手打测试可用. 2. ...

  8. Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)一

    MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中. 使用这个类库中的类, Spring 将会加载必要的MyBatis工厂类和 session 类. 这个类库 ...

  9. 可视化(番外篇)——在Eclipse RCP中玩转OpenGL

    最近在看有关Eclipse RCP方面的东西,鉴于Gephi是使用opengl作为绘图引擎,所以,萌生了在Eclipse RCP下添加画布,使用opengl绘图的想法,网上有博文详细介绍这方面的内容, ...

  10. WPF The Hard Way

    WPF The Hard Way Windows Presentation Foundation (WPF) 是微软下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序.  ...