设为首页 收藏本站
查看: 806|回复: 0

[经验分享] Mybatis系列(九)Spring & Mybatis整合

[复制链接]

尚未签到

发表于 2016-11-24 07:30:43 | 显示全部楼层 |阅读模式
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项目:


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


DSC0000.jpg  


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

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.1.1 RELEASE</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.1.1 RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.1.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
Spring与Mybatis整合
  将所需Jar包导入之后,就可以着手将Spring与Mybatis进行整合(请注意,这里是将Spring与Mybatis进行整合,现在还没有涉及到Spring MVC)。这里我们使用了JUnit,每做一次整合,我们都需要进行测试,以确保向前走的每一小步都是正确的。
  我们在src/main/resources目录下创建一个名为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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans  
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
http://www.springframework.org/schema/context  
http://www.springframework.org/schema/context/spring-context-3.1.xsd  
http://www.springframework.org/schema/mvc  
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan base-package="com.emerson.suzhou" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/your_database" />
<property name="username" value="your_username" />
<property name="password" value="your_password" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/emerson/suzhou/mapping/*.xml"></property>
<propertyname="configLocation"value="classpath:mybatis-config.xml"></property>
</bean>
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.emerson.suzhou.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
 在这个配置文件中,我们指定了:

  • 数据源:用于连接目标数据库
  • Spring扫描路径:会扫描指定路径下的所有Component,为后面的依赖注入做准备。如果我们需要对Mybatis进行一些特别设置,可以在这里指定配置文件的路径
  • 映射文件路径:Mybatis会在指定路径加下加载数据表是映射文件
  • Dao接口包名称:对应着每个数据表的映射文件,我们都会为其编写一个接口(请参见《Mybatis系列(六)接口式编程》)
  ok,这个文件编写好之后,千万不要忘记在web.xml中指定spring-mybatis配置文件的位置!!这一步至关重要。否则在运行程序时会报出“creat bean error.....”的错误信息。

<!-- spring-mybatis configuration file location -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mybatis.xml</param-value>
</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接口实现
  数据表实体类文件内容如下。

package com.emerson.suzhou.pojo;
import java.sql.Timestamp;
public class User {
/**
*
*/
private int userId;
/**
*
*/
private String userPassword;
/**
*
*/
private String userName;
/**
*
*/
private String nickName;
/**
*
*/
private String email;
/**
*
*/
private int isValid;
/**
*
*/
private Timestamp createdTime;
/**
*
*/
private Timestamp updateTime;
//setter , getter ...
}

 数据表映射文件内容如下。请注意,这里使用名称空间,一定要与相应的接口文件全限定名一致!
<?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.emerson.suzhou.dao.IUserDao">
<sql id="columns">user_id, user_name, user_password, nick_name, email,
is_valid, created_time, update_time
</sql>
<resultMap id="userResult" type="com.emerson.suzhou.pojo.User">
<id property="userId" column="user_id" />
<result property="userName" column="user_name" />
<result property="userPassword" column="user_password" />
<result property="nickName" column="nick_name" />
<result property="email" column="email" />
<result property="isValid" column="is_valid" />
<result property="createdTime" column="created_time" />
<result property="updateTime" column="update_time" />
</resultMap>
<!-- 根据传入的Id值,到数据库中查询记录 -->
<select id="getById" parameterType="int" resultMap="userResult">
SELECT
<include refid="columns"></include>
FROM sys_user WHERE user_id = #{id}
</select>
</mapper>


接口文件。请注意,接口中定义的方法名称及参数,需要与映射文件中相应元素的id值相同。

package com.emerson.suzhou.dao;
import com.emerson.suzhou.pojo.User;
public interface IUserDao {
public User getById(int id);
}

服务接口文件如下。

package com.emerson.suzhou.service;
import com.emerson.suzhou.pojo.User;
public interface IUserService {
public User getById(int id);
}

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

package com.emerson.suzhou.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.emerson.suzhou.dao.IUserDao;
import com.emerson.suzhou.pojo.User;
import com.emerson.suzhou.service.IUserService;
@Service("userService")
public class UserSerivceImpl implements IUserService {
@Resource
private IUserDao dao;
@Override
public User getById(int id) {
return this.dao.getById(id);
}
}

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

package com.emerson.suzhou;
import static org.junit.Assert.*;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.emerson.suzhou.pojo.User;
import com.emerson.suzhou.service.IUserService;
public class TestMybatis {
private static Logger logger = Logger.getLogger(TestMybatis.class);
@Resource
private IUserService userService = null;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void test() {
assertNotNull(userService);
User user = userService.getById(1);
logger.info(user);
}
}

  如果在控制台看到数据表中查询到的内容输出,表示我们的配置是正确的。
  目前,我们已经将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测试一下。

package com.emerson.suzhou.controller;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.emerson.suzhou.pojo.User;
import com.emerson.suzhou.service.IUserService;
/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@Resource
private IUserService userService;
@RequestMapping(value = "showUser/{id}")
public String showUser(@PathVariable int id, Model model) {
User user = this.userService.getById(id);
model.addAttribute("user", user);
return "showUser";
}
}

  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的框架已全部整合完毕。独孤九剑已融入到小伙伴的血液中了,余下的就看个人修炼了〜〜〜我只能帮你到这里了〜〜〜〜

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-304620-1-1.html 上篇帖子: Mybatis系列(九)Spring & Mybatis整合 下篇帖子: 构建Mybatis项目(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表