prignMVC+myBatis整合—— 基于MapperFactoryBean
学习本节内容请先看"MyBatis的基本应用"。地址:http://lydia-fly.iteye.com/admin/blogs/2152948
Spring与MyBatis整合需要引入mybatis-spring.jar文件包。
其提供了与整合相关的API:
SqlSessionFactoryBean
--为整合应用提供SqlSession对象资源
MapperFactoryBean
--根据指定的Mapper接口生成Bean实例
MapperScannerConfigurer
--根据指定包批量扫描Mapper接口并生成实例
SqlSessionFactoryBean:
在单独使用MyBatis时,所有操作都是围绕SqlSession展开的,SqlSession是通过SqlSessionFactory获取的,SqlSessionFactory又是通过SqlSessionFactoryBuilder创建生成的。
在SpringMvc+MyBatis整合时,同样需要SqlSession。SqlSessionFactoryBean这个组件通过原来的SqlSessionFactoryBuilder生成SqlSessionFactory对象,为整合应用提供SqlSession对象。
- <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
- <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
- <property name="username" value="jsd1403" />
- <property name="password" value="root" />
- </bean>
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="myDataSource" />
- <property name="mapperLocations" value="classpath:com/lydia/entity/*.xml" />
- </bean>
MapperFactoryBean:
其作用是根据Mapper接口获取我们想要的Mapper对象,它封装了原有的session.getMapper()功能的实现。
在定义MapperFactoryBean时,需要注入一下两个属性:
--SqlSessionFactoryBean对象,用于提供SqlSession
--要返回Mapper对象的Mapper接口
MapperFactoryBean配置如下:
- <!-- 方法一:定义mapper -->
- <bean id="deptMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
- <property name="mapperInterface" value="com.lydia.entity.DeptMapper"></property>
- <!-- 指定SqlSessionFactoryBean对象 -->
- <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
- </bean>
MapperScannerConfigurer配置使用:
注意:使用MapperFactoryBean时,当有一个Mapper(可以理解为表对应的映射文件)就MapperFactoryBean,当mapper少数可以通过applicationContext配置文件,通过id获取。
如果大量的mapper,需要使用mybatis-spring.jar通过的MapperScannerConfigurer组件,通过这个组件可以自动扫描指定包下的各个Mapper接口,并注册对应的MapperFactoryBean对象。
把之前的MapperFactoryBean的配置注释掉,换成如下配置依然执行通过:
- <!--方法2:
- 可以把扫描到的Mapper接口变成Mapper对象-->
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <!--指定要扫描包: 多个包用逗号隔开 -->
- <property name="basePackage" value="com.lydia,com.tarena" />
- <!--指定sqlSessionFactory -->
- <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
- </bean>
注意:上面sqlSessionFactory属性也可以不用指定,默认会以Autowired方式注入。
如果指定的某个包下并不完全是我们定义的Mapper接口,我们也可以通过自定义注解的方式指定生成MapperFactoryBean对象。
配置如下:
- <!--方法3:
- 只要Mapper类前面加上@MyBatisRepository 这个自己指定的注解就OK-->
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <property name="basePackage" value="com.lydia" />
- <property name="annotationClass" value="com.lydia.annotation.MyBatisRepository" />
- </bean>
自定义注解:MyBatisRepository.java
- public @interface MyBatisRepository {
- }
在DeptMapper接口中使用:
- //@Repository("deptMapper")
- @MyBatisRepository
- public interface DeptMapper {
- void addDept(Dept dept);
- void deleteDept(Dept dept);
- void updateDept(Dept dept);
- ......
- }
测试:
- public class TestCase {
- @Test
- public void testFindAll() throws Exception {
- String conf = "applicationContext.xml";
- ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
- //获取对应的mapper对象,并调用mapper接口中对应的方法
- DeptMapper mapper = ac.getBean("deptMapper", DeptMapper.class);
- List<Dept> lists = mapper.findAllDept();
- for (Dept dept : lists) {
- System.out.println(dept);
- }
- }
- }
prignMVC+myBatis整合—— 基于MapperFactoryBean的更多相关文章
- spring与mybatis整合(基于配置文件)
本文主要介绍了如何将mybatis和spring整合在一起使用,本人使用的是mybatis3.05 + spring3.1.0M2 ,使用dbcp作为数据库连接池. 1.编写数据访问接口(UserDa ...
- spring和mybatis的整合开发(基于MapperFactoryBean的整合开发(方便简单不复杂))
MapperFactoryBean是mybati-spring团队提供的一个用于根据mapper接口生成mapper对象的类. 在spring配置文件中可以配置以下参数: 1.mapperInterf ...
- mybatis整合spring 之 基于接口映射的多对一关系
转载自:http://my.oschina.net/huangcongmin12/blog/83731 mybatis整合spring 之 基于接口映射的多对一关系. 项目用到俩个表,即studen ...
- Mybatis整合Spring
根据官方的说法,在ibatis3,也就是Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持.因此由Mybatis社区自己开发了一个My ...
- Mybatis学习--spring和Mybatis整合
简介 在前面写测试代码的时候,不管是基于原始dao还是Mapper接口开发都有许多的重复代码,将spring和mybatis整合可以减少这个重复代码,通过spring的模板方法模式,将这些重复的代码进 ...
- Mybatis整合Spring -- typeAliasesPackage
Mybatis整合Spring 根据官方的说法,在ibatis3,也就是Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持. 因此由M ...
- 160330、Mybatis整合Spring
转自csdn文章 http://haohaoxuexi.iteye.com/blog/1843309 Mybatis整合Spring 根据官方的说法,在ibatis3,也就是Mybatis3问世之前, ...
- (转)MyBatis框架的学习(六)——MyBatis整合Spring
http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...
- Spring+springmvc+Mybatis整合案例 annotation版(myeclipse)详细版
Spring+springmvc+Mybatis整合案例 Version:annotation版 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version=&qu ...
随机推荐
- stream的groupby出来的map是有顺序的map
stream分组后的map是有序map List<RedisInstanceTypeDto> typeDtoList = ModuleHelper.mapAll(redisInstance ...
- zookeeper命令行练习,熟练节点权限, 数组越界异常解决方案
https://www.cnblogs.com/qlqwjy/p/10517231.html zookeeper 创建持久有序节点时候报错,我的版本号是3.4.12, 亲测有效 https://blo ...
- java后端知识点梳理——MySQL
MySQL的索引 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息,就像一本书的目录一样,可以加快查询速度.InnoDB 存储引擎的索引模型底层实现数据结构为 ...
- RF中在测试用例集上设置标签
1.有时候我们在执行测试用例时只想执行部分测试用例集下面的测试用例,这时可以在相应的测试用例集中设置标签,然后运行时选择标签执行对应的测试用例 语法: *** Settings *** Force T ...
- 【NX二次开发】获取对象边界包容盒的三个函数UF_MODL_ask_bounding_box
今天看到胡工对bounding_box的分享,我也来测试一番(原帖地址:https://www.ugapi.com/thread-10287.html) 获取对象的边界盒子的三个函数: 1 UF_MO ...
- Pipeline模式与Factory+Provider模式的应用
前言 我正在写FastGithub这个小麻雀项目,里面主要涉及了Pipeline模式和Factory+Provider模式,这两种设计模式,让这个项目在"ip扫描"和"i ...
- 深入理解Faiss 原理&源码 (一) 编译
目录 深入理解Faiss 原理&源码 (一) 编译 mac下安装 安装mac xcode工具包 安装 openblas 安装swig 安装libomp 编译faiss 附录 深入理解Faiss ...
- Spring Cloud Data Flow整合UAA使用外置数据库和API接口
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 之前的文章<Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制 ...
- xshell连接时报错:Could not connect to '192.168.2.125' (port 22): Connection failed.
解决思路: 1.首先用主机ping下虚拟机IP,看是否能ping通 2.如果ping不通就看虚拟机防火墙是否开启,service iptables status [root@mysql ~]# ser ...
- 解决使用gomod后goland导包报红问题
解决使用gomod后goland导包报红问题 项目环境: ubuntu14+goland 问题详情: 在root用户下执行go mod init {module name}使用了gomod,并编译了项 ...