一種是通過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>
附圖,引入映射器的方式