一种是通过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>
附图,引入映射器的方式