** 翻阅了几小时Springboot整合mybatis并且引入C3P0连接池的Demo发现很多不是抄袭的就是有bug的,废话不多说,直接上代码(以下纯属个总结):**
首先是springboot整合mybatis
**
- 引入POM依赖
<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>
<!--整合mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-bootstarter</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
-
创建Dao 创建Mapper映射文件,书写mysql语句
-
引入mybatis核心文件
<?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>
<settings>
<!--使用jdbc的getGeneratedKeys获取数据库自增主键值-->
<setting name="useGeneratedKeys" value="true"/>
<!--使用列别名代替列明-->
<setting name="useColumnLabel" value="true"/>
<!--开启驼峰命名-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
- 配置数据源、mybatis
mybatis配置文件:
<?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>
<settings>
<!--使用jdbc的getGeneratedKeys获取数据库自增主键值-->
<setting name="useGeneratedKeys" value="true"/>
<!--使用列别名代替列明-->
<setting name="useColumnLabel" value="true"/>
<!--开启驼峰命名-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
书写yml文件,此处的prd是测试需要启动的配置文件
spring:
profiles:
active: prd
配置文件如下:
#本地测试使用的端口的是80
server:
port: 80
#不使用连接池
#数据源
spring:
datasource:
url: jdbc:mysql://你的url/你的数据库?useUnicode=true&characterEcoding=utf8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT
driver-class-name: com.mysql.cj.jdbc.Driver
password: 数据库密码
username: 数据库账号
mybatis:
#实体包别名代替全称
type-aliases-package: com.example.demo.entity
#sql语句的映射文件
mapper-locations: classpath:mapper/*.xml
#mybatis核心配置文件
config-location: classpath:mybatis-config.xml
- 扫描需要映射的文件
这个必须得有,在启动端口设置
```java
package com.example.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
//扫描映射的接口
@MapperScan(basePackages = "com.example.demo.dao")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
实体类
package com.example.demo.entity;
import java.util.Date;
public class Area {
private Integer areaId;
private String areaName;
private Integer priority;
private Date createTime;
private Date lastEditTime;
public Area() {
}
public Area(Integer areaId, String areaName, Integer priority, Date createTime, Date lastEditTime) {
this.areaId = areaId;
this.areaName = areaName;
this.priority = priority;
this.createTime = createTime;
this.lastEditTime = lastEditTime;
}
public Integer getAreaId() {
return areaId;
}
public void setAreaId(Integer areaId) {
this.areaId = areaId;
}
public String getAreaName() {
return areaName;
}
public void setAreaName(String areaName) {
this.areaName = areaName;
}
public Integer getPriority() {
return priority;
}
public void setPriority(Integer priority) {
this.priority = priority;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getLastEditTime() {
return lastEditTime;
}
public void setLastEditTime(Date lastEditTime) {
this.lastEditTime = lastEditTime;
}
@Override
public String toString() {
return "Area{" +
"areaId=" + areaId +
", areaName='" + areaName + '\'' +
", priority=" + priority +
", createTime=" + createTime +
", lastEditTime=" + lastEditTime +
'}';
}
}
控制层
package com.example.demo.controller;
import com.example.demo.dao.AreaDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("/t1")
public class FirsetController {
@Autowired
private AreaDao areaDao;
@GetMapping("/t2")
@ResponseBody
public Map<String, Object> Test() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("s1", areaDao.queryList());
map.put("ss1", "哈啊哈哈");
return map;
}
}
启动项目测试,成功!
**
接下来引入C3P0连接池
**
- 引入依赖
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
- 修改yml的配置文件
#c3p0连接池
spring:
datasource:
c3p0:
type: com.mchange.v2.c3p0.ComboPooledDataSource
jdbcUrl: jdbc:mysql:你的url/数据库?useUnicode=true&characterEcoding=utf8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT
driver-class-name: com.mysql.cj.jdbc.Driver
user: 账号
password: 密码
maxPoolSize: 10
minPoolSize: 5
initialPoolSize: 3
autoCommitOnClose: false
maxIdleTime: 3000
idleConnectionTestPeriod: 60
checkoutTimeout: 10000
acquireIncrement: 3
#mybatis配置
mybatis:
#类型别名扫描基础包
type-aliases-package: 实体类所在包
#Sql映射文件
mapper-locations: classpath:mapper/*.xml
#mybatis核心配置文件
config-location: classpath:mybatis-config.xml
- 创建Configulation类注入
package com.liujia.o2o.config;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfiguration {
@Autowired
private DataSource dataSource;
//指定当前对象作为bean
@Bean("dataSource")
//指定dataSource来DI
@Qualifier(value = "dataSource")
//primary将当前数据库连接池作为默认数据库连接池
@Primary
//在application.yml文件中增加的前缀spring.datasource.c3p0
@ConfigurationProperties(prefix = "spring.datasource.c3p0")
public DataSource dataSource() {
DataSource dataSource = DataSourceBuilder.create().type(com.mchange.v2.c3p0.ComboPooledDataSource.class).build();
return dataSource;
}
}
- 启动项目
总结:
1、配置文件yml的双赢号后必须有空格,否则报错
2、必须得有扫描接口的注解@MapperScan,否则Mapper文件无法映射到接口
3、mybatis的datasource是自动注入到spring里面的,无需要配置相关类
4、引入C3P0连接池则需要重新配置类,DataSource的YML有个坑就是url必须是jdbcUrl
5、最后映射文件想要与接口绑定,否则出现无法绑定错误:
namespac名字需要与接口包名一毛一样
配置文件type-aliases-package对应的实体类所在包不要写错哦
@MapperScan扫描接口,扫描
初学springBoot总结的,欢迎各位大佬指教。