Mybatis-Spring整合Mapper代理开发

来源:互联网 发布:马克威算法交易平台 编辑:程序博客网 时间:2024/05/16 13:37

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 0
原创粉丝点击