SpringBoot使用HikriCP数据源连接池整合Mybatis,MappperXML版

Springboot2.0之后,推荐使用HikriCP作为数据源连接池,笔者也查过多方的资料,虽然没有测过HikriCP的效率和性能,但是多方验证它很强,Spring也默认,必定有它的道理

那么今天我们就使用HikriCP来整合SpringBoot和Mybatis,Mybatis是XML版的,笔者之后会发注解版的和混合版的。

开始吧,首先的数据源要有,笔者采用的是MySQL8.0.16版,查询超级快的版本。

有了数据源,那么我们就开始配置mybatis吧。

pom.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.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.wangye</groupId>
    <artifactId>spboot-mybatis1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spboot-mybatis1</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.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 注意:一定要有mysql-connector-java 和 mybatis-spring-boot-starter ,并且mybatis-spring-boot-starter需要指定版本,不然会报错。

接下来,就是application.properties文件的配置了(笔者喜欢使用properties文件,不喜欢使用yaml文件,因为yaml文件,不能很好的把配置分开)。

# 数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useSSL=false
# 数据库驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 用户名
spring.datasource.username=root
# 密码
spring.datasource.password=root
#自动提交 默认值true
spring.datasource.hikari.auto-commit=true
#此属性控制客户端(即您)将等待来自池的连接的最大毫秒数。 默认值30000(30秒)
spring.datasource.hikari.connection-timeout=30000
#此属性控制允许连接在池中闲置的最长时间。 默认值600000(10分钟),此设置仅适用于minimumIdle定义为小于maximumPoolSize。
spring.datasource.hikari.idle-timeout=600000
#此属性控制池中连接的最大生存期。 1800000(30分钟)
spring.datasource.hikari.max-lifetime=1800000
#该属性控制HikariCP尝试在池中维护的最小空闲连接数。不推荐使用这个,默认是和maximum-pool-size相等
spring.datasource.hikari.minimum-idle=100
#此属性控制池允许达到的最大大小,包括空闲和正在使用的连接。默认值10
spring.datasource.hikari.maximum-pool-size=100

#mybatis对应的映射文件路径
mybatis.mapper-locations=classpath:mapper/*.xml

#mybatis对应的实体类
mybatis.type-aliases-package=com.wangye.spbootmybatis1.model

注意:

因为使用的是SpringBoot2.0以上的版本,SpringBoot默认使用的就是HikriCP连接池数据源。所以不需要有特殊的配置。

配置已经配置完了,先看一下目录结构,主要是看XML和Model实体类的在哪,因为mybatis要去扫描的。

 注意:

mapperXML一定要和配置文件中 mybatis.mapper-locations=classpath:mapper/*.xml 匹配

model实体类一定要和配置文件中 mybatis.type-aliases-package=com.wangye.spbootmybatis1.model匹配

接下来就是写代码

UserMapper.xml

<?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.wangye.spbootmybatis1.mapper.UserMapper">

    <select id="getUserById" resultType="com.wangye.spbootmybatis1.model.User">
        select
            id as id,
            name as name,
            age as age
        from
            user
        where
            id = #{id}
    </select>

</mapper>

注意namespace要和mapper(dao)具体的接口映射

UserMapper.java

@Repository
public interface UserMapper {

    User getUserById(@Param("id") Long id);

}

使用@Repository说明它是一个持久类型的组件

UserService.java

@Service
public class UserService {


    private UserMapper userMapper;

    // Spring推荐在不强制依赖的时候,使用这种方式注入
    @Autowired
    public void setUserMapper(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    public User getUserById(Long id) {

        return userMapper.getUserById(id);
    }
}

上面的代码的注入方式是Spring推荐的,详情见笔者另一篇博客:如何消除@Autowired报Field injection is not recommended的警告

还有UserController.java

@RestController
public class UserController {

    private UserService userService;

    @Autowired
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    @RequestMapping("/getUserById/{id}")
    public User getUserById(@PathVariable("id") Long id){
        return userService.getUserById(id);
    }
}

启动类:

@SpringBootApplication
@MapperScan("com.wangye.spbootmybatis1.mapper")
public class SpbootMybatis1Application {

    public static void main(String[] args) {
        SpringApplication.run(SpbootMybatis1Application.class, args);
    }

}

注意注解@MapperScan("com.wangye.spbootmybatis1.mapper"),mybatis不仅要加载XML还要加载mapper接口,两者之间是需要做映射的。

然后启动,访问接口,就能实现一个简单的用户查询功能了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值