`
jsntghf
  • 浏览: 2542511 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Spring + Spring MVC + MyBatis整合

    博客分类:
  • Java
阅读更多

一、Maven Web项目创建

如有需要,请参考:使用maven创建web项目

 

二、Spring + Spring MVC + MyBatis整合

1、Maven引入需要的JAR包(pom.xml)

Java代码 
  1. <properties>  
  2.     <!-- spring版本号 -->  
  3.     <spring.version>4.0.2.RELEASE</spring.version>  
  4.     <!-- mybatis版本号 -->  
  5.     <mybatis.version>3.2.6</mybatis.version>  
  6.     <!-- log4j日志文件管理包版本 -->  
  7.     <slf4j.version>1.7.7</slf4j.version>  
  8.     <log4j.version>1.2.17</log4j.version>  
  9. </properties>  
  10.   
  11. <dependencies>  
  12.     <dependency>  
  13.         <groupId>junit</groupId>  
  14.         <artifactId>junit</artifactId>  
  15.         <version>4.11</version>  
  16.         <!-- 表示开发的时候引入,发布的时候不会加载此包 -->  
  17.         <scope>test</scope>  
  18.     </dependency>  
  19.   
  20.     <!-- spring核心包 -->  
  21.     <dependency>  
  22.         <groupId>org.springframework</groupId>  
  23.         <artifactId>spring-core</artifactId>  
  24.         <version>${spring.version}</version>  
  25.     </dependency>  
  26.   
  27.     <dependency>  
  28.         <groupId>org.springframework</groupId>  
  29.         <artifactId>spring-web</artifactId>  
  30.         <version>${spring.version}</version>  
  31.     </dependency>  
  32.   
  33.     <dependency>  
  34.         <groupId>org.springframework</groupId>  
  35.         <artifactId>spring-oxm</artifactId>  
  36.         <version>${spring.version}</version>  
  37.     </dependency>  
  38.   
  39.     <dependency>  
  40.         <groupId>org.springframework</groupId>  
  41.         <artifactId>spring-tx</artifactId>  
  42.         <version>${spring.version}</version>  
  43.     </dependency>  
  44.   
  45.     <dependency>  
  46.         <groupId>org.springframework</groupId>  
  47.         <artifactId>spring-jdbc</artifactId>  
  48.         <version>${spring.version}</version>  
  49.     </dependency>  
  50.   
  51.     <dependency>  
  52.         <groupId>org.springframework</groupId>  
  53.         <artifactId>spring-webmvc</artifactId>  
  54.         <version>${spring.version}</version>  
  55.     </dependency>  
  56.   
  57.     <dependency>  
  58.         <groupId>org.springframework</groupId>  
  59.         <artifactId>spring-aop</artifactId>  
  60.         <version>${spring.version}</version>  
  61.     </dependency>  
  62.   
  63.     <dependency>  
  64.         <groupId>org.springframework</groupId>  
  65.         <artifactId>spring-context-support</artifactId>  
  66.         <version>${spring.version}</version>  
  67.     </dependency>  
  68.   
  69.     <dependency>  
  70.         <groupId>org.springframework</groupId>  
  71.         <artifactId>spring-test</artifactId>  
  72.         <version>${spring.version}</version>  
  73.     </dependency>  
  74.   
  75.     <!-- mybatis核心包 -->  
  76.     <dependency>  
  77.         <groupId>org.mybatis</groupId>  
  78.         <artifactId>mybatis</artifactId>  
  79.         <version>${mybatis.version}</version>  
  80.     </dependency>  
  81.   
  82.     <!-- mybatis/spring包 -->  
  83.     <dependency>  
  84.         <groupId>org.mybatis</groupId>  
  85.         <artifactId>mybatis-spring</artifactId>  
  86.         <version>1.2.2</version>  
  87.     </dependency>  
  88.   
  89.     <!-- java ee jar 包 -->  
  90.     <dependency>  
  91.         <groupId>javax</groupId>  
  92.         <artifactId>javaee-api</artifactId>  
  93.         <version>7.0</version>  
  94.     </dependency>  
  95.   
  96.     <!-- Mysql数据库链接jar包 -->  
  97.     <dependency>  
  98.         <groupId>mysql</groupId>  
  99.         <artifactId>mysql-connector-java</artifactId>  
  100.         <version>5.1.30</version>  
  101.     </dependency>  
  102.   
  103.     <!-- dbcp的jar包,用来在applicationContext.xml中配置数据库 -->  
  104.     <dependency>  
  105.         <groupId>commons-dbcp</groupId>  
  106.         <artifactId>commons-dbcp</artifactId>  
  107.         <version>1.2.2</version>  
  108.     </dependency>  
  109.   
  110.     <!-- JSTL标签类 -->  
  111.     <dependency>  
  112.         <groupId>jstl</groupId>  
  113.         <artifactId>jstl</artifactId>  
  114.         <version>1.2</version>  
  115.     </dependency>  
  116.   
  117.     <!-- 日志文件管理包 -->  
  118.     <!-- log start -->  
  119.     <dependency>  
  120.         <groupId>log4j</groupId>  
  121.         <artifactId>log4j</artifactId>  
  122.         <version>${log4j.version}</version>  
  123.     </dependency>  
  124.   
  125.     <!-- 格式化对象,方便输出日志 -->  
  126.     <dependency>  
  127.         <groupId>com.alibaba</groupId>  
  128.         <artifactId>fastjson</artifactId>  
  129.         <version>1.1.41</version>  
  130.     </dependency>  
  131.   
  132.     <dependency>  
  133.         <groupId>org.slf4j</groupId>  
  134.         <artifactId>slf4j-api</artifactId>  
  135.         <version>${slf4j.version}</version>  
  136.     </dependency>  
  137.   
  138.     <dependency>  
  139.         <groupId>org.slf4j</groupId>  
  140.         <artifactId>slf4j-log4j12</artifactId>  
  141.         <version>${slf4j.version}</version>  
  142.     </dependency>  
  143.     <!-- log end -->  
  144.   
  145.     <!-- JSON -->  
  146.     <dependency>  
  147.         <groupId>org.codehaus.jackson</groupId>  
  148.         <artifactId>jackson-mapper-asl</artifactId>  
  149.         <version>1.9.13</version>  
  150.     </dependency>  
  151.   
  152.     <!-- 上传组件包 -->  
  153.     <dependency>  
  154.         <groupId>commons-fileupload</groupId>  
  155.         <artifactId>commons-fileupload</artifactId>  
  156.         <version>1.3.1</version>  
  157.     </dependency>  
  158.   
  159.     <dependency>  
  160.         <groupId>commons-io</groupId>  
  161.         <artifactId>commons-io</artifactId>  
  162.         <version>2.4</version>  
  163.     </dependency>  
  164.   
  165.     <dependency>  
  166.         <groupId>commons-codec</groupId>  
  167.         <artifactId>commons-codec</artifactId>  
  168.         <version>1.9</version>  
  169.     </dependency>  
  170. </dependencies>  

 

查找依赖结构有个不错的网站:http://search.maven.org/,只要输入包名即可查找依赖关系。

 

2、Spring与MyBatis的整合

(1)建立JDBC属性文件(jdbc.properties,文件编码修改为UTF-8)

Java代码 
  1. driver=com.mysql.jdbc.Driver  
  2. url=jdbc:mysql://localhost:3306/SSMTest?useUnicode=true&amp;characterEncoding=utf8  
  3. username=root  
  4. password=root  
  5. #定义初始连接数  
  6. initialSize=0  
  7. #定义最大连接数  
  8. maxActive=20  
  9. #定义最大空闲  
  10. maxIdle=20  
  11. #定义最小空闲  
  12. minIdle=1  
  13. #定义最长等待时间  
  14. maxWait=60000  

(2)建立spring-mybatis.xml配置文件

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:p="http://www.springframework.org/schema/p"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  7.   http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    
  8.   http://www.springframework.org/schema/context    
  9.   http://www.springframework.org/schema/context/spring-context-3.1.xsd    
  10.   http://www.springframework.org/schema/mvc    
  11.   http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">  
  12.   
  13.     <!-- 自动扫描 -->  
  14.     <context:component-scan base-package="com.eric" />  
  15.   
  16.     <!-- 引入配置文件 -->  
  17.     <bean id="propertyConfigurer"  
  18.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  19.         <property name="location" value="classpath:jdbc.properties" />  
  20.     </bean>  
  21.   
  22.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
  23.         destroy-method="close">  
  24.         <property name="driverClassName" value="${driver}" />  
  25.         <property name="url" value="${url}" />  
  26.         <property name="username" value="${username}" />  
  27.         <property name="password" value="${password}" />  
  28.         <!-- 初始化连接大小 -->  
  29.         <property name="initialSize" value="${initialSize}"></property>  
  30.         <!-- 连接池最大数量 -->  
  31.         <property name="maxActive" value="${maxActive}"></property>  
  32.         <!-- 连接池最大空闲 -->  
  33.         <property name="maxIdle" value="${maxIdle}"></property>  
  34.         <!-- 连接池最小空闲 -->  
  35.         <property name="minIdle" value="${minIdle}"></property>  
  36.         <!-- 获取连接最大等待时间 -->  
  37.         <property name="maxWait" value="${maxWait}"></property>  
  38.     </bean>  
  39.   
  40.     <!-- Spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->  
  41.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  42.         <property name="dataSource" ref="dataSource" />  
  43.         <!-- 自动扫描mapping.xml文件 -->  
  44.         <property name="mapperLocations" value="classpath:com/eric/mapping/*.xml"></property>  
  45.     </bean>  
  46.   
  47.     <!-- DAO接口所在包名,Spring会自动查找其下的类 -->  
  48.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
  49.         <property name="basePackage" value="com.eric.dao" />  
  50.         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
  51.     </bean>  
  52.   
  53.     <!-- 事务管理 -->  
  54.     <bean id="transactionManager"  
  55.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  56.         <property name="dataSource" ref="dataSource" />  
  57.     </bean>  
  58.   
  59. </beans>  

 

(3)Log4j的配置(log4j.properties)

Java代码 
  1. #定义LOG输出级别  
  2. log4j.rootLogger=INFO,Console,File  
  3. #定义日志输出目的地为控制台  
  4. log4j.appender.Console=org.apache.log4j.ConsoleAppender  
  5. log4j.appender.Console.Target=System.out  
  6. #可以灵活地指定日志输出格式,下面一行是指定具体的格式  
  7. log4j.appender.Console.layout = org.apache.log4j.PatternLayout  
  8. log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n  
  9. #文件大小到达指定尺寸的时候产生一个新的文件  
  10. log4j.appender.File = org.apache.log4j.RollingFileAppender  
  11. #指定输出目录  
  12. log4j.appender.File.File = logs/ssm.log  
  13. #定义文件最大大小  
  14. log4j.appender.File.MaxFileSize = 10MB  
  15. #输出所有日志,如果换成DEBUG表示输出DEBUG以上级别日志  
  16. log4j.appender.File.Threshold = ALL  
  17. log4j.appender.File.layout = org.apache.log4j.PatternLayout  
  18. log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n  

 

(4)JUnit测试

【1】创建测试用表user_t

Sql代码 
  1. DROP TABLE IF EXISTS `user_t`;  
  2.   
  3. CREATE TABLE `user_t` (  
  4.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  5.   `user_name` varchar(40) NOT NULL,  
  6.   `passwordvarchar(255) NOT NULL,  
  7.   `age` int(4) NOT NULL,  
  8.   PRIMARY KEY (`id`)  
  9. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;  
  10.   
  11. /*Data for the table `user_t` */  
  12. insert  into `user_t`(`id`,`user_name`,`password`,`age`) values (1,'Eric','123456',26);  

 

【2】利用MyBatis Generator自动生成代码

这个工具可以根据表自动创建实体类、MyBatis映射文件以及DAO接口。

如有需要,请参考:使用MyBatis Generator自动创建代码

 

【3】建立service接口和实现类

IUserService.java

Java代码 
  1. package com.eric.service;  
  2.   
  3. import com.eric.bean.User;  
  4.   
  5. public interface IUserService {  
  6.     public User getUserById(int userId);  
  7. }  

 

UserServiceImpl.java

Java代码 
  1. package com.eric.service.impl;  
  2.   
  3. import javax.annotation.Resource;  
  4. import org.springframework.stereotype.Service;  
  5. import com.eric.bean.User;  
  6. import com.eric.dao.UserMapper;  
  7. import com.eric.service.IUserService;  
  8.   
  9. @Service("userService")  
  10. public class UserServiceImpl implements IUserService {  
  11.     @Resource  
  12.     private UserMapper userDao;  
  13.   
  14.     @Override  
  15.     public User getUserById(int userId) {  
  16.         return this.userDao.selectByPrimaryKey(userId);  
  17.     }  
  18. }  

 

【4】建立测试类(src/test/java/TestMyBatis.java)

Java代码 
  1. import javax.annotation.Resource;  
  2. import org.apache.log4j.Logger;  
  3. import org.junit.Test;  
  4. import org.junit.runner.RunWith;  
  5. import org.springframework.test.context.ContextConfiguration;  
  6. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
  7. import com.alibaba.fastjson.JSON;  
  8. import com.eric.bean.User;  
  9. import com.eric.service.IUserService;  
  10.   
  11. @RunWith(SpringJUnit4ClassRunner.class)  
  12. @ContextConfiguration(locations = { "classpath:spring-mybatis.xml" })  
  13. public class TestMyBatis {  
  14.     private static Logger logger = Logger.getLogger(TestMyBatis.class);  
  15.   
  16.     @Resource  
  17.     private IUserService userService = null;  
  18.   
  19.     @Test  
  20.     public void test1() {  
  21.         User user = userService.getUserById(1);  
  22.         logger.info(JSON.toJSONString(user));  
  23.     }  
  24. }  

 

如果测试成功,表示Spring和MyBatis已经整合成功了。输出信息使用的是Log4j打印到控制台。

 

至此,就完成了Spring和MyBatis两大框架的整合,下面再继续进行Spring MVC的整合。

 

3、整合Spring MVC

(1)配置spring-mvc.xml

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:p="http://www.springframework.org/schema/p"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  7.   http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    
  8.   http://www.springframework.org/schema/context    
  9.   http://www.springframework.org/schema/context/spring-context-3.1.xsd    
  10.   http://www.springframework.org/schema/mvc    
  11.   http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">  
  12.   
  13.     <!-- 自动扫描该包,使Spring MVC认为包下用了@controller注解的类是控制器 -->  
  14.     <context:component-scan base-package="com.eric.controller" />  
  15.   
  16.     <!--避免IE执行AJAX时,返回JSON出现下载文件 -->  
  17.     <bean id="mappingJacksonHttpMessageConverter"  
  18.         class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
  19.         <property name="supportedMediaTypes">  
  20.             <list>  
  21.                 <value>text/html;charset=UTF-8</value>  
  22.             </list>  
  23.         </property>  
  24.     </bean>  
  25.   
  26.     <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->  
  27.     <bean  
  28.         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
  29.         <property name="messageConverters">  
  30.             <list>  
  31.                 <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 -->  
  32.             </list>  
  33.         </property>  
  34.     </bean>  
  35.   
  36.     <!-- 定义跳转的文件的前后缀,视图模式配置 -->  
  37.     <bean  
  38.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  39.         <property name="prefix" value="/WEB-INF/jsp/" />  
  40.         <property name="suffix" value=".jsp" />  
  41.     </bean>  
  42.   
  43.     <!-- 配置文件上传,如果没有使用文件上传可以不用配置,如果不配置,那么配置文件中也不必引入上传组件包 -->  
  44.     <bean id="multipartResolver"  
  45.         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  46.         <!-- 默认编码 -->  
  47.         <property name="defaultEncoding" value="utf-8" />  
  48.         <!-- 文件大小最大值 -->  
  49.         <property name="maxUploadSize" value="10485760000" />  
  50.         <!-- 内存中的最大值 -->  
  51.         <property name="maxInMemorySize" value="40960" />  
  52.     </bean>  
  53.   
  54. </beans>  

 

(2)配置web.xml

Xml代码 
  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"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
  5.     version="3.0">  
  6.     <display-name>Archetype Created Web Application</display-name>  
  7.   
  8.     <!-- Spring和mybatis的配置文件 -->  
  9.     <context-param>  
  10.         <param-name>contextConfigLocation</param-name>  
  11.         <param-value>classpath:spring-mybatis.xml</param-value>  
  12.     </context-param>  
  13.   
  14.     <!-- 编码过滤器 -->  
  15.     <filter>  
  16.         <filter-name>encodingFilter</filter-name>  
  17.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  18.         <async-supported>true</async-supported>  
  19.         <init-param>  
  20.             <param-name>encoding</param-name>  
  21.             <param-value>UTF-8</param-value>  
  22.         </init-param>  
  23.     </filter>  
  24.   
  25.     <filter-mapping>  
  26.         <filter-name>encodingFilter</filter-name>  
  27.         <url-pattern>/*</url-pattern>  
  28.     </filter-mapping>  
  29.   
  30.     <!-- Spring监听器 -->  
  31.     <listener>  
  32.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  33.     </listener>  
  34.   
  35.     <!-- 防止Spring内存溢出监听器 -->  
  36.     <listener>  
  37.         <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
  38.     </listener>  
  39.   
  40.     <!-- Spring MVC servlet -->  
  41.     <servlet>  
  42.         <servlet-name>SpringMVC</servlet-name>  
  43.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  44.         <init-param>  
  45.             <param-name>contextConfigLocation</param-name>  
  46.             <param-value>classpath:spring-mvc.xml</param-value>  
  47.         </init-param>  
  48.         <load-on-startup>1</load-on-startup>  
  49.         <async-supported>true</async-supported>  
  50.     </servlet>  
  51.     <servlet-mapping>  
  52.         <servlet-name>SpringMVC</servlet-name>  
  53.         <url-pattern>/</url-pattern>  
  54.     </servlet-mapping>  
  55.     <welcome-file-list>  
  56.         <welcome-file>/index.jsp</welcome-file>  
  57.     </welcome-file-list>  
  58.   
  59. </web-app>  

 

(3)测试

【1】新建jsp页面(showUser.jsp)

Java代码 
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  3. <html>  
  4.     <head>  
  5.         <title>测试</title>  
  6.     </head>  
  7.   
  8.     <body>${user.userName}:${user.age}</body>  
  9. </html>  

 

【2】建立UserController类

Java代码 
  1. package com.eric.controller;  
  2.   
  3. import javax.annotation.Resource;  
  4. import javax.servlet.http.HttpServletRequest;  
  5. import org.springframework.stereotype.Controller;  
  6. import org.springframework.ui.Model;  
  7. import org.springframework.web.bind.annotation.RequestMapping;  
  8. import com.eric.bean.User;  
  9. import com.eric.service.IUserService;  
  10.   
  11. @Controller  
  12. @RequestMapping("/user")  
  13. public class UserController {  
  14.     @Resource  
  15.     private IUserService userService;  
  16.   
  17.     @RequestMapping("/showUser")  
  18.     public String toIndex(HttpServletRequest request, Model model) {  
  19.         int userId = Integer.parseInt(request.getParameter("id"));  
  20.         User user = this.userService.getUserById(userId);  
  21.         model.addAttribute("user", user);  
  22.         return "showUser";  
  23.     }  
  24. }  

 

【3】访问http://localhost:8080/SSM/user/showUser?id=1

项目整体结构图

项目源码下载:Spring + Spring MVC + MyBatis整合项目

分享到:
评论
2 楼 zhaojin2012 2015-12-25  
由于我用intelij idea,maven没有将对应的mapper编译到classpath下面所以出现上面的错误,目前已经解决,好实例!支持一下楼主
1 楼 zhaojin2012 2015-12-25  
您好,启动抛出Caused by:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.eric.dao.UserMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}
是啥问题呢?

相关推荐

Global site tag (gtag.js) - Google Analytics