SpringBoot入门4

整合SpringBoot连接池
  • java为数据库连接池提供了公共的接口:DataSource
  • 常见的连接池:CP30,DBCP,DRUID,hikariCP
  • 用户调用getConnection()方法获得一个连接。如果连接池里没有连接,就会调用Driver(驱动)对象的connec()方法从数据中获取,并在连接池中存放一份,然后将连接返回给调用方。
整合HikariCP连接池
  • 1.添加依赖

image.png

  • 2.配置连接池
    spring.datasource.url=jdbc:mysql://localhost:3306/数据库?serverTimezone=GMT%2B8
    spring.datasource.username=root
    spring.datasource.password=root

@SpringBootTest
public class TestDataSource {

    // dataSource对象在运行时指向的具体对象是什么?HikariDataSource
    // dataSource是谁创建的?spring框架(基于底层自动配置)

    @Autowired
    private DataSource dataSource;

    @Test
    void testSource() throws SQLException {
        System.out.println(dataSource.getClass().getName());// com.zaxxer.hikari.HikariDataSource
        // 获取连接的过程?getConnection()查询是否有连接池,没有就构建
        // 基于Driver对象创建连接,并将链接放入池中,最后从池中获取用户需要的链接
        Connection connection = dataSource.getConnection();
        System.out.println(connection);

    }

}
整合MyBatis框架

image.png

  • 配置文件:
mybatis.configuration.default-statement-timeout=30
mybatis.configuration.map-underscore-to-camel-case=true
// sql映射的映射文件方式
mybatis.mapper-locations=classpath:/mapper/*/*.xml

// 日志输出
logging.level.com.cy=DEBUG
代码测试(按id删除数据库内容)
  • 初始化数据库
drop database if exists dbgoods;
create database dbgoods default character set utf8;
use dbgoods;
create table tb_goods(
     id bigint primary key auto_increment,
     name varchar(100) not null,
     remark text,
     createdTime datetime not null
)engine=InnoDB;
insert into tb_goods values (null,'java','very good',now());
insert into tb_goods values (null,'mysql','RDBMS',now());
insert into tb_goods values (null,'Oracle','RDBMS',now());
insert into tb_goods values (null,'java','very good',now());
insert into tb_goods values (null,'mysql','RDBMS',now());
insert into tb_goods values (null,'Oracle','RDBMS',now());
insert into tb_goods values (null,'java','very good',now());
insert into tb_goods values (null,'mysql','RDBMS',now());
insert into tb_goods values (null,'Oracle','RDBMS',now());
insert into tb_goods values (null,'java','very good',now());
insert into tb_goods values (null,'mysql','RDBMS',now());
insert into tb_goods values (null,'Oracle','RDBMS',now());


  • 创建com.py.pj.goods.dao.GoodsDao.java
package com.py.pj.goods.dao;



import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface GoodsDao {

    int deleteObjects(Integer... ids);
    
    @Delete("delete from tb_goods where id=#{id}")
    int deleteById(Integer id);

}
  • 创建测试类 com.py.pj.goods.dao.TestDataSource.java
package com.py.pj.goods.dao;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
* @author WL
* @version 创建时间:2020-8-29 9:39:21
* @Description 测试mapper注释的接口功能
*/
@SpringBootTest
public class TestGoodsDao {
    
    /**
     *     关联数据层接口,并由spring注入值
     * 1.GoodsDao指向的对象是谁?由谁创建?由谁管理?
     * $Proxy56是代理对象  /由mybatis创建/   Spring框架         
     * 2.GoodsDao指向的对象内部会做什么事情?
     *     基于mybatis API进行会话操作。此变量指向的对象,底层会通过mybatis中的sqlsession实现与数据库对话    
     */
    
    //GoodsDao接口的实现类$Proxy56由mybatis创建,mybatis底层基于反射使用到了Proxy类,
    @Autowired
    private GoodsDao goodsdao; //此变量指向的对象,底层会通过mybatis中的sqlsession实现与数据库对话    
    
    
    @Test
    public void testGoods() {
        int rows = goodsdao.deleteById(3);
        System.out.println(rows);
    }
    
    @Test
    void testDeleteObjects() {
        int rows = goodsdao.deleteObjects( );
        System.out.println(rows);
        
    }

}
  • 创建映射文件

    image.png

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.py.pj.goods.dao.GoodsDao">


    <!--  -->
    <delete id="deleteObjects">
        delete from tb_goods where id in
        <foreach collection="ids" open="(" close=")" separator=","
            item="id">
            #{id}
        </foreach>
    </delete>
</mapper>

流浪成疯
7 声望3 粉丝

学习