在前边阐述了单独使用mybatis的方法,在实际开发过程中mybatis经常和spring一起使用,即mybatis和spring进行集成,现在我们来看如何集成。

mybatis和spring进行集成需要用到集成包:mybatis-spring-1.1.1.jar,此包提供mybatis和spring集成的支持,把此包导入到项目的lib目录下。

我们先看mybatis单独使用的时候的过程,mybatis配置文件==》读取配置文件==》操作数据库,具体的使用方法可参照前两篇文章。

下面进行mybatis和spring的集成,

一、mybatis配置文件

在和spring做集成时mybatis的配置文件中有些配置不再需要了,spring会使用它自己的。如数据源,下面看下mybatis的配置文件,MybatisConfiguration.xml,

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <typeAliases>
<typeAlias alias="Message" type="com.cn.imooc.entity.Message"/>
</typeAliases>
<mappers>
<mapper resource="com/cn/mappers/message.xml"/>
</mappers>
</configuration>

上面的配置文件配置了别名和mappers映射文件,和之前的配置文件相比,可以看出没有了关于数据源的信息,这里在mybatis的配置文件中不再需要配置数据源,需要在spring的配置文件中配置。

二、spring配置文件

既然和spring做集成,那么必须导入spring的包,关于spring的包可以从前面的文章中获得;导入spring的包之后,就需要配置spring的配置文件,我们把spring的配置文件放在src下,名字为spring-application.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <bean id="address" class="com.cn.test.spring.Address"></bean> <!-- 引入jdbc配置文件 -->
<!--
<context:property-placeholder location="jdbc.properties"/>
-->
<!--1、创建jdbc数据源 -->
<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/weixin?useUnicode=true&amp;characterEncoding=UTF-8" />
<property name="username" value="root"/>
<property name="password" value="123456"/> </bean>
<!--2、sqlSessionFactoryBean-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:MybatisConfiguration.xml"></property>
<!--
<property name="mapperLocations" value="classpath:com/cn/mappers/message.xml"></property>
-->
</bean>
<bean id="messageMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.cn.inter.IMessageOperation" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> </beans>

首先,我们配置了一个数据源,这里如果引入了context的命名空间,可以使用<context:property-placeholder location="jdbc.properties"/>,引入src下的配置文件。

其次,配置了sqlSessionFactoryBean,这里使用sqlSessionFactoryBean生成sqlSessionFactory(在mybatis中sqlSessionFactory由sqlSessionFactoryBuilder生成)。要通过sqlSessionFactroyBean生成sqlSessionFactroy有以下几个属性,

dataSource  即刚才配置的数据源,指定生成sqlSessionFactory使用的数据源

configLocation  这个属性指定mybatis的配置文件的路径,在本例中我们使用了src下的MybatisConfiguration.xml,如果在此文件中配置了mappers映射文件,则不需要第三个属性,如果没配置映射文件则需要第三个属性;假如,在MybatisConfiguration.xml文件中没有配置映射文件,也没有配置mapperLocations属性,则映射文件必须必须和映射器类在同一个包下,且映射文件和映射器类必须名字相同。

mapperLocations  指定mappers映射文件,这个属性可以配置为一个list的值

最后,使用动态代理生成访问数据库的代码,MapperFactoryBean作为一个工厂类,可以用来生成访问数据库的动态代理,有两种方式可以生成一个动态代理,这里使用了mapperInterface和sqlSessionFactory两个属性,第一个指定映射器类的全限路径,第二个就是上面的sqlSessionFactory;另一种方式是使用注解的方式。

至此,spring的配置文件完成,可以进行测试,测试代码如下,

package com.cn.test.spring;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.cn.imooc.entity.Message;
import com.cn.inter.IMessageOperation; public class TestSpringAndMybatis { public static void main(String[] args) {
// TODO Auto-generated method stub //获得spring的配置
ClassPathXmlApplicationContext cpxac=new ClassPathXmlApplicationContext("spring-application.xml");
//获得IMessageOperation接口类
IMessageOperation imo=(IMessageOperation)cpxac.getBean("messageMapper"); Message m=imo.selectMessageById("2");
System.out.println(m); } }

上边完成了mybatis和spring集成的一种方式,我们会发现在生成代理的时候如果有多个映射器类,则需要配置多次,比较麻烦,下篇文章使用另一种方式。

有不正之处欢迎指正!

谢谢!

如何使用mybatis《三》的更多相关文章

  1. mybatis(二)执行CRUD操作的两种方式配置和注解

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

  2. 框架学习笔记之Mybatis(二)

    一.动态sql 通过mybatis提供的标签,实现sql语句的拼接. 1.where <select id="findUserList" parameterType=&quo ...

  3. Mybatis(二)入门程序-通过id查找用户、模糊查找用户、添加用户、删除用户

    根据下图myBatis的架构,创建一个使用MyBatis的工程.       一.配置MyBatis 环境(如图) 1.sqlMapConfig.xml 首先,导入jar包(上图右边)并加载路径,然后 ...

  4. Mybatis(二) 全局配置文件详解

    这节来说说全局配置文件的东西,非常简单.看一遍就懂了. --WH 一.全部配置内容 SqlMapConfig.xml的配置内容和顺序如下,顺序不能乱.现在来对这些属性的意思一一进行讲解. 二.prop ...

  5. Mybatis二(高级部分)

    1.输入映射和输出映射 a)        输入参数映射 b)        返回值映射 2.动态sql a)        If标签 b)        Where标签 c)        Sql片 ...

  6. mybatis二(参数处理和map封装及自定义resultMap)

    .单个参数 mybatis不会做特殊处理. #{参数名/任意名}:取出参数值. .多个参数 mybatis会做特殊处理. 多个参数会被封装成 一个map. key:param1...paramN,或者 ...

  7. 框架应用:Mybatis(二) - 动态SQL

    MybatisUtil工具类 在实际开发中,我们可以编写一个MybatisUtil辅助类来进行对进行操作. 1)在静态初始化块中加载mybatis配置文件和StudentMapper.xml文件一次 ...

  8. MyBatis(二):Select语句传递参数的集中方案

    从别人说的方案中看出,传递参数方案还挺多,不如自己整理下,以便以后使用过程中有个笔记回忆录. 1.传递一个参数的用法: 配置文件 <select id="getById" r ...

  9. 初识mybatis(二)

    上篇博客我们介绍通过Java代码来创建mybatis的配置文件,港真,这种方式看起来有意思实际在开发中用的并不多,mybatis的配置还是以xml配置为主,本文我们就来看看如何通过xml文件来配置my ...

  10. mybatis(二)

    一级缓存和二级缓存 mybatis一二级缓存测试实例: package com.atguigu.mybatis.test; import java.io.IOException; import jav ...

随机推荐

  1. 架构模式之REST架构

    直至今日,分布式系统(Distributed System)已经取得了大规模的应用,特别是Web的发展,已经给软件开发带来了翻天覆地的变化,这一点已经毋庸置疑了. 构建分布式系统常用的技术通常就是使用 ...

  2. WPF Litbox样式和模板

    1.在项目中使用ListBox时,经常会将ItemContainerStyle和ItemTemplate的作用搞混,ItemTemplate可以搞定一切好似ItemContainerStyle有点多余 ...

  3. Android 模拟器 获得 root权限

    启动一个模拟器,开始-运行-输入cmd,打开dos,依次输入 adb shell mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system ...

  4. 当碰到unix纪元问题时strtotime怎么转时间戳(DateTime类的使用方法)

    UNIX纪元时间又称POSIX时间/新纪元时间(Epoch Time):从协调世界时1970年1月1日0时0分0秒起到现在的总秒数,不包括闰秒.正值表示1970以後,负值则表示1970年以前. Uni ...

  5. 二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  6. ubuntu使用

    1主机名修改 在Ubuntu系统中永久修改主机名也比较简单.主机名存放在/etc/hostname文件中,修改主机名时,编辑hostname文件,在文件中输入新的主机名并保存该文件即可.

  7. Mina、Netty、Twisted一起学(四):定制自己的协议

    在前面的博文中,介绍一些消息分割的方案,以及MINA.Netty.Twisted针对这些方案提供的相关API.例如MINA的TextLineCodecFactory.PrefixedStringCod ...

  8. [OpenCV] Basic data types - Matrix

    http://docs.opencv.org/2.4.13/ Basis 矩形 "modules/core/src/drawing.cpp" CV_IMPL void cvRect ...

  9. [Math] A love of late toward Mathematics - how to learn it?

    Link: https://www.zhihu.com/question/19556658/answer/26950430     王小龙 ,数学,计算机视觉,图形图像处理 数学系博士怒答! 我想大家 ...

  10. vs2010安装和使用

    vs2010是之前我跟老师做网站项目时安装的,这次软件工程作业我就用它了,安装过程中的截图就不存在了,我就详细说说它的使用吧. VS2010软件挺大的,下载大概要一个多小时,安装过程大概都是下一步. ...