根据官方的说法,在ibatis3,也就是Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持。因此由Mybatis社区自己开发了一个Mybatis-Spring用来满足Mybatis用户整合Spring的需求。下面就将通过Mybatis-Spring来整合Mybatis跟Spring的用法做一个简单的介绍。

MapperFactoryBean

       首先,我们需要从Mybatis官网上下载Mybatis-Spring的jar包添加到我们项目的类路径下,当然也需要添加Mybatis的相关jar包和Spring的相关jar包。我们知道在Mybatis的所有操作都是基于一个SqlSession的,而SqlSession是由SqlSessionFactory来产生的,SqlSessionFactory又是由SqlSessionFactoryBuilder来生成的。但是Mybatis-Spring是基于SqlSessionFactoryBean的。在使用Mybatis-Spring的时候,我们也需要SqlSession,而且这个SqlSession是内嵌在程序中的,一般不需要我们直接访问。SqlSession也是由SqlSessionFactory来产生的,但是Mybatis-Spring给我们封装了一个SqlSessionFactoryBean,在这个bean里面还是通过SqlSessionFactoryBuilder来建立对应的SqlSessionFactory,进而获取到对应的SqlSession。通过SqlSessionFactoryBean我们可以通过对其指定一些属性来提供Mybatis的一些配置信息。所以接下来我们需要在Spring的applicationContext配置文件中定义一个SqlSessionFactoryBean。

Xml代码 复制代码 收藏代码
.<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
. <property name="dataSource" ref="dataSource" />
. <property name="mapperLocations"
. value="classpath:com/tiantian/ckeditor/mybatis/mappers/*Mapper.xml" />
. <property name="typeAliasesPackage" value="com.tiantian.ckeditor.model" />
.</bean> 在定义SqlSessionFactoryBean的时候,dataSource属性是必须指定的,它表示用于连接数据库的数据源。当然,我们也可以指定一些其他的属性,下面简单列举几个:
• mapperLocations:它表示我们的Mapper文件存放的位置,当我们的Mapper文件跟对应的Mapper接口处于同一位置的时候可以不用指定该属性的值。
•configLocation:用于指定Mybatis的配置文件位置。如果指定了该属性,那么会以该配置文件的内容作为配置信息构建对应的SqlSessionFactoryBuilder,但是后续属性指定的内容会覆盖该配置文件里面指定的对应内容。
• typeAliasesPackage:它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。多个package之间可以用逗号或者分号等来进行分隔。
• typeAliases:数组类型,用来指定别名的。指定了这个属性后,Mybatis会把这个类型的短名称作为这个类型的别名,前提是该类上没有标注@Alias注解,否则将使用该注解对应的值作为此种类型的别名。 Xml代码 复制代码 收藏代码
.<property name="typeAliases">
. <array>
. <value>com.tiantian.mybatis.model.Blog</value>
. <value>com.tiantian.mybatis.model.Comment</value>
. </array>
.</property> • plugins:数组类型,用来指定Mybatis的Interceptor。
• typeHandlersPackage:用来指定TypeHandler所在的包,如果指定了该属性,SqlSessionFactoryBean会自动把该包下面的类注册为对应的TypeHandler。多个package之间可以用逗号或者分号等来进行分隔。
• typeHandlers:数组类型,表示TypeHandler。 接下来就是在Spring的applicationContext文件中定义我们想要的Mapper对象对应的MapperFactoryBean了。通过MapperFactoryBean可以获取到我们想要的Mapper对象。MapperFactoryBean实现了Spring的FactoryBean接口,所以MapperFactoryBean是通过FactoryBean接口中定义的getObject方法来获取对应的Mapper对象的。在定义一个MapperFactoryBean的时候有两个属性需要我们注入,一个是Mybatis-Spring用来生成实现了SqlSession接口的SqlSessionTemplate对象的sqlSessionFactory;另一个就是我们所要返回的对应的Mapper接口了。 定义好相应Mapper接口对应的MapperFactoryBean之后,我们就可以把我们对应的Mapper接口注入到由Spring管理的bean对象中了,比如Service bean对象。这样当我们需要使用到相应的Mapper接口时,MapperFactoryBean会从它的getObject方法中获取对应的Mapper接口,而getObject内部还是通过我们注入的属性调用SqlSession接口的getMapper(Mapper接口)方法来返回对应的Mapper接口的。这样就通过把SqlSessionFactory和相应的Mapper接口交给Spring管理实现了Mybatis跟Spring的整合。 Spring的applicationContext.xml配置文件: 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: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.0.xsd
. http://www.springframework.org/schema/context
. http://www.springframework.org/schema/context/spring-context-3.0.xsd
. http://www.springframework.org/schema/mvc
. http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
. <context:component-scan base-package="com.tiantian.mybatis"/>
. <context:property-placeholder location="classpath:config/jdbc.properties"/>
. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
. destroy-method="close">
. <property name="driverClassName" value="${jdbc.driver}" />
. <property name="url" value="${jdbc.url}" />
. <property name="username" value="${jdbc.username}" />
. <property name="password" value="${jdbc.password}" />
. </bean>
.
. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
. <property name="dataSource" ref="dataSource" />
. <property name="mapperLocations" value="classpath:com/tiantian/mybatis/mapper/*.xml"/>
. <property name="typeAliasesPackage" value="com.tiantian.mybatis.model" />
. </bean>
.
. <bean id="blogMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
. <property name="mapperInterface"
. value="com.tiantian.mybatis.mapper.BlogMapper" />
. <property name="sqlSessionFactory" ref="sqlSessionFactory" />
. </bean>
.
.</beans> BlogMapper.xml文件: Xml代码 复制代码 收藏代码
.<?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.tiantian.mybatis.mapper.BlogMapper">
.<!-- 新增记录 -->
. <insert id="insertBlog" parameterType="Blog" useGeneratedKeys="true" keyProperty="id">
. insert into t_blog(title,content,owner) values(#{title},#{content},#{owner})
. </insert>
.<!-- 查询单条记录 -->
. <select id="selectBlog" parameterType="int" resultMap="BlogResult">
. select * from t_blog where id = #{id}
. </select>
.<!-- 修改记录 -->
. <update id="updateBlog" parameterType="Blog">
. update t_blog set title = #{title},content = #{content},owner = #{owner} where id = #{id}
. </update>
.<!-- 查询所有记录 -->
. <select id="selectAll" resultType="Blog">
. select * from t_blog
. </select>
.<!-- 删除记录 -->
. <delete id="deleteBlog" parameterType="int">
. delete from t_blog where id = #{id}
. </delete>
.
.</mapper>

下载源码 利用上面的方法进行整合的时候,我们有一个Mapper就需要定义一个对应的MapperFactoryBean,当我们的Mapper比较少的时候,这样做也还可以,但是当我们的Mapper相当多时我们再这样定义一个个Mapper对应的MapperFactoryBean就显得速度比较慢了。为此Mybatis-Spring为我们提供了一个叫做MapperScannerConfigurer的类,通过这个类Mybatis-Spring会自动为我们注册Mapper对应的MapperFactoryBean对象。

如果我们需要使用MapperScannerConfigurer来帮我们自动扫描和注册Mapper接口的话我们需要在Spring的applicationContext配置文件中定义一个MapperScannerConfigurer对应的bean。对于MapperScannerConfigurer而言有一个属性是我们必须指定的,那就是basePackage。basePackage是用来指定Mapper接口文件所在的基包的,在这个基包或其所有子包下面的Mapper接口都将被搜索到。多个基包之间可以使用逗号或者分号进行分隔。

Mybatis整合Spring的更多相关文章

  1. mybatis整合spring 之 基于接口映射的多对一关系

    转载自:http://my.oschina.net/huangcongmin12/blog/83731 mybatis整合spring 之  基于接口映射的多对一关系. 项目用到俩个表,即studen ...

  2. mybatis整合spring获取配置文件信息出错

    描述:mybatis整合spring加载jdbc.properties文件,然后使用里面配置的值来 配置数据源,后来发现用户变成了admin- jdbc.properties的配置: 加载配置: 报错 ...

  3. JAVAEE——Mybatis第二天:输入和输出映射、动态sql、关联查询、Mybatis整合spring、Mybatis逆向工程

    1. 学习计划 1.输入映射和输出映射 a) 输入参数映射 b) 返回值映射 2.动态sql a) If标签 b) Where标签 c) Sql片段 d) Foreach标签 3.关联查询 a) 一对 ...

  4. Mybatis整合Spring -- typeAliasesPackage

    Mybatis整合Spring 根据官方的说法,在ibatis3,也就是Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持. 因此由M ...

  5. 160330、Mybatis整合Spring

    转自csdn文章 http://haohaoxuexi.iteye.com/blog/1843309 Mybatis整合Spring 根据官方的说法,在ibatis3,也就是Mybatis3问世之前, ...

  6. (转)MyBatis框架的学习(六)——MyBatis整合Spring

    http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...

  7. 不需要怎么修改配置的Mybatis整合Spring要点

    首先对于Mybatis的主配置文件,只需要修改一处地方,将事务交给Spring管理,其它地方可以原封不动. <?xml version="1.0" encoding=&quo ...

  8. Mybatis整合spring(适合小白)

    目录 1.整合思路 2.整合需要的jar包 3.整合的步骤 4.Dao的开发的两种实现方式 6.Dao的开发的实现方式总结图 @ Mybatis整合spring其实就是SSM框架中SM的整合集成. 1 ...

  9. Mybatis整合spring详细教程(适合小白童鞋)

    目录 1.整合思路 2.整合需要的jar包 3.整合的步骤 4.Dao的开发的两种实现方式 6.Dao的开发的实现方式总结图 @ Mybatis整合spring其实就是SSM框架中SM的整合集成. 1 ...

  10. JavaWeb_(Mybatis框架)MyBatis整合Spring框架

    MyBatis + Spring整合开发 a)使用Spring容器用单例模式管理Mybatis的sqlSessionFactory:b)使用Spring管理连接池.数据源等:c)将Dao/Mapper ...

随机推荐

  1. Kooboo CMS - Html.FrontHtml.Position 详解

    DataContract 数据契约 http://www.cnblogs.com/Gavinzhao/archive/2010/06/01/1748736.html https://msdn.micr ...

  2. C#对SQL Server数据库的备份与还原

    备份数据库: string connectionString = "server=服务器名称;database=数据库名;uid=登入名;pwd=登入密码";         // ...

  3. 关于replace()方法中第二个参数的转义问题

    如果你想通过Javascript代码在网页中呈现 \ 字符,则在JS代码中你必须输入两个反斜杠 \\,否则会报错.比如: var a = "\"; alert(a); //chro ...

  4. RDD、DataFrame和DataSet的区别

    原文链接:http://www.jianshu.com/p/c0181667daa0 RDD.DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同. RDD ...

  5. Spring-AOP实践 - 统计访问时间

    公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为S ...

  6. CloudNotes之桌面客户端篇:增强的笔记列表

    今天,我发布了CloudNotes的一个更新版本:1.0.5484.36793.这个版本与1.0.5472.20097不同的是,它拥有增强的笔记列表,与之前单调的列表系统相比,新的笔记列表不仅可以显示 ...

  7. JavaScript作用域链

    之前写过一篇JavaScript 闭包究竟是什么的文章理解闭包,觉得写得很清晰,可以简单理解闭包产生原因,但看评论都在说了解了作用域链和活动对象才能真正理解闭包,起初不以为然,后来在跟公司同事交流的时 ...

  8. 放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~)

    放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~) 笔者声明:只用于学习交流,不用于其他途径.源代码已上传github.githu地址:https://github.com/Erma-Wa ...

  9. 无法为目标平台“Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider”创建扩展管理器

    很久没写博客了,这段时间情绪不那么稳定,还是心态的问题... 就简单写个问题的解决方法吧,其实最近遇到的问题蛮多的,就拿这个解决过后又遇到的来写吧. 正如标题一样:VS2013 无法为目标平台“Mic ...

  10. 从零开始学Python08作业源码:开发简单的FTP(仅供参考)

    服务器端:server_server.py #!usr/bin/env python # -*- coding:utf-8 -*- # auther:Mr.chen # 描述: import sock ...