Mybatis中映射器实现方式总结

时间:2023-01-29 15:57:21

一种是通过XML文件方式(由一个java接口和一个XML文件构成)

RoleMapper rm = session.getMapper(RoleMapper.class);
List<Role> roleList = rm.readAll();

 

二种是通过java注解方式(直接在java接口里写注解配置sql,需要addMapper(xxMapper.class)显式注册映射类)

session.addMapper(RoleMapper.class);
RoleMapper rm = session.getMapper(RoleMapper.class);
List<Role> roleList = rm.readAll();

 

 

三种其实是iBatis遗留的通过 "命名空间(namespace)+SQL id"的方式发送SQL并返回数据的方式,只要有一个XML文件,而不需要去获取映射器

String statement = "cn.zdp.mapping.roleMapper.getRole";// 映射sql的标识字符串
Role role = session.selectOne(statement, 6);

 

 总结就是一、三都需要XML文件,二不需要XML文件

一、二需要java接口,三不需要java接口

那么我们还用通过头两种方式搞个接口吗,答案是肯定的,通过接口可以进一步屏蔽SqlSession这个对象,降低耦合。也是MyBatis比iBatis升级的地方。

那么干脆通过方式二直接注解sql配置到接口也省了XML文件了,但是貌似sql写到java代码里不能实现分离功能了。这个就看实际需求是简单还是分离了。

 

SpringMVC+MyBatis的话更方便了,mybatis-spring可以将mapper接口自动生成代理

在applicationContext中配置Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.baseapp.dao"/>
</bean>

 

 

附图,引入映射器的方式

Mybatis中映射器实现方式总结

Mybatis中映射器实现方式总结