MapperFactoryBean是mybati-spring团队提供的一个用于根据mapper接口生成mapper对象的类。

在spring配置文件中可以配置以下参数:

1.mapperInterface:用于指定接口

2.sqlSessionFactory:用于指定SqlSessionFactory。

3.sqlSessionTemplate:用于指定SqlSessionTemplate。如果和sqlSessionFactory同时配置,则只会启用sqlSessionTemplate。

例如:

  1. /*
    * 客户持久化类
    */
  2.  
  3. public class Customer {
    private Integer id;
    private String username;
    private String jobs;
    private String phone;
        setter/getter
        toString()
    }
  1. CustomerMapper接口
  1. public interface CustomerMapper {
    public Customer findCustomerById(Integer id);
    }
    映射文件:namespace命名空间有包名加接口名
  1. <mapper namespace="com.itheima.po.mapper.CustomerMapper">
    <select id="findCustomerById" parameterType="Integer" resultType="customer">
    select * from t_customer where id=#{id}
    </select>
    </mapper>
    在applicationContext.xml中的配置
  1. <!--基于MapperFactoryBean开发-->
    <bean id="customerMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="com.itheima.po.mapper.CustomerMapper"/>
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
    在mybatis-config.xml中的配置
  1. <!--引入mapper文件位置-->
    <mappers>
    <mapper resource="com/itheima/po/mapper/CustomerMapper.xml"/>
    </mappers>
    测试
  1. public class FindCustomerByIdTest {
    @Test
    public void findCustomerById() {
    ApplicationContext applicationContex = new ClassPathXmlApplicationContext("applicationContext.xml");
    CustomerMapper customerMapper = applicationContex.getBean(CustomerMapper.class);
    Customer customer = customerMapper.findCustomerById(1);
    System.out.println(customer);
    }
    }
    结果:
    Customer{id=1, username='jason', jobs='java', phone='123456'}
    使用基于mapperFactoryBean来使mybatisspring的整合开发与传统的Dao方式开发相比,比较简单,没有重复代码,出错也更容易发现。
  2.  
  3. 使用mapper接口编程需要遵守以下编程规范:
    mapper接口编程方式只需要编写一个接口,然后由mybatis框架根据接口的定义创建接口的动态代理对象。
    1.mapper的接口名称和对应的mapper.xml映射文件的名称必须一致。
    2.mapper.xml文件中的namespacemapper接口的类路径相同(也就是接口文件和映射文件需要放在一个包中)。
    3.mapper接口中的方法名和mapper.xml中定义的每个执行语句的id相同。
    4.mapper接口中方法的输入参数类型要和mapper.xml中定义的每个sqlparameterType的类型相同。
    5.mapper接口方法的输出参数类型要和mapper.xml中定义的每个sqlresultType的类型相同。
  4.  
  5. 使用mapper接口开发虽然简单,但是有个问题就是,当接口过多,会导致映射文件也过多,这样配置文件就会显得比较杂乱和臃肿。
    这就要采用另外一种方式整合。基于MapperScannerConfigurer的整合可以解决这个问题。
  1.  

spring和mybatis的整合开发(基于MapperFactoryBean的整合开发(方便简单不复杂))的更多相关文章

  1. spring和mybatis的整合开发(基于MapperScannerConfigurer的整合开发(适用于复杂项目,接口较多的情况))

    在实际项目中,Dao层会包含很多接口,这样会导致spring配置文件过于臃肿.这时就需要采用扫描包的形式来配置mybaits中的映射器. 采用MapperScannerConfigurer来实现. M ...

  2. Spring+SpringMvc+Mybatis框架集成搭建教程三(框架整合测试程序开发)

    框架整合测试程序开发 (1).在mysql数据库中创建t_user表,sql语句如下 CREATE TABLE `t_user` ( `id` bigint(20) NOT NULL AUTO_INC ...

  3. java:Mybatis框架2(基于mapper接口的开发,多种查询,复合类型查询,resultMap定义,多表联查,sql片段)

    1.mybatis02: mybatis-config.xml: <?xml version="1.0" encoding="UTF-8"?> &l ...

  4. php 微信公众号+微商城开发 基于Thinkphp3.2框架开发

    说明:本教程是自己自学+自己的理解+扩展(包括学习过程中遇到的一些问题) 参考教程:麦子学院--李忠益--http://www.maiziedu.com/u/70409/ 微盟: http://www ...

  5. spring和mybatis的整合开发(传统Dao开发方式)

    spring和mybatis整合开发有三种整合方式1.传统DAO方式的开发整合(现在基本上不会用这种方式了,不推荐使用这种方式),2.mapper接口方式的开发整合(基于MapperFactoryBe ...

  6. 【SpringMVC学习04】Spring、MyBatis和SpringMVC的整合

    前两篇springmvc的文章中都没有和mybatis整合,都是使用静态数据来模拟的,但是springmvc开发不可能不整合mybatis,另外mybatis和spring的整合我之前学习mybati ...

  7. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

  8. 搭建Spring + SpringMVC + Mybatis框架之三(整合Spring、Mybatis和Spring MVC)

    整合Spring和SpringMVC 之前已经整合了spring和mybatis,现在在此基础上整合SSM. 项目目录: 思路:SpringMVC的配置文件独立,然后在web.xml中配置整合. (1 ...

  9. SSM框架——Spring+SpringMVC+Mybatis的搭建教程

    一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛. Spring作为一个轻量级的框架,有很多的拓展功能,最主要的我们一般项目使用的就是IOC和AOP. S ...

随机推荐

  1. 新建swap分区的规划、挂载和自动挂载示例

    注:来自Linux系统管理_磁盘分区和格式化的扩展 Linux系统管理_磁盘分区和格式化:http://murongqingqqq.blog.51cto.com/2902694/1361918 思路: ...

  2. cpu iowait高排查的case

    在之前的常见的Java问题排查方法一文中,没有写cpu iowait时的排查方法,主要的原因是自己之前也没碰到过什么cpu iowait高的case,很不幸的是在最近一周连续碰到了两起cpu iowa ...

  3. Vue-Router模式、钩子

    转:https://www.cnblogs.com/heioray/p/7193841.html 模式 vue-router中的模式选项主要在router实例化的时候进行定义的,如下 const ro ...

  4. typescript 学习笔记

    错的写法 枚举 错误写法 方法可选参 类 子类没有找父类

  5. [LeetCode] 3. 无重复字符的最长子串

    题目链接:(https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/) 题目描述: 给定一个字符 ...

  6. iOS开发基础-UITableView基本属性

    设置 UITableView 中 cell 的背景颜色. 示例1:通过 backgroundView 设置. UIView *view1 = [[UIView alloc] init]; view1. ...

  7. UIImagePickerController - 官方文档说明

    使用UIImagePickerController对象的步骤: 1)验证设备是否能从目标源获取内容,通过调用 + (BOOL)isSourceTypeAvailable:(UIImagePickerC ...

  8. OCR技术浅析-自写篇(2)

    本例仅以本人浅薄理解,妄想自制文字识别程序,实际在识别部分未有完善. <?php class readChar{ private $imgSize; //图片尺寸 private $imgGd2 ...

  9. linux的挂载含义

    Linux下,mount挂载的作用,就是将一个设备(通常是存储设备)挂接到一个已存在的目录上.访问这个目录就是访问该存储设备.linux操作系统将所有的设备都看作文件,它将整个计算机的资源都整合成一个 ...

  10. 为什么String被设计为不可变?是否真的不可变?

    1 对象不可变定义 不可变对象是指对象的状态在被初始化以后,在整个对象的生命周期内,不可改变. 2 如何不可变 通常情况下,在java中通过以下步骤实现不可变 对于属性不提供设值方法 所有的属性定义为 ...