mybatis最关键的原理就是 Mapper.java–> Mapper.xml,明白这个就好理解了。
文章目录
pom.xml添加依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
脉络关系
MapperScannerConfigurer: # mybatis配置类,如果他的属性存在,该类自动装配
basePackage: # Mapper接口路径,对应@MapperScan(basePackages="")
sqlSessionFactory: #
mapperLocations: # Mapper.xml的路径
typeAliasesPackage: # 实体类路径
dataSource: # 不用专门配置,一般项目早都配好数据源了
可见,实际要配置的只有3个:
basePackage,mapperLocations,typeAliasesPackage。
主要元素
Mapper接口
MapperScannerConfigurer.basePackage
属性。指定要扫描的Mapper接口的路径。
实际中多用 @MapperScan(basePackages="***")
来配置,更简单方便。
必须配置。
Mapper.xml
SqlSessionFactoryBean.mapperLocations
属性,指定Mapper接口对应的xml路径。
必须配置。
typealias
SqlSessionFactoryBean.typeAliasesPackage
属性。
配置上这个之后,Mapper.xml中实体的类名不用写全路径。但是实际中一般还是写全路径。
非必须配置。
配置方式
下面举例说明2种配置方式
类配置方式
@Configuration
@MapperScan(basePackages = "com.example.accessingdatamysql.dao")
public class MybatisConfiguration {
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception
{
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
// mapper.xml 配置
String path = "classpath:mappers/*.xml";
PathMatchingResourcePatternResolver resource = new PathMatchingResourcePatternResolver();
sqlSessionFactory.setMapperLocations(resource.getResources(path));
// typealias 配置
sqlSessionFactory.setTypeAliasesPackage("com.example.accessingdatamysql.entity");
return sqlSessionFactory.getObject();
}
}
配置文件方式
@MapperScan(basePackages = "com.example.accessingdatamysql.dao")
public class MybatisConfiguration {
}
application.yml
mybatis:
type-aliases-package: com.example.accessingdatamysql.entity
mapperLocations: classpath:mappers/*.xml
复古流,纯java类配置
有些人喜欢纯java类配置,也是可以的,就是去掉MapperScan,替换为用
MapperScannerConfigurer.setBasePackage()即可。
@Configuration
public class MybatisConfiguration {
@Bean
public MapperScannerConfigurer MapperScannerConfigurer() throws Exception{
MapperScannerConfigurer configurer = new MapperScannerConfigurer();
configurer.setBasePackage("com.example.accessingdatamysql.dao");
configurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
return configurer;
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception
{
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
// 不要忘了配置数据源,如果用配置文件的方式,不用手动配置
//sqlSessionFactory.setDataSource();
// mapper.xml 配置
String path = "classpath:mappers/*.xml";
PathMatchingResourcePatternResolver resource = new PathMatchingResourcePatternResolver();
sqlSessionFactory.setMapperLocations(resource.getResources(path));
// typealias 配置
sqlSessionFactory.setTypeAliasesPackage("com.example.accessingdatamysql.entity");
return sqlSessionFactory.getObject();
}
}
mybatis配置打印完整的sql语句
mybatis-config.xml配置文件里面添加一行即可:
<setting name="logImpl" value="STDOUT_LOGGING" />
其他
SqlSessionFactoryBean.setDataSource()
设置数据源的操作。
如果是配置文件配置,不用手动的set。
如果是configuration配置,需要手动的set。