连接池
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">
也可以,而且还会省一步。
我们一般不用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>
分页
Oracle的分页需要嵌套查询,如上图,先查所有的,然后查询<=20条的,最后查询>=10的,三层查询。Oracle分页下标从1开始,MySQL从0开始。
为了解决不同数据库问题,用PageHelper
PageHelper是由国人开发的MyBatis分页插件,支持多种常用的数据库,可以极大的简化分页的业务逻辑
环境配置
reasonable(合理的),设置为true,为自动解决pageNum<=0等情况。