笔记-MyBatis(二):连接池、分页

187 阅读1分钟

连接池

MyBatis内置有连接池技术。

<!-- POOLED代表采取连接池的方式管理连接 -->
<dataSource type="POOLED">
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test_mybatis"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</dataSource>

原理是:内部的PooledDataSourceFactory类,重新赋值了dataSource

public class PooledDataSourceFactory extends UnpooledDataSourceFactory {
  public PooledDataSourceFactory() {
    this.dataSource = new PooledDataSource();
  }
}

所以配置:

<dataSource type="UNPOOLED">

也可以,而且还会省一步。

image.png

我们一般不用MyBatis内置的连接池,用阿里的Druid. 引入:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.22</version>
</dependency>

根据上面所讲的原理,我们就要重新赋值dataSource.随意创建类继承PooledDataSourceFactory

public class DruidDataSourceFactory extends PooledDataSourceFactory {
    public DruidDataSourceFactory() {
        this.dataSource = new DruidDataSource();
    }
}

当然继承UnpooledDataSourceFactory也可以,而且更好:

public class DruidDataSourceFactory extends UnpooledDataSourceFactory {
    public DruidDataSourceFactory() {
        this.dataSource = new DruidDataSource();
    }
}

配置mybatis-config.xml

1.设置别名

    <typeAliases>
        <typeAlias type="com.mj.common.DruidDataSourceFactory" alias="druid"/>
    </typeAliases>

2.配置参数

<environment id="production">
    <!-- 采用JDBC的事务管理方法 -->
    <transactionManager type="JDBC" />

    <!-- POOLED代表采取连接池的方式管理连接 -->
    <dataSource type="DRUID">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/sxl1"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
        <property name="initialSize" value="5"/>
        <property name="maxActive" value="10"/>
        <property name="maxWait" value="5000"/>
    </dataSource>
</environment>

druid有一定的容错能力,name=driverClassName 或 name=driverClass, name=jdbcUrl;都行,但name=driver不行,druid会读取配置的参数,然后初始化属性,没有driver这个属性。

3.可以读取外部配置

创建druid.properties文件:

dev.driverClass=com.mysql.jdbc.Driver
dev.url=jdbc:mysql://localhost:3306/xxx
dev.username=xxx
dev.password=xxx
dev.initialSize=5
dev.maxActive=10
dev.maxWait=5000

pdr.driverClass=com.mysql.jdbc.Driver
pdr.url=jdbc:mysql://localhost:3306/xxx
pdr.username=xxx
pdr.password=xxx
pdr.initialSize=5
pdr.maxActive=10
pdr.maxWait=5000

mybatis-config.xml引入

//引入外部配置文件
<properties resource="druid.properties" />
// 不外部引入也可以,配置写在这里,下面引用
<!--    <properties>-->
<!--        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>-->
<!--        <property name="url" value="jdbc:mysql://localhost:3306/"/>-->
<!--        <property name="username" value="xxx"/>-->
<!--        <property name="password" value="xxx"/>-->
<!--        <property name="initialSize" value="5"/>-->
<!--        <property name="maxActive" value="10"/>-->
<!--        <property name="maxWait" value="5000"/>-->
<!--    </properties>-->

下面引用:

<dataSource type="DRUID">
    <property name="driverClass" value="${dev.driverClass}"/>
    <property name="url" value="${dev.url}"/>
    <property name="username" value="${dev.username}"/>
    <property name="password" value="${dev.password}"/>
    <property name="initialSize" value="${dev.initialSize}"/>
    <property name="maxActive" value="${dev.maxActive}"/>
    <property name="maxWait" value="${dev.maxWait}"/>
</dataSource>

分页

image.png

Oracle的分页需要嵌套查询,如上图,先查所有的,然后查询<=20条的,最后查询>=10的,三层查询。Oracle分页下标从1开始,MySQL从0开始。

为了解决不同数据库问题,用PageHelper

PageHelper是由国人开发的MyBatis分页插件,支持多种常用的数据库,可以极大的简化分页的业务逻辑

源码

使用方法

环境配置

image.png

reasonable(合理的),设置为true,为自动解决pageNum<=0等情况。

使用方法

image.png