上一篇文章,我们讲了,快速搭建SpringBoot和体验SpringBoot 点击打开链接
今天来做SpringBoot对Mybatis+Druid+Mybatis的集成配置
添加依赖包:
注意:不要有包冲突,不要再有Spring相关的版本配置(如果在properties中配置了spring的相关版本信息,则启动失败)
2018-03-19 23:08:01.446 WARN 21836 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration]; nested exception is java.lang.NoSuchMethodError: org.springframework.util.Assert.state(ZLjava/util/function/Supplier;)V
java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@47542153: startup date [Mon Mar 19 23:08:00 CST 2018]; root of context hierarchy
<properties>
<mybatis.version>3.4.1</mybatis.version>
<mybatis.spring.version>1.3.1</mybatis.spring.version>
<mysql.version>5.1.38</mysql.version>
</properties>
<!-- 对数据库操作的一些依赖,包括提供了数据源,连接池,事务等一些持久层的支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- data source -->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<!-- mybatis -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<!-- mysql -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
创建SpringBoot入口文件(ApplicationEntrance.java):
推荐放置在顶层包(root包)中。
不过也可以根据个人喜好放置到其它包中。不过需要手动设置指定从哪里开始扫描。
//SpringBoot的核心注解,在入口类上配置,也可以单纯地认为它就是一个入口注解
//里面包含@EnableAutoConfiguration注解,用来开启自动配置,可以让springboot根据导入的包依赖来猜测需要什么样的配置,对项目进行自动配置。
//@EnableAutoConfiguraion会自动从使用该注解的类所在的包及其子包进行扫描。(例如com.test.A.java用了该注解
//那么会从test向下[包含testbao]进行扫描,test包以外的不进行扫描。)
@SpringBootApplication(scanBasePackages="boot")
public class ApplicationEntrance {
private static Logger log = Logger.getLogger(ApplicationEntrance.class);
public static void main(String[] args) {
SpringApplication.run(ApplicationEntrance.class, args);
log.info("SpringBoot启动!");
}
}
创建配置项(ApplicationDruidConfig.java[数据源],ApplicationMybatisConfig.java[mybatis相关配置])在resource目录下添加jdbc.properties文件:
ApplicationDruidConfig.java
//说明这是一个配置文件
@Configuration
//用来引入properties文件
@PropertySource(value = "jdbc.properties")
public class ApplicationDruidConfig {
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Value("${jdbc.url}")
private String jdbcUrl;
@Value("${jdbc.driver}")
private String driverClass;
@Value("${jdbc.initialSize}")
private int initialSize;
@Value("${jdbc.maxActive}")
private int maxActive;
@Value("${jdbc.minIdle}")
private int minIdle;
@Value("${jdbc.maxWait}")
private long maxWait;
@Value("${jdbc.timeBetweenEvictionRunsMillis}")
private long timeBetweenEvictionRunsMillis;
@Value("${jdbc.minEvictableIdleTimeMillis}")
private long minEvictableIdleTimeMillis;
@Bean(name="dataSource")
//因为SpringBoot也为我们提供了一个默认的datasource,可谓贴心,当我们需要自己的连接池的时候,可以使用@primary注解,告诉Springboot
//优先使用我们自己的DataSource
@Primary
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);;
dataSource.setUrl(jdbcUrl);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setInitialSize(initialSize);
dataSource.setMaxActive(maxActive);
dataSource.setMinIdle(minIdle);
dataSource.setMaxWait(maxWait);
dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
return dataSource;
}
}
ApplicationMybatisConfig.java
@Configuration
public class ApplicationMybatisConfig {
//这里在测试的时候使用Autowired的方式无法注入
//@Autowired
//DataSource dataSource;
//以参数传进的方式,springboot会根据引用自动地注入dataSource
@Bean(name="sqlSessionFactory")
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] mapperXmlResource = resolver.getResources("classpath:mapper/*/*Mapper.xml");
sqlSessionFactory.setDataSource(dataSource);
sqlSessionFactory.setMapperLocations(mapperXmlResource);
sqlSessionFactory.setTypeAliasesPackage("boot.po");
return sqlSessionFactory;
}
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("boot.dao");
msc.setSqlSessionFactoryBeanName("sqlSessionFactory");
return msc;
}
}
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/elearning?useUnicode=true&characterEncoding=UTF-8&serverTimeZone=GMT&useSSL=false
jdbc.username=root
jdbc.password=root
jdbc.initialSize=20
jdbc.minIdle=100
jdbc.maxActive=1
jdbc.maxWait=6000
jdbc.timeBetweenEvictionRunsMillis=3000
jdbc.minEvictableIdleTimeMillis=3000
controller,service,dao,po,mapper的写法照旧。
启动测试 :
选择入口类,运行java程序。便可以进行访问测试。