当前位置: 首页 > 工具软件 > Mapper > 使用案例 >

Mapper映射器

赵越
2023-12-01

1. Mapper映射器是Mybatis中的核心工具,也是Mybatis的核心功能。通过映射器,我们可以自定义SQL语句,灵活的操作数据库,
 这也是Mybatis的特色所在。所以,熟练使用映射器是掌握Mybatis的核心。Mybatis映射器由mapper接口和mapper xml配置文件组成
 
2.我们之前采用的都是字符串的方式来指定我们的映射器,这种方式有哪些缺点,,比如你拼写的过程里有错误,编译期是无法识别的,只能运行时才能发现,如果明明空间发生变化,会导致很多地方需要修改,不易维护
 3.我们还可以使用getMapper方法,根据指定的映射器和映射文件最直接生成实现类,但是在集成开发环境里
 这并非是最佳的选择,我们可以利用mybatis-spring 提供的组件,可以不需要每次调用get方法,而是以配置的
 方式直接为业务对象注入映射器的实现,无需额外的编码。
 
第一种方式:
采用数据映射器(MapperFactoryBean)的方式完成对数据库操作
根据Mapper接口获取Mapper对象,它封装了原有的SqlSession.getMapper()功能的实现
 
 <!-- 配置DAO -->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="cn.kgc.dao.UserMapper"/>
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
 
 
第二种方式:为了解决第一种方式的问题
若映射器很多的话,相应的配置项也会很多,如何简化配置工作量?
MapperScannerConfigurer  类
自动扫描指定包下的Mapper接口,并将它们直接注册为MapperFactoryBean
 
MapperScannerConfigurer 与@Autowired注解或@Resource注解配合使用,自动创建映射器实现并注入给业务组件,能够最大限度地减少DAO组件与业务组件的编码和配置工作
@Service("userService")
public class UserServiceImpl implements UserService {
    @Autowired  // 或 @Resource
    private UserMapper userMapper;  //属性
    //……代码省略
}
 
 
 
  id可以省略,  默认是接口的名称  ,首字母小写
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
     <!-- 可以自动扫描  DAO 包下的接口-->
    <property name="basePackage" value="cn.kgc.dao" />
</bean>
<!-- 配置扫描注解定义的业务Bean -->
<context:component-scan base-package="cn.kgc.service" />
 
 
配置事物管理器(xml)
     <!-- 定义事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
</bean>
 <!-- 配置事务管增强 -->
<!-- 配置事务管增强 需要指定一个事物管理器-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="find*" propagation="SUPPORTS" />
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="del*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>
<!-- 定义切面 -->
 
<aop:config>
     <!-- 定义切入点,及切入点的表达式   和id --> 
        <aop:pointcut id="serviceMethod"
            expression="execution(* cn.kgc.service..*.*(..))" />
       <!-- 把增强的引用和切入点的引用组合起来-->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
    </aop:config>
 
 
 
 
 

 类似资料: