这篇文章主要讲述的是SpringBoot整合Mybatis时的几个快速开发小技巧,能让我们在开发项目时达到尽量少写SQL语句或最好不写SQL语句的快速开发效果
Druid 是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和 SQL 解析器组成。该项目主要是为了扩展 JDBC 的一些限制,可以让程序员实现一些特殊的需求,比如向密钥服务请求凭证、统计 SQL 信息、SQL 性能收集、SQL 注入检查、SQL 翻译等,程序员可以通过定制来实现自己需要的功能。
Druid 是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid 已经在阿里巴巴部署了超过 600 个应用,经过多年生产环境大规模部署的严苛考验。Druid 是阿里巴巴开发的号称为监控而生的数据库连接池!
在pom.xml
文件中引入druid-spring-boot-starter
的依赖
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druid-spring-boot-starterartifactId>
<version>1.1.10version>
dependency>
引入数据库连接依赖
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
在 application.xml
中配置数据库连接
spring:
datasource:
druid:
url: jdbc:mysql://ip:port/dbname?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
password: 123456
initial-size: 1
min-idle: 1
max-active: 20
test-on-borrow: true
driver-class-name: com.mysql.jdbc.Driver
tk.mybatis是MyBatis框架的基础上提供了很多工具,让开发更加高效
在pom.xml
文件中引入mapper-spring-boot-starter
依赖,该依赖会自动引入 MyBaits 相关依赖
<dependency>
<groupId>tk.mybatisgroupId>
<artifactId>mapper-spring-boot-starterartifactId>
<version>2.1.5version>
dependency>
application.yml
配置myBatis
mybatis:
type-aliases-package: 实体类的存放路径,如:com.springboot.mybatisplus.entity
mapper-locations: classpath:mapper/*.xml
主要作用是让 DAO 层的接口继承该接口,以达到使用 tk.mybatis 的目的
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
/**
* 自己的 Mapper
* 特别注意,该接口不能被扫描到,否则会出错
* Title: MyMapper
*/
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
}
这边需要注意的是Mapper不是mybatis中的mapper(org.apache.ibatis.annotations.Mapper),而是tk.mybatis.mapper.common.Mapper中的。
我们无需手动编写 实体类、DAO、XML 配置文件,只需要使用 MyBatis 提供的一个Maven插件就可以自动生成所需的各种文件便能够满足基本的业务需求,如果业务比较复杂只需要修改相关文件即可。
在pom.xml
文件中增加mybatis-generator-maven-plugin
插件
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generatorgroupId>
<artifactId>mybatis-generator-maven-pluginartifactId>
<version>1.3.5version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xmlconfigurationFile>
<overwrite>trueoverwrite>
<verbose>trueverbose>
configuration>
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>${mysql.version}version>
dependency>
<dependency>
<groupId>tk.mybatisgroupId>
<artifactId>mapperartifactId>
<version>3.4.4version>
dependency>
dependencies>
plugin>
plugins>
build>
在src/main/resources/generator/
目录下创建generatorConfig.xml
配置文件:
<generatorConfiguration>
<properties resource="jdbc.properties"/>
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.MyMapper"/>
plugin>
<jdbcConnection
driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.connectionURL}"
userId="${jdbc.username}"
password="${jdbc.password}">
jdbcConnection>
<javaModelGenerator targetPackage="com.springboot.mybatisplus.entity" targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
<javaClientGenerator
targetPackage="com.springboot.mybatisplus.mapper"
targetProject="src/main/java"
type="XMLMAPPER"/>
<table catalog="myshop" tableName="%">
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
table>
context>
generatorConfiguration>
在src/main/resources
目录下创建jdbc.properties
数据源配置:
# MySQL 8.x: com.mysql.cj.jdbc.Driver
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://ip:port/dbname?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
jdbc.username=root
jdbc.password=123456
一切准备工作完成后,点击最右边的Maven
图标
成功之后会在控制台里显示
同时,会在左边目录栏里显示所生成的代码
PageHelper 是 Mybatis 的分页插件,支持多数据库、多数据源。可以简化数据库的分页查询操作,整合过程也极其简单,只需引入依赖即可。
在pom.xml
文件中引入pagehelper-spring-boot-starter
依赖
<dependency>
<groupId>com.github.pagehelpergroupId>
<artifactId>pagehelper-spring-boot-starterartifactId>
<version>1.2.10version>
dependency>
这里我就在测试类里进行简单的测试,代码如下:
package com.springboot.mybatisplus;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.springboot.mybatisplus.entity.TbItem;
import com.springboot.mybatisplus.entity.TbUser;
import com.springboot.mybatisplus.mapper.TbItemMapper;
import com.springboot.mybatisplus.mapper.TbUserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootMybatisPlusApplication.class)
@Transactional
@Rollback
public class SpringbootMybatisPlusApplicationTests {
@Autowired
private TbItemMapper tbItemMapper;
/**
* 测试分页查询
*/
@Test
public void testPage() {
// PageHelper 使用非常简单,只需要设置页码和每页显示条数即可
PageHelper.startPage(1, 10);
// 设置分页查询条件
Example example = new Example(TbItem.class);
PageInfo<TbItem> pageInfo = new PageInfo<>(tbItemMapper.selectByExample(example));
// 获取查询结果
List<TbItem> tbItems = pageInfo.getList();
for (TbItem tbItem : tbItems) {
System.out.println(tbItem.getTitle());
}
}
}