mybatis在spring-boot中的默认sql执行器executor-type的修改
spring-boot
spring-projects/spring-boot: 是一个用于简化Spring应用开发的框架。适合用于需要快速开发企业级Java应用的项目。特点是可以提供自动配置、独立运行和内置的Tomcat服务器,简化Spring应用的构建和部署。
项目地址:https://gitcode.com/gh_mirrors/sp/spring-boot
免费下载资源
·
1.executor-type介绍
mybatis提供三种sql执行器,分别是SIMPLE、REUSE、BATCH。
- SIMPLE是默认执行器,根据对应的sql直接执行,不会做一些额外的操作。
- REUSE是可重用执行器,重用对象是Statement(即该执行器会缓存同一个sql的Statement,省去Statement的重新创建,优化性能)(即会重用预处理语句)
- BATCH执行器会重用预处理语句,并执行批量更新。
即executor-type有三种值,即SIMPLE、REUSE、BATCH。
2.executor-type执行效果
- executor-type值为SIMPLE、REUSE,可通过insert、update、delete方法的返回值判断sql是否执行成功,返回非0表示执行sql成功的条数,返回0表示sql执行失败
- executor-type值为BATCH,insert、update、delete方法返回值一直会是负数-2147482646,在该模式下insert、update、delete返回值将无任何意义,不能作为判断sql执行成功的判断依据
3.executor-type在spring-boot框架下的修改
修改executory-type,需要手动配置SqlSessionTemplate。
注:SqlSessionTemplate介绍
SqlSession: 数据库CRUD及事务操作接口,线程不安全,常用于Request范围或method范围
SqlSessionFactory :创建SqlSession的工厂类
SqlSessionManager/SqlSessionTemplate[装饰器模式] :SqlSession装饰器,增强SqlSession生命周期管理
综上所述,SqlSessionFactoryBean是生产SqlSessionFactory的一种工厂Bean;SqlSessionFactory是一种生产SqlSession的工厂;SqlSession(接口)是代表数据库连接客户端和数据库Server之间的会话信息;SqlSessionTemplate是SqlSession的一个具体实现。
1)在spring的application.xml中配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- Properties文件读取配置,base的properties -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- JNDI获取数据源(使用dbcp连接池) -->
<!-- 因为我们使用的这个数据源是采用 dbcp连接池,对于连接池来说,整个应用中只有一个,
所以作用域需要设置成单例 因为获取数据源是非常消耗性能,所以我们也要采用单例模式-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
scope="singleton">
<property name="driverClassName" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</bean>
<!-- 事务配置 在需要事务管理的地方加@Transactional 注解或者AOP进行事务处理-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置mybitas SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
<property name="mapperLocations" value="classpath:com/zhl/dao/*.xml"/>
</bean>
<!--配置一个可以进行批量执行的sqlSession -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryBean"></constructor-arg>
<constructor-arg name="executorType" value="BATCH"></constructor-arg>
</bean>
<!-- 把sqlSessionTemplate注入测试类 -->
<bean id="userDao" class="com.zhl.dao.UserDao">
<property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
</bean>
</beans>
2)通过注解方式修改
本人的工程使用注解完成mybatis的相关配置,现就使用注解如何修改做一下记录。
/**
* 数据源配置类
*/
@Configuration
@MapperScan(basePackages={"com.zhl.dao.**.dao"},sqlSessionFactoryRef="sqlSessionFactory-dataSource")
public class DataSourceConfig{
@Primary
@Bean(name={"sqlSessionFactory-dynamic"})
public SqlSessionFactory sqlSessionFactory(@Qualifier("dynamic")DataSource dataSource){
GlobalConfig gcfg = new GloablConfig();
gcfg.setDbConfig(new DbConfig().setDbType(DbType.ORACLE));
MybatisConfiguration mcfg = new MybatisConfiguration();
mcfg.setJdbcTypeForNull(jdbcType.NULL);
final MybatisSqlSessionFactoryBean msfb = new MybatisSqlSessionFactoryBean();
msfb.setDataSource(dataSource);
//msfb.setPlugins(new intercptor[]{new MyPaginationInterceptor(),new MySqlPrintInterceptor});
msfb.setGlobalConfig(gcfg);
msfb.setConfiguration(mcfg);
return msfb.getObject();
}
@Bean("batchSqlSessionTemplate")
public SqlSessionTemplate setSqlSessionTemplate(@Qualifier("sqlSessionFactory-dataSource")SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory,ExecutoryType.BATCH);
}
}
GitHub 加速计划 / sp / spring-boot
73.97 K
40.4 K
下载
spring-projects/spring-boot: 是一个用于简化Spring应用开发的框架。适合用于需要快速开发企业级Java应用的项目。特点是可以提供自动配置、独立运行和内置的Tomcat服务器,简化Spring应用的构建和部署。
最近提交(Master分支:1 个月前 )
fdf24c6c
Closes gh-42976
6 天前
3c42ba8c
* pr/42974:
Fix copyright year of updated file
Polish
Closes gh-42974
6 天前
更多推荐
已为社区贡献4条内容
所有评论(0)