一.集成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 {
}