上一篇我们简单的讲解了Spring和MyBatis的整合,但你不难发现,其配置起来还是够麻烦的。最明显的一点是,我们需要在自定义的Mapper接口写个很长的SQL注解,并且还要手动注册到Spring容器。本文主要讲解简化的方法。
首先,还是定义接口,但你已看不到任何框架的痕迹,
package org.chen.mybatis.mapper;
import org.chen.domain.Spitter;
public interface SpitterMapper {
Spitter getSpitter(String email);
}
如果使用的是Maven,在资源文件夹resouces,建立和org.chen.mybatis.mapper相同的目录结构,
文件SpitterMapper的名字必须和上面的接口同名。SpitterMapper的内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.chen.mybatis.mapper.SpitterMapper">
<select id="getSpitter" resultType="org.chen.domain.Spitter">
select * from spitter where email = #{email}
</select>
</mapper>
id和接口对应的方法名同名,resultType是返回类名。(你可能觉得写这么长的类名很麻烦,确实是,等会有简化的方法)
接下来在Spring配置文件里,
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="org.chen.mybatis.mapper" />
</bean>
这个bean的作用和自动检测的一样,就是自动把basePackage指定的包下的mapper注册成MyBatis.
为了简化上面的resultType的书写,
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="org.chen.domain" />
</bean>
添加一个typeAliasesPackage,即包名的别名,这样直接写resultType="Spitter"就可以了。
最后我们向service注入Mapper,
@Service
public class TestService {
@Autowired
private SpitterMapper spitterMapper;
public void setSpitterMapper(SpitterMapper spitterMapper) {
this.spitterMapper = spitterMapper;
}