springboot集成mybatis和事务的处理

一.集成mybatis
(1)集成dataSource
1.引入druid的依赖

<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.4</version>
		</dependency>

2.两种方式:
2.1:配置的方式
spring.datasource.url=jdbc:mysql:///p2p
spring.datasource.username=root
spring.datasource.password=admin
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.initialSize=3
spring.datasource.filters=stat

重点在于type配置;
原理:springboot使用DataSourceConfiguration类来完成datasource的自动创建:

@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type")
static class Generic {
		@Bean
		public DataSource dataSource(DataSourceProperties properties) {
			return properties.initializeDataSourceBuilder().build();
		}
}

2.2代码方式

@Bean
	public DataSource dataSource(Properties props) throws Exception {
		DruidDataSource dataSource = new DruidDataSource();
		dataSource.setUrl("jdbc:mysql:///p2p");
		dataSource.setUsername("root");
		dataSource.setPassword("admin");
		dataSource.setInitialSize(3);
		dataSource.setFilters("stat");
		dataSource.setMaxActive(10);
		return dataSource;
	}


//当然也可以通过
@Bean
	@ConfigurationProperties(prefix = "springboot.datasource")
	public DataSource dataSource(Properties props) throws Exception {
		return DruidDataSourceFactory.createDataSource(props);
	}
//来完成,但这种方式和配置方式基本就一样了。

(2)集成mybatis
集成mybatis也有两种方式,主要介绍依赖
1.添加依赖

		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.1</version>
		</dependency>

2,正常完成mapper接口和mapper.xml
3,mybatis-spring-boot-starter提供了以下配置:
(具体参考MyBatisProperties对象)
mybatis.configLocation:mybatis的配置文件地址;
mybatis.mapperLocations:映射文件地址;
mybatis.typeAliasesPackage:别名扫描包;
4,扫描mapper接口:
第一种方式:使用@MapperScan标签

@SpringBootApplication
@MapperScan(basePackages="com.xmg.springboot.demo._10mybatis.mapper")
public class App {
	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}
}

第二种方式:代码的方式:

@Configuration
@AutoConfigureAfter(MybatisAutoConfiguration.class)
public class MapperScanConfiguration {
	@Bean
	public MapperScannerConfigurer mapperScannerConfigurer() {
		MapperScannerConfigurer msc = new MapperScannerConfigurer();
		msc.setSqlSessionFactoryBeanName("sqlSessionFactory");
		msc.setBasePackage("com.xmg.springboot.demo._10mybatis.mapper");
		return msc;
	}
}

二.事务的处理
(1)事务管理器
1,直接开启@EnableTransactionManagement注解;相当于在xml中配置tx:annotation-driven/

@SpringBootApplication
@MapperScan(basePackages="com.xmg.springboot.demo._10mybatis.mapper")
@EnableTransactionManagement
public class App {

	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}

}

如果在classpath中添加的是spring-boot-starter-jdbc,那么springboot自动创建DataSourceTranscationManager;
2,使用代码的方式:即手动创建一个事务管理对象

@Bean
	public PlatformTransactionManager transactionManager(DataSource dataSource) {
		return new DataSourceTransactionManager(dataSource);
	}

(2)事务控制
1,如果开启了@EnableTransactionManagement,只需要在service上面使用@Transactional即可;

2,使用xml配置
将事务相关配置抽取到XML中,使用importResource引入
2.1,引入aop

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>

2.2,application-tx.xml

<tx:advice id="advice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="list*" read-only="true" />
			<tx:method name="get*" read-only="true" />
			<tx:method name="query*" read-only="true" />
			<tx:method name="*" />
		</tx:attributes>
	</tx:advice>

	<aop:config>
		<aop:pointcut expression="execution(* com.xmg.springboot.demo..service.*Service.*(..))"
			id="pointCut" />
		<aop:advisor advice-ref="advice" pointcut-ref="pointCut" />
	</aop:config>

2.3,引入配置

@SpringBootApplication
@MapperScan(basePackages = "com.xmg.springboot.demo._10mybatis.mapper")
@ImportResource(locations="classpath:application-tx.xml")
public class App {
}
发布了52 篇原创文章 · 获赞 2 · 访问量 207

猜你喜欢

转载自blog.csdn.net/weixin_41588751/article/details/103994325