Java 从 0 到架构师目录:【Java从0到架构师】学习记录
集成 druid 连接池
添加 maven 依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
新建一个继承 UnpooledDataSourceFactory 的连接池类,在构造方法中设置数据源:
public class DruidDataSourceFactory extends UnpooledDataSourceFactory {
public DruidDataSourceFactory() {
this.dataSource = new DruidDataSource();
}
}
在 environment 标签中配置连接池的类名:
<dataSource type="com.mj.common.DruidDataSourceFactory">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/xr2"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
可以给数据库连接池配置别名:
<typeAliases>
<!-- 一旦设置了别名,它是不区分大小写的 -->
<typeAlias type="com.mj.common.DruidDataSourceFactory" alias="druid" />
</typeAliases>
<!-- 别名不区分大小写 -->
<dataSource type="DRUID">
<!-- .... -->
</dataSource>
读取外部的配置文件
将 druid.properties 放在 resources 下
在 mybatis-config.xml 中读取配置文件:
<properties resource="druid.properties" />
利用 ${}
的语法从 druid.properties 文件中取值:
<dataSource type="com.mj.common.DruidDataSourceFactor">
<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>
分页查询 - PageHelper
不同数据库的分页查询 SQL 可能是不一样的,比如:每页 10 条数据,查询第 2 页(第 11 ~ 20 条记录)
MySQL 实现:
SELECT * FROM student LIMIT 10, 10;
SQL Server 实现:
SELECT * FROM student
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
Oracle 实现:
SELECT * FROM
(
SELECT s.*, ROWNUM rn
FROM (SELECT * FROM student) s
WHERE ROWNUM <= 20
)
WHERE rn >= 11;
所以,在 MyBatis 中使用不同的数据库,就需要编写不同的分页查询 SQL
PageHelper 是由国人开发的 MyBatis 分页插件
- 支持多种常用的数据库,可以极大简化分页的业务逻辑
源码:https://github.com/pagehelper/Mybatis-PageHelper
使用方法:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
PageHelper 环境配置
引入 maven 依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
在 mybatis-config.xml 中配置插件:
注意:mybatis-config.xml 中标签的书写是有顺序的,可以利用先随便写个位置,然后查看报错信息
<plugins>
<!-- PageHelper会去拦截MyBatis的SQL, 并重组成分页查询的SQL语句 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- reasonable设置为true代表分页合理化:
pageNum <= 0 就会自动获取第1页
pageNum > pages 就会自动获取最后1页
-->
<property name="reasonable" value="true"/>
</plugin>
</plugins>
reasonable 设置为 true:
- pageNum < = 0 时会查询第一页
- pageNum > pages(超过总页数时),会查询最后一页
PageHelper 使用方法
<select id="list" resultType="com.mj.bean.Skill">
SELECT * FROM skill
</select>
Java 代码中设置分页参数,再进行查询:
// 设置分页参数(第2页,每页5条记录)
PageHelper.startPage(2, 5);
// 查询
List<Skill> skills = session.selectList("skill.list");