前几天有同事想要用IDEA创建SpringBoot项目并集成Mybatis和MySQL,一时间没有帮他搞定,于是第二天自己琢磨了一下,记录一下以备后期使用:
1.首先创建SpringBoot环境
创建环境在之前的博客中也有描述过,这里不多介绍,如果有不会的请看我之前的文章,飞机票:https://blog.csdn.net/u013364067/article/details/83304638
最后项目目录结构如下:
为了方便起见,既然是集成MySQL和Mybatis,那么需要在pom.xml中引入除了创建工程之外的依赖包,并且在build标签中加入编译mapper.xml的配置,如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.zj</groupId>
<artifactId>ssm</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ssm</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.jolbox</groupId>
<artifactId>bonecp-spring</artifactId>
<version>0.8.0.RELEASE</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.SpringBoot集成MySQL和Mybatis
1>新建jdbc.properties和mybatis-config.xml,然后在包下创建config包,目录结构如下图:
首先是jdbc.properties内容,接触过MySQL配置的应该都清楚里面是啥,这里需要强调的一个内容:serverTimezone=UTC,MySQL jdbc 6.0 版本以上必须配置此参数,原因是MySQL jdbc6.0以上版本加入了时区的概念,配置如下:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/user?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
jdbc.username=root
jdbc.password=root
数据库对应的sql如下:
创建user数据库:
careate database user;
创建表语句:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(500) DEFAULT NULL COMMENT '姓名',
`sex` char(1) DEFAULT NULL COMMENT '性别 1:男 0:女',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES ('1', '张三', '1', '2019-01-29 11:02:16');
INSERT INTO `user` VALUES ('2', '李四', '0', '2019-01-28 11:02:27');
然后是mybatis-config.xml内容,直接贴上代码,如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 定义 别名 -->
<typeAliases>
</typeAliases>
<mappers>
</mappers>
</configuration>
2>配置完MySQL和Mybatis配置文件之后,就是非常重要的集成内容了,具体步骤如下:
1.读取数据库配置文件ApplicationDB.java,内容如下:
import com.jolbox.bonecp.BoneCPDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;
@Configuration
@PropertySource(value = {"classpath:jdbc.properties",
"classpath:application.properties" })
@ComponentScan(basePackages = "com.zj")
public class ApplicationDB /*extends SpringBootServletInitializer*/{
@Value("${jdbc.url}")
private String jdbcUrl;
@Value("${jdbc.driverClassName}")
private String jdbcDriverClassName;
@Value("${jdbc.username}")
private String jdbcUsername;
@Value("${jdbc.password}")
private String jdbcPassword;
@Bean(destroyMethod = "close")
public DataSource dataSource() {
BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
boneCPDataSource.setDriverClass(jdbcDriverClassName);
boneCPDataSource.setJdbcUrl(jdbcUrl);
boneCPDataSource.setUsername(jdbcUsername);
boneCPDataSource.setPassword(jdbcPassword);
boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
boneCPDataSource.setIdleMaxAgeInMinutes(30);
boneCPDataSource.setMaxConnectionsPerPartition(100);
boneCPDataSource.setMinConnectionsPerPartition(5);
return boneCPDataSource;
}
}
2.为了让SpringBoot项目能读取到Mybatis自动生成的mapper类,因此配置MapperScannerConfig类和MyBatisConfig类,代码如下:
MapperScannerConfig.java
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@AutoConfigureAfter(MyBatisConfig.class)
public class MapperScannerConfig {
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("com.zj");
return mapperScannerConfigurer;
}
}
MyBatisConfig.java:
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
public class MyBatisConfig {
@Autowired
private DataSource dataSource;
@Bean
@ConditionalOnMissingBean//当容器里没有指定的Bean的情况下创建该对象
public SqlSessionFactoryBean sqlSessionFactoryBean() {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
// 设置数据源
sqlSessionFactoryBean.setDataSource(dataSource);
// 设置mybatis的主配置文件
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource mybatisConfigXml = resolver.getResource("classpath:mybatis-config.xml");
sqlSessionFactoryBean.setConfigLocation(mybatisConfigXml);
return sqlSessionFactoryBean;
}
}
那么到这里呢,Spring Boot就已经集成了MySQL和Mybatis了,这里就不写测试类了,有需要完整项目(包括测试类)的朋友可以留言跟我要,或者土豪的话可以直接去下载