with springboot 整合
mybatis-spring-boot-starter
mybatis-spring-boot-starter这个在mybits官页文档中: http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
实例
引入
for Maven
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.start.version}</version>
</dependency>for Gradle
dependencies {
implementation("org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.2")
}MyBatis-Spring-Boot-Starter 将会:
- 自动探测存在的
DataSource - 将使用
SqlSessionFactoryBean创建并注册一个SqlSessionFactory的实例,并将探测到的DataSource作为数据源 - 将创建并注册一个从
SqlSessionFactory中得到的SqlSessionTemplate的实例 - 自动扫描你的 mapper (org.apache.ibatis.annotations.Mapper 注解的对象),将它们与
SqlSessionTemplate相关联,并将它们注册到Spring 的环境(context)中去,这样它们就可以被注入到你的 bean 中
MyBatis-Spring-Boot-Starter 将默认搜寻带有 @Mapper 注解的 mapper 接口, 你可能想指定一个自定义的注解或接口来扫描,如果那样的话,你就必须使用 @MapperScan 注解了; 参考笔记 MyBatis > 扫描 “Mapper” 的方式
配置 “Mapper” 扫描
MyBatis-Spring-Boot-Starter 将默认搜寻带有 @Mapper 注解的 mapper 接口
指定一个自定义的注解或接口来扫描,使用 @MapperScan 注解
@Configuration
@MapperScan("org.yang.mybits.mapper")
public class ...参考: MyBatis > 扫描 “Mapper” 的方式
使用 SqlSession
一个 SqlSessionTemplate 的实例被创建并添加到 Spring 的环境中,因此你可以使用 MyBatis API,让它像下面一样被注入到你的 bean 中(Spring 4.3 以上可用)。
@Component
public class CityDao {
private final SqlSession sqlSession;
public CityDao(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
public City selectCityById(long id) {
return this.sqlSession.selectOne("selectCityById", id);
}
}事务管理 SqlSessionTemplate
SqlSessionTemplate是MyBatis-Spring模块提供的类,用于在Spring应用程序中简化SqlSession的管理。它提供了一种将MyBatis与Spring的事务管理机制集成的方式,以便更轻松地进行数据库操作。以下是SqlSessionTemplate的工作原理:
-
SqlSessionFactory配置:在Spring的配置文件中,您需要配置
SqlSessionFactory,这是MyBatis的关键组件,负责创建SqlSession实例。SqlSessionTemplate需要引用这个SqlSessionFactory。 -
SqlSessionTemplate配置:您配置
SqlSessionTemplatebean,将SqlSessionFactory注入其中,如下所示:<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg ref="sqlSessionFactory" /> </bean> -
使用SqlSessionTemplate:在您的服务类或DAO类中,您可以注入或通过Spring上下文获取
SqlSessionTemplatebean。然后,您可以使用它来执行数据库操作,而无需显式创建和关闭SqlSession。@Autowired private SqlSessionTemplate sqlSessionTemplate; public void doDatabaseOperation() { // 使用SqlSessionTemplate执行数据库操作 sqlSessionTemplate.insert("insertData", data); sqlSessionTemplate.update("updateData", data); sqlSessionTemplate.delete("deleteData", data); sqlSessionTemplate.selectOne("getData", id); } -
事务管理:如果您的方法需要事务支持,您可以使用Spring的事务管理机制,例如
@Transactional注解,来管理事务。SqlSessionTemplate可以与Spring的事务管理机制无缝集成,以确保在事务中执行数据库操作。 -
异常处理:
SqlSessionTemplate负责处理底层SqlSession的打开和关闭,还会处理潜在的异常情况。如果出现异常,它将确保底层SqlSession被关闭,从而避免资源泄漏。
总之,SqlSessionTemplate的原理是通过注入SqlSessionFactory,它允许在Spring应用程序中简化SqlSession的创建和管理,同时与Spring的事务管理机制进行集成。这使得MyBatis在Spring应用程序中更易于使用,同时确保了数据库操作的事务性和资源管理。
自定义配置
配置 (ConfigurationCustomizer)
MyBatis-Spring-Boot-Starter 将自动寻找实现了 ConfigurationCustomizer 接口的组件,调用自定义 MyBatis 配置的方法。( 1.2.1 及以上的版本可用)
例如:
@Configuration
public class MyBatisConfig {
@Bean
ConfigurationCustomizer mybatisConfigurationCustomizer() {
return new ConfigurationCustomizer() {
@Override
public void customize(Configuration configuration) {
// customize ...
}
};
}
}SqlSessionFactory (SqlSessionFactoryBeanCustomizer)
MyBatis-Spring-Boot-Starter 将自动寻找实现了 SqlSessionFactoryBeanCustomizer 接口的组件,调用自定义 SqlSessionFactoryBean 的方法。( 2.2.2 及以上的版本可用)
For example:
@Configuration
public class MyBatisConfig {
@Bean
SqlSessionFactoryBeanCustomizer sqlSessionFactoryBeanCustomizer() {
return new SqlSessionFactoryBeanCustomizer() {
@Override
public void customize(SqlSessionFactoryBean factoryBean) {
// customize ...
}
};
}
}配置 MyBatis 的其他组件
The MyBatis-Spring-Boot-Starter 将检测实现以下由 MyBatis 提供的接口的组件。
Interceptor(拦截器)TypeHandler(类型处理器)LanguageDriver(插入脚本语言)(需要 mybatis-spring 2.0.2 以上配合使用)DatabaseIdProvider
@Configuration
public class MyBatisConfig {
@Bean
MyInterceptor myInterceptor() {
return MyInterceptor();
}
@Bean
MyTypeHandler myTypeHandler() {
return MyTypeHandler();
}
@Bean
MyLanguageDriver myLanguageDriver() {
return MyLanguageDriver();
}
@Bean
VendorDatabaseIdProvider databaseIdProvider() {
VendorDatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
Properties properties = new Properties();
properties.put("SQL Server", "sqlserver");
properties.put("DB2", "db2");
properties.put("H2", "h2");
databaseIdProvider.setProperties(properties);
return databaseIdProvider;
}
}MyBits 在 application.yml 可配置项
| 配置项(properties) | 描述 |
|---|---|
config-location | MyBatis XML 配置文件的路径。 |
check-config-location | 指定是否对 MyBatis XML 配置文件的存在进行检查。 |
mapper-locations | XML 映射文件的路径。 |
type-aliases-package | 搜索类型别名的包名。(包使用的分隔符是 “,; \t\n”) |
type-aliases-super-type | 用于过滤类型别名的父类。如果没有指定,MyBatis会将所有从 type-aliases-package 搜索到的类作为类型别名处理。 |
type-handlers-package | 搜索类型处理器的包名。(包使用的分隔符是 “,; \t\n”) |
executor-type | SQL 执行器类型: SIMPLE, REUSE, BATCH |
default-scripting-language-driver | 默认的脚本语言驱动(模板引擎),此功能需要与 mybatis-spring 2.0.2 以上版本一起使用。 |
configuration-properties | 可在外部配置的 MyBatis 配置项。指定的配置项可以被用作 MyBatis 配置文件和 Mapper 文件的占位符。更多细节 见 MyBatis 参考页面。 |
lazy-initialization | 是否启用 mapper bean 的延迟初始化。设置 true 以启用延迟初始化。此功能需要与 mybatis-spring 2.0.2 以上版本一起使用。 |
mapper-default-scope | 通过自动配置扫描的 mapper 组件的默认作用域。该功能需要与 mybatis-spring 2.0.6 以上版本一起使用。 |
inject-sql-session-on-mapper-scan | 设置是否注入 SqlSessionTemplate 或 SqlSessionFactory 组件 (如果你想回到 2.2.1 或之前的行为,请指定 false )。如果你和 spring-native 一起使用,应该设置为 true (默认)。 |
configuration.* | MyBatis Core 提供的Configuration 组件的配置项。有关可用的内部配置项,请参阅MyBatis 参考页面。注:此属性不能与 config-location 同时使用。 |
scripting-language-driver.thymeleaf.* | MyBatis ThymeleafLanguageDriverConfig 组件的 properties keys。有关可用的内部配置项,请参阅 MyBatis Thymeleaf 参考页面。 |
scripting-language-driver.freemarker.* | MyBatis FreemarkerLanguageDriverConfig 组件的 properties keys。有关可用的内部配置项,请参阅 MyBatis FreeMarker 参考页面。这个特性需要与 mybatis-freemarker 1.2.0 以上版本一起使用。 |
scripting-language-driver.velocity.* | MyBatis VelocityLanguageDriverConfig 组件的 properties keys。有关可用的内部属性,请参阅 MyBatis Velocity 参考页面。这个特性需要与 mybatis-velocity 2.1.0 以上版本一起使用。 |
官方示例
| 分类 | 样例 | 描述 |
|---|---|---|
| 核心组件 | 样例1 | 展示了最简单的场景,只有一个 mapper 和一个注入 mapper 的组件。这就是我们在“快速入门”部分看到的例子。 |
| 样例2 | 展示了如何在 XML 文件中使用一个带有语句的 Mapper,并且也有使用 SqlSessionTemplate 的 DAO 的示例。 | |
| LangaugeDriver | 样例3 | 展示了如何在 mybatis-thymeleaf 的帮助下,使用 Thymeleaf。 |
| 样例4 | 展示了如何在 mybatis-freemarker 的帮助下,使用 Freemarker。 | |
| 样例5 | 展示了如何在 mybatis-velocity 的帮助下,使用 Velocity。 | |
| JVM 语言 | 样例6 | 展示了如何和 kotlin 一同使用。 |
| 样例7 | 展示了如何和 groovy 一同使用。 | |
| Web | 样例8 | 展示了如何在 web 环境中使用。 |
| 样例9 | 展示了如何在 web 环境中使用并且让 war 文件部署在应用程序服务器上。 |