Spring & Mybatis整合

Mybatis系列之Spring & Mybatis整合

引言

前面用了八篇博客简单的向大家介绍了Mybatis的基础知识及简单用例。了解了这些知识后,还差最后一招,我们就可以修炼好独孤九剑,进入到更高一层的武艺境界 --SSM(Spring + Spring MVC + Mybatis)开发阶段了。

关于Spring及Spring MVC的基础概念这里就不再赘述了。不了解的,大家可以通过度娘谷哥自行脑补。

 

开发环境

IDE: STS(Spring Tools Suite)官网网址:http://spring.io/tools/sts

Spring Framework: 3.1.1.RELEASE

Mybatis Version: 3.3.0

Mybatis-Spring: 1.2.3

创建Spring MVC项目

强烈推荐大家使用STS进行Spring项目的开发,她对Spring及Maven集存的非常好,轻松两步就可以创建一个Spring MVC项目:

  1. 点击新建按钮,在新建向导中选择Spring Project,点击下一步
  2. 选择Spring MVC Project,输入项目名称,点击完成

是不是很easy呀!项目创建好之后,还要完成一个动作,就是右击项目名称,选择Run As..菜单下的Maven Install,这样就可以把项目依赖的Jar包下载到本地了。新创建的项目目录结构如下图所示(请忽略src/main/Java目录下的包及文件,这是最终完成后的项目结构)。

 

引入Jar包

在Maven的项目管理文件pom.xml中加入以下依赖即可。

  1. <dependency>  
  2.     <groupId>org.springframework</groupId>  
  3.     <artifactId>spring-context</artifactId>  
  4.     <version>3.1.1 RELEASE</version>  
  5.     <exclusions>  
  6.         <!-- Exclude Commons Logging in favor of SLF4j -->  
  7.         <exclusion>  
  8.             <groupId>commons-logging</groupId>  
  9.             <artifactId>commons-logging</artifactId>  
  10.         </exclusion>  
  11.     </exclusions>  
  12. </dependency>  
  13. <dependency>  
  14.     <groupId>org.springframework</groupId>  
  15.     <artifactId>spring-webmvc</artifactId>  
  16.     <version>3.1.1 RELEASE</version>  
  17. </dependency>  
  18. <dependency>  
  19.     <groupId>mysql</groupId>  
  20.     <artifactId>mysql-connector-java</artifactId>  
  21.     <version>5.1.36</version>  
  22. </dependency>  
  23. <dependency>  
  24.     <groupId>org.springframework</groupId>  
  25.     <artifactId>spring-jdbc</artifactId>  
  26.     <version>4.2.1.RELEASE</version>  
  27.     <scope>compile</scope>  
  28. </dependency>  
  29. <dependency>  
  30.     <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId>   
  31.     <version>1.2.3</version>  
  32. </dependency>  
  33. <dependency>  
  34.     <groupId>org.mybatis</groupId>  
  35.     <artifactId>mybatis</artifactId>  
  36.     <version>3.3.0</version>  
  37. </dependency>  

Spring与Mybatis整合

将所需Jar包导入之后,就可以着手将Spring与Mybatis进行整合(请注意,这里是将Spring与Mybatis进行整合,现在还没有涉及到Spring MVC)。这里我们使用了JUnit,每做一次整合,我们都需要进行测试,以确保向前走的每一小步都是正确的。

我们在src/main/resources目录下创建一个名为spring-mybatis.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-3.0.xsd">  
  12.     <context:component-scan base-package="com.emerson.suzhou" />  
  13.   
  14.     <bean id="dataSource"  
  15.         class="org.springframework.jdbc.datasource.DriverManagerDataSource" >  
  16.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
  17.         <property name="url" value="jdbc:mysql://127.0.0.1:3306/your_database" />  
  18.         <property name="username" value="your_username" />  
  19.         <property name="password" value="your_password" />  
  20.     </bean>  
  21.       
  22.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  23.         <property name="dataSource" ref="dataSource" />  
  24.         <!-- 自动扫描mapping.xml文件 -->  
  25.         <property name="mapperLocations" value="classpath:com/emerson/suzhou/mapping/*.xml"></property>  
  26.         <propertynamepropertyname="configLocation"value="classpath:mybatis-config.xml"></property>  
  27.     </bean>  
  28.     <!-- DAO接口所在包名,Spring会自动查找其下的类 -->  
  29.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
  30.         <property name="basePackage" value="com.emerson.suzhou.dao" />  
  31.         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
  32.     </bean>  
  33.     <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->  
  34.     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  35.         <property name="dataSource" ref="dataSource" />  
  36.     </bean>  
  37. </beans>  
 在这个配置文件中,我们指定了:

 

  • 数据源:用于连接目标数据库
  • Spring扫描路径:会扫描指定路径下的所有Component,为后面的依赖注入做准备。如果我们需要对Mybatis进行一些特别设置,可以在这里指定配置文件的路径
  • 映射文件路径:Mybatis会在指定路径加下加载数据表是映射文件
  • Dao接口包名称:对应着每个数据表的映射文件,我们都会为其编写一个接口(请参见《Mybatis系列(六)接口式编程》)

ok,这个文件编写好之后,千万不要忘记在web.xml中指定spring-mybatis配置文件的位置!!这一步至关重要。否则在运行程序时会报出“creat bean error.....”的错误信息。

 

  1. <!-- spring-mybatis configuration file location -->  
  2.     <context-param>  
  3.         <param-name>contextConfigLocation</param-name>  
  4.         <param-value>classpath:spring-mybatis.xml</param-value>  
  5.     </context-param>  

补充一句,STS自动生成的web.xml文件已经指定了root-context.xml文件位置,我们也可以把spring-mybatis.xml文件的内容全部搬到root-context.xml文件中,这样就不用添加下面这段代码了。

 

之后,我们就可以测试一下Spring与Mybatis是否可以正确的整合在一起。我继续使用在《Mybatis系列之简单示例》中使用的数据库进行测试。

在scr/main/java创建如下包:

com.emerson.suzhou.controller:存放控制器(后面测试Spring MVC时使用)

com.emerson.suzhou.dao:存放与映射文件相对应的接口文件

com.emerson.suzhou.mapping:存放数据表映射文件

com.emerson.suzhou.pojo:存放数据表实体类

com.emerson.suzhou.service:用在Controller与Dao之间的Service接口文件

com.emerson.suzou.service.impl:Service接口实现

数据表实体类文件内容如下。

 

  1. package com.emerson.suzhou.pojo;  
  2.   
  3. import java.sql.Timestamp;  
  4.   
  5. public class User {  
  6.     /** 
  7.      *  
  8.      */  
  9.     private int userId;  
  10.   
  11.     /** 
  12.      *  
  13.      */  
  14.     private String userPassword;  
  15.       
  16.     /** 
  17.      *  
  18.      */  
  19.     private String userName;  
  20.   
  21.     /** 
  22.      *  
  23.      */  
  24.     private String nickName;  
  25.   
  26.     /** 
  27.      *  
  28.      */  
  29.     private String email;  
  30.   
  31.     /** 
  32.      *  
  33.      */  
  34.     private int isValid;  
  35.   
  36.     /** 
  37.      *  
  38.      */  
  39.     private Timestamp createdTime;  
  40.   
  41.     /** 
  42.      *  
  43.      */  
  44.     private Timestamp updateTime;  
  45.   
  46.         //setter , getter ...  
  47. }  
 数据表映射文件内容如下。请注意,这里使用名称空间,一定要与相应的接口文件全限定名一致!

 

 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4. <mapper namespace="com.emerson.suzhou.dao.IUserDao">  
  5.     <sql id="columns">user_id, user_name, user_password, nick_name, email,  
  6.         is_valid, created_time, update_time  
  7.     </sql>  
  8.   
  9.     <resultMap id="userResult" type="com.emerson.suzhou.pojo.User">  
  10.         <id property="userId" column="user_id" />  
  11.         <result property="userName" column="user_name" />  
  12.         <result property="userPassword" column="user_password" />  
  13.         <result property="nickName" column="nick_name" />  
  14.         <result property="email" column="email" />  
  15.         <result property="isValid" column="is_valid" />  
  16.         <result property="createdTime" column="created_time" />  
  17.         <result property="updateTime" column="update_time" />  
  18.     </resultMap>  
  19.   
  20.     <!-- 根据传入的Id值,到数据库中查询记录 -->  
  21.     <select id="getById" parameterType="int" resultMap="userResult">  
  22.         SELECT  
  23.         <include refid="columns"></include>  
  24.         FROM sys_user WHERE user_id = #{id}  
  25.     </select>  
  26. </mapper>  
接口文件。请注意,接口中定义的方法名称及参数,需要与映射文件中相应元素的id值相同。
  1. package com.emerson.suzhou.dao;  
  2.   
  3. import com.emerson.suzhou.pojo.User;  
  4.   
  5. public interface IUserDao {  
  6.       
  7.     public User getById(int id);  
  8.   
  9. }  
服务接口文件如下。
  1. package com.emerson.suzhou.service;  
  2.   
  3. import com.emerson.suzhou.pojo.User;  
  4.   
  5. public interface IUserService {  
  6.     public User getById(int id);  
  7. }  

 

服务接口实现文件如下。这里一定要使用Service注解标注。

  1. package com.emerson.suzhou.service.impl;  
  2.   
  3. import javax.annotation.Resource;  
  4.   
  5. import org.springframework.stereotype.Service;  
  6.   
  7. import com.emerson.suzhou.dao.IUserDao;  
  8. import com.emerson.suzhou.pojo.User;  
  9. import com.emerson.suzhou.service.IUserService;  
  10.   
  11. @Service("userService")  
  12. public class UserSerivceImpl implements IUserService {  
  13.       
  14.     @Resource  
  15.     private IUserDao dao;  
  16.   
  17.     @Override  
  18.     public User getById(int id) {  
  19.         return this.dao.getById(id);  
  20.     }  
  21. }  

这些准备工作完成之后,我们就可以开始编写测试代码了。在scr/test/java/下创建测试文件,内容如下。

  1. package com.emerson.suzhou;  
  2.   
  3. import static org.junit.Assert.*;  
  4.   
  5. import javax.annotation.Resource;  
  6.   
  7. import org.apache.log4j.Logger;  
  8. import org.junit.After;  
  9. import org.junit.Before;  
  10. import org.junit.Test;  
  11. import com.emerson.suzhou.pojo.User;  
  12. import com.emerson.suzhou.service.IUserService;  
  13.   
  14. public class TestMybatis {  
  15.       
  16.     private static Logger logger = Logger.getLogger(TestMybatis.class);  
  17.       
  18.     @Resource  
  19.     private IUserService userService = null;  
  20.   
  21.     @Before  
  22.     public void setUp() throws Exception {  
  23.     }  
  24.   
  25.     @After  
  26.     public void tearDown() throws Exception {  
  27.     }  
  28.   
  29.     @Test  
  30.     public void test() {  
  31.         assertNotNull(userService);  
  32.         User user = userService.getById(1);  
  33.         logger.info(user);  
  34.     }  
  35.   
  36. }  

如果在控制台看到数据表中查询到的内容输出,表示我们的配置是正确的。

 

目前,我们已经将Spring与Mybatis成功的整合在一起了,下面开始将Spring MVC也加入进来。

Spring MVC,来吧

STS在为我们创建Spring MVC项目时,已经自动生成了关于Spring MVC的配置文件,存放在src/main/webapp/WEB-INF/spring目录下,一个是root-context.xml,另一个是在其子目录appServlet下的servlet-context.xml。这两个配置文件的作用级别不同,一个是作用在事个项目上的,另一个则是仅作用在appServer上的(这个是由Spring MVC自动创建的一个Servlet,用于请求转发的,这一点从web.xml文件中就可以看出端倪)。

对于这两个文件,我们无需修改,可以直接使用。这就是我强烈推荐使用STS的原因之一。

接下来,我们要做的就是编写一个Controller测试一下。

  1. package com.emerson.suzhou.controller;  
  2.   
  3. import java.text.DateFormat;  
  4. import java.util.Date;  
  5. import java.util.Locale;  
  6.   
  7. import javax.annotation.Resource;  
  8.   
  9. import org.slf4j.Logger;  
  10. import org.slf4j.LoggerFactory;  
  11. import org.springframework.stereotype.Controller;  
  12. import org.springframework.ui.Model;  
  13. import org.springframework.web.bind.annotation.PathVariable;  
  14. import org.springframework.web.bind.annotation.RequestMapping;  
  15. import org.springframework.web.bind.annotation.RequestMethod;  
  16.   
  17. import com.emerson.suzhou.pojo.User;  
  18. import com.emerson.suzhou.service.IUserService;  
  19.   
  20. /** 
  21.  * Handles requests for the application home page. 
  22.  */  
  23. @Controller  
  24. public class HomeController {  
  25.       
  26.     private static final Logger logger = LoggerFactory.getLogger(HomeController.class);  
  27.       
  28.     @Resource  
  29.     private IUserService userService;  
  30.       
  31.     @RequestMapping(value = "showUser/{id}")  
  32.     public String showUser(@PathVariable int id, Model model) {  
  33.         User user = this.userService.getById(id);  
  34.         model.addAttribute("user", user);  
  35.         return "showUser";  
  36.     }  
  37.       
  38. }  

JSP文件如下。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>测试</title>
  </head>
  
  <body>
    ${user.toString()}
  </body>
</html>

 将项目发布到服务器上运行,地浏览器地址栏中输入http://localhost:8080/suzhou/showUser/1,如果页面中可以显示出从数据库中查询到的数据即为正确。

 

至此,SSM的框架已全部整合完毕。独孤九剑已融入到小伙伴的血液中了,余下的就看个人修炼了〜〜〜我只能帮你到这里了〜〜〜〜



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值