在SpringBoot中集成MyBatis,可以在mapper接口上添加@Mapper注解,将mapper注入到Spring,但是如果每一给mapper都添加@mapper注解会很麻烦,这时可以使用@MapperScan注解来扫描包。
mapper接口开发
面向接口编程的思想很重要,所以想先介绍这个部分。
如一个实体类:
public class Person {
private int pid;
private String pname;
private int age;
private String address;
}
Mapper接口:
import java.util.List;
public interface PersonMapper {
public List<Person> getPersonList();
MyBatis配置XML文件:
环境配置,链接数据库:
<mappers>
<!-- <mapper class="com.asong.mybatis.pojo.PersonMapper"/> -->
<mapper resource="com/asong/mybatis/pojo/PersonMapper.xml"/>
</mappers>
mapper.xml配置:
<mapper namespace="com.asong.mybatis.pojo.PersonMapper">
<select id="getPersonList" resultMap="Person" >
select * from t_person
</select>
</mapper>
测试代码:
@Test
public void getPersonListTest(){
PersonMapper personMapper = session.getMapper(PersonMapper.class);
List<Person> personList = personMapper.getPersonList();
for (Person person : personList) {
System.out.println(person);
}
}
上面的方式使用的是xml配置方式,也可以使用注解的方式,即在每个Mapper类上添加上注解@Mapper即可。
MapperScan
通过在每个Mapper类上添加注解@Mapper,这种方式要求每一个mapper类都需要添加此注解,十分麻烦,因此可以使用MapperScan可以指定要扫描的Mapper类的包的路径,使用例子:
/**
* MyBatis配置类
* Created by asong on 2019/12/21.
*/
@Configuration
@MapperScan({"com.asong.shop.tiny.mbg.mapper","com.asong.shop.tiny.dao"})
public class MyBatisConfig {
}
@MapperScan注解只会扫描包中的接口,不会扫描类
使用方法:
@MapperScan("com.demo.mapper")//扫描指定包中的接口
@MapperScan("com.demo.*.mapper")//一个*代表任意字符串,但只代表一级包,比如可以扫到com.demo.aaa.mapper,不能扫到com.demo.aaa.bbb.mapper
@MapperScan("com.demo.**.mapper")//两个*代表任意个包,比如可以扫到com.demo.aaa.mapper,也可以扫到com.demo.aaa.bbb.mapper