本博客介绍一下SpringBoot集成Mybatis,数据库连接池使用alibaba的druid,使用SpringBoot微框架虽然集成Mybatis之后可以不使用xml的方式来写sql,但是用惯了xml的其实也可以用xml来实现的,实现上具体用什么方式并不重要,主要是搭建一遍,对框架的运转就比较清晰。本博客还是用xml的方式来实现Mybatis的sql编写,不用注解方式。
maven配置
org.mybatis.spring.boot mybatis-spring-boot-starter1.3.1
当然要引入druid,mysql等等jar的话可以参考我一个项目里的parent工程的maven配置:
4.0.0 com.muses.taoshop taoshop1.0-SNAPSHOT pom taoshop org.springframework.boot spring-boot-starter-parent1.5.7.RELEASE UTF-8 1.0 1.2.17 5.1.27 3.4.0 1.3.0 1.3.1 5.1.39 1.5.7.RELEASE 1.1.2 4.2.1 1.2.7 1.16.10 taoshop-quartz taoshop-search taoshop-common taoshop-provider-api taoshop-provider taoshop-manager taoshop-portal taoshop-cms taoshop-order taoshop-sso src/main/java **@Controller@EnableScheduling//开启对计划任务的支持@EnableTransactionManagement//开启对事务管理配置的支持@EnableCaching@EnableAsync//开启对异步方法的支持@EnableAutoConfiguration@ServletComponentScan@SpringBootApplication(exclude={DataSourceAutoConfiguration.class, MybatisAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})public class PortalApplication { @RequestMapping("/") @ResponseBody String home() { return "portal web!"; } @RequestMapping("/doTest") @ResponseBody String doTest(){ System.out.println(Thread.currentThread().getName()); String threadName = Thread.currentThread().getName(); return threadName; } public static void main(String[] args) throws Exception { SpringApplication.run(PortalApplication.class, args); } }
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,
MybatisAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class}),这个注释是必须的,开启自动扫描数据源和Mybatis配置文件
数据库配置
做好SpringBoot启动类的注解之后,需要编写Mybatis和数据源的配置类
写一个Constants类:
package com.muses.taoshop.common.core.database.config;public class baseConfig {
public static final String DATA_SOURCE_NAME = "shop";
public static final String DATA_SOURCE_PROPERTIES = "spring.datasource.shop";
public static final String REPOSITORY_PACKAGES = "com.muses.taoshop.**.repository";
public static final String MAPPER_PACKAGES = "com.muses.taoshop.**.mapper";
public static final String ENTITY_PACKAGES = "com.muses.taoshop.*.entity";
public static final String TYPE_HANDLERS_PACKAGES = "com.muses.taoshop.common.core.database.typehandlers";
public static final String SQL_SESSION_FACTORY = "sqlSessionFactory";
public static final String MYBATIS_TRANSACTION_MANAGER = "mybatisTransactionManager";
public static final String JEDIS_POOL = "jedisPool";
public static final String JEDIS_POOL_CONFIG = "jedisPoolConfig";
}DataSource配置类:
package com.muses.taoshop.common.core.database.config;import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;import static com.muses.taoshop.common.core.database.config.baseConfig.DATA_SOURCE_NAME;import static com.muses.taoshop.common.core.database.config.baseConfig.DATA_SOURCE_PROPERTIES;@Configurationpublic class DataSourceConfig {
@Bean(name = DATA_SOURCE_NAME)
@ConfigurationProperties(prefix = DATA_SOURCE_PROPERTIES)
public DataSource dataSource() { return DruidDataSourceBuilder.create().build();
}
}Mybatis配置类:
package com.muses.taoshop.common.core.database.config;//import com.muses.taoshop.common.core.database.annotation.MybatisRepository;import com.muses.taoshop.common.core.database.annotation.TypeAliasesPackageScanner;import org.apache.ibatis.io.VFS;import org.apache.ibatis.plugin.Interceptor;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.*;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.core.io.support.ResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.sql.DataSource;import static com.muses.taoshop.common.core.database.config.baseConfig.*;@MapperScan(
basePackages = MAPPER_PACKAGES, //annotationClass = MybatisRepository.class,
sqlSessionFactoryRef = SQL_SESSION_FACTORY
)@ComponentScan@EnableTransactionManagement@Configurationpublic class MybatisConfig { //@Autowired
//MybatisSqlInterceptor mybatisSqlInterceptor;
TypeAliasesPackageScanner packageScanner = new TypeAliasesPackageScanner(); @Bean(name = DATA_SOURCE_NAME) @ConfigurationProperties(prefix = DATA_SOURCE_PROPERTIES) @Primary
public DataSource dataSource(){ return DataSourceBuilder.create().build();
} @Primary
@Bean(name = SQL_SESSION_FACTORY) public SqlSessionFactory sqlSessionFactory(@Qualifier(DATA_SOURCE_NAME)DataSource dataSource)throws Exception{ //SpringBoot默认使用DefaultVFS进行扫描,但是没有扫描到jar里的实体类
VFS.addImplClass(SpringBootVFS.class);
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); //factoryBean.setPlugins(new Interceptor[]{mybatisSqlInterceptor});
factoryBean.setDataSource(dataSource); //factoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); try{
factoryBean.setMapperLocations(resolver.getResources("classpath*:/mybatis@Servicepublic class ItemServiceImpl implements IItemService { @Autowired
ItemMapper itemMapper;
@Override
public ItemDetail getItemDetailInfo(int spuId){
ItemDetail itemDetail = itemMapper.getItemDetail(spuId); return itemDetail;
}
}
作者:smileNicky
链接:https://www.jianshu.com/p/e302b99fc5b4



