Mybatis-Spring整合Mapper代理开发

1.MapperFactoryBean 生成 mapper代理的方式

在mybatis-spring.xml添加一个bean

    MapperFactoryBean是mapper接口生成代理 ,此方法配置mapper的话,有几个mapper.xml就得写几个bean标签,比较麻烦。
    在mybatis-spring.xml <beans></beans> 中增加下面代码
        <bean id="ordersMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
            <!-- mapperInterface是mybatis-spring.jar 中  MapperFactoryBean类中 的mapperInterface接口属性 -->
            <property name="mapperInterface"  value="com.shao.ssm.mapper.OrdersMapper"/>
            <property name="sqlSessionFactory" ref="sqlSessionFactory" />
            <!-- 是为了自动注入SqlSessionFactory ,ref="sqlSessionFactory 是引用了上面配置的sqlSessionFactoryBean 的id"-->
        </bean>
  1. id=”ordersMapper” 意味 定义了此mapper接口生成代理 的id为‘ordersMapper’ ,在service类中调用时需要通过id来获取该bean。

  2. mapperInterface 是org.mybatis.spring.mapper.MapperFactoryBean.java 类中的一个mapper类型的接口属性,赋予它的value是某个mapper.java的权限定名。

  3. name = “sqlSessionFactory” 中sqlSessionFactory是org.mybatis.spring.mapper.MapperFactoryBean.java 类中的一个属性, 他的 ref=”sqlSessionFactory” 是参照绑定了org.mybatis.spring.SqlSessionFactoryBean 配置bean的id名称, 其也是在此文件中定义的 如下

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <!-- 加载mybatis的配置文件 -->
         <property name="configLocation"  value="mybatis/SqlMapConfig.xml" />
         <!-- 关联上边配置的dataSource -->
         <property name="dataSource" ref="dataSource" />
    </bean>
    

mapper.java

public List findOrdersAndUser() throws Exception ;

mapper.xml

   <!-- 使用resultType 一对一映射 -->
   <select id="findOrdersAndUser" resultType="OrderCustom">
       SELECT 
        a.*,b.name,b.sex
        FROM orders a,user b 
        WHERE a.`id`=b.`id` ; 
   </select>  
这里写代码片

测试

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.shao.ssm.pojo.OrderCustom;

public class OrdersMapperTest {
    private ApplicationContext applicationContext ; 

    @Before
    public void setUp() throws Exception {

        applicationContext =  new  ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
    }

    @Test
    public void testFindOrdersAndUser() throws Exception {
    OrdersMapper orderMapper = (OrdersMapper) applicationContext.getBean("ordersMapper") ;
                        //从容器里getBean 括号里边与 Mybatis-spring配置文件中的bean id 一致
     List<OrderCustom> orderCustomList = orderMapper.findOrdersAndUser() ;
    for(int i = 0 ; i<orderCustomList.size();i++)
     System.out.println(orderCustomList.get(i).getName());
    }

2.MapperScannerConfigurer批量扫描自动创建代理对象并在Spring容器中注册的方式。

在mybatis-spring.xml添加一个bean


        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.shao.ssm.mapper" />
            <property name="sqlSessionFactoryBeanName"  value="sqlSessionFactory"/>
            <!-- 是为了自动注入SqlSessionFactory ,ref="sqlSessionFactory 是引用了上面配置的sqlSessionFactoryBean 的id"-->
        </bean>

basePackage和 sqlSessionFactoryBeanName 都是 MapperScannerConfigurer类中的属性
basePackage 的value 指定mapper 所在的包的包名。
sqlSessionFactoryBeanName 的value 指定sqlSessionFactory 也是 参照SqlSessionFactoryBean 的配置信息id。
注意一下几点:
1. mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册
2. 遵循的规范:将mapper.java和mapper.xml映射文件名称保持一致,并且在一个目录中
3. 如果在此配置了批量扫描,SqlMapConfig类中的mapper 中可以不配置 package批量扫描
4. MapperScannerConfigurer这不同于MapperFactoryBean有id 它的id为每个mapper接口的类名,且首字母为小写
5. 指定扫描多个包,每个包中间使用半角逗号分隔

mapper.java

同上MapperFactoryBean 生成 mapper代理的方式。

mapper.xml

同上MapperFactoryBean 生成 mapper代理的方式。

测试

同上MapperFactoryBean 生成 mapper代理的方式 。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值