(最全)Springboot整合mybatis并且引入C3P0连接池

** 翻阅了几小时Springboot整合mybatis并且引入C3P0连接池的Demo发现很多不是抄袭的就是有bug的,废话不多说,直接上代码(以下纯属个总结):**

首先是springboot整合mybatis

文件结构如下

**

  1. 引入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>
  1. 创建Dao 创建Mapper映射文件,书写mysql语句
    实体类
    映射接口namespace必须与你的dao接口一一对应,否则报错

  2. 引入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>
  1. 配置数据源、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
  1. 扫描需要映射的文件
这个必须得有,在启动端口设置
```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总结的,欢迎各位大佬指教。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值