Mybatis之Spring整合Mapper代理

来源:互联网 发布:1683维也纳战役 知乎 编辑:程序博客网 时间:2024/06/05 11:18
  • 配置Mapper代理有两种方式,一种通过MapperFactoryBean创建代理对象,另一种通过MapperScannerConfigurer批量扫描创建代理对象,现在就来比较一下两者的区别。
  • 捋一下思路,我就通过一个id查询来测试一下整合的效果,先在数据库建一张user表,另外用java代码建一个po类
public class User {        private int id;        private String username;        private String sex;        private Date birthday;        private String address;

因为要用到mapper的代理,所以我们还得遵循一些mapper代理的一些规范–指定mapper接口的包名,mybatis将自动扫描包下的所有接口进行加载,前提是mapper接口类和mapper.xml文件在一个目录下且文件名两者需要相同。

public interface UserMapper {    public User findUserById(int id);}
    <mapper namespace="com.itsky.mapper.UserMapper">    <select id="findUserById" parameterType="int" resultType="com.itsky.ms.po.User">    SELECT * FROM USER WHERE id =#{id}    </select>    </mapper>

中的namespace属性指定接口的路径。
这样就把java代码及基本的mapper.xml文件搭好了

  • 现在搭建一个配置mapper.xml的xml文件,我将其命名为sqlMapConfig.xml
<configuration>    <!-- 加载映射文件 -->    <mappers>        <package name="com.itsky.mapper"/>    </mappers></configuration>
  • 最后需要一个全局配置文件applicationContext.xml
 <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">        设置代理类的接口        <property name="mapperInterface" value="com.itsky.mapper.UserMapper"></property>        依赖注入SqlSessionFactory        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>    </bean> 

这里需要配置一个代理对象,用到的是MapperFactoryBean,现在还需要把代理类的接口和SqlSessionFactory传进去。
整合的框架就已经搭建完成,最后来测试一些

    private ApplicationContext ctx;    @Before    public void setUp() throws Exception {        ctx = new ClassPathXmlApplicationContext(                "applicationContext.xml");    }    @Test    public void testMapperFindUserById() {        // 创建mapper对象        UserMapper userMapper = (UserMapper) ctx.getBean("userMapper");        // 调用mapper对象的方法        User user = userMapper.findUserById(1);        System.out.println(user);    }

结果

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.User [id=1, username=rose, sex=girl, birthday=Sun Mar 22 00:00:00 CST 2015, address=chnia]

现在用另一个方式来配置–通过MapperScannerConfigurer批量扫描创建代理对象

 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">    <!-- // 配置扫描的包 -->        <property name="basePackage" value="com.itsky.mapper"></property>    </bean>

通过MapperScannerConfigurer配置简单一句话就可以把前面的所有工作给代替,只需要配一个扫描和加载需要扫描的包即可。
测试的结果和上面的一致。(菜鸟学习养成记)

0 0