一、Spring Boot 整合 Druid
Druid 是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括 DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。
引入依赖
在 pom.xml
文件中引入 druid-spring-boot-starter
依赖
com.alibaba
druid-spring-boot-starter
1.1.10
引入数据库连接依赖
mysql
mysql-connector-java
runtime
配置 application.yml
在 application.yml
中配置数据库连接
spring:
datasource:
druid:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
initial-size: 1
min-idle: 1
max-active: 20
test-on-borrow: true
# MySQL 8.x: com.mysql.cj.jdbc.Driver
driver-class-name: com.mysql.jdbc.Driver
二、Spring Boot 整合 tk.mybatis
tk.mybatis 是在 MyBatis 框架的基础上提供了很多工具,让开发更加高效。
引入依赖
在 pom.xml
文件中引入 mapper-spring-boot-starter
依赖,该依赖会自动引入 MyBaits 相关依赖
tk.mybatis
mapper-spring-boot-starter
2.0.2
配置 application.yml
mybatis:
type-aliases-package: 实体类的存放路径,如:cn.ishangit.hello.spring.boot.entity
mapper-locations: classpath:mapper/*.xml
创建一个通用的父级接口
主要作用是让 DAO 层的接口继承该接口,以达到使用 tk.mybatis 的目的
package cn.ishangit.util;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
/**
* 自己的 Mapper
* 特别注意,该接口不能被扫描到,否则会出错
*/
public interface MyMapper extends Mapper, MySqlMapper {
}
三、Spring Boot 整合 PageHelper
引入依赖
在 pom.xml
文件中引入 pagehelper-spring-boot-starter
依赖
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.5
使用案例见:测试Mybatis操作数据库
四、使用Maven 插件生成代码
配置插件
在 pom.xml
文件中增加 mybatis-generator-maven-plugin
插件
org.springframework.boot
spring-boot-maven-plugin
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.5
${basedir}/src/main/resources/generator/generatorConfig.xml
true
true
mysql
mysql-connector-java
${mysql.version}
tk.mybatis
mapper
3.3.9
自动生成的配置
在 src/main/resources/generator/
目录下创建 generatorConfig.xml
配置文件:
配置数据源
# MySQL 8.x: com.mysql.cj.jdbc.Driver
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
jdbc.username=root
jdbc.password=root
插件自动生成命令
mvn mybatis-generator:generate
完整配置案例
五、测试 tk.MyBatis 操作数据库
修改入口类
需要使用 @MapperScan
注解来指定 Mapper 接口的路径
::: tip 注意:
这里的 @MapperScan
注解是 tk.mybatis.spring.annotation.MapperScan
包下的
:::
package cn.ishangit.hellospringboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan(basePackages = "cn.ishangit.hellospringboot.dao")
public class HellospringbootApplication {
public static void main(String[] args) {
SpringApplication.run(HellospringbootApplication.class, args);
}
}
创建测试类
package cn.ishangit.hellospringboot;
import cn.ishangit.hellospringboot.dao.UserMapper;
import cn.ishangit.hellospringboot.entity.User;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
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.context.junit4.SpringRunner;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
/**
* @description:
* @author: Chen
* @create: 2019-06-20 19:56
**/
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestMybatis {
/**
* 注入数据查询接口
*/
@Autowired
private UserMapper userMapper;
/**
* 测试插入数据
*/
@Test
public void testInsert() {
// 构造一条测试数据
User user = new User();
user.setUserId(11);
user.setUserName("springboot测试");
user.setUserPassword("1111");
user.setUserState("1");
// 插入数据
userMapper.insert(user);
}
/**
* 测试删除数据
*/
@Test
public void testDelete() {
// 构造条件,等同于 DELETE from tb_user WHERE username = ''
Example example = new Example(User.class);
example.createCriteria().andEqualTo("userName", "springboot测试");
// 删除数据
userMapper.deleteByExample(example);
}
/**
* 测试修改数据
*/
@Test
public void testUpdate() {
// 构造条件
Example example = new Example(User.class);
example.createCriteria().andEqualTo("userName", "666");
// 构造一条测试数据
User tbUser = new User();
tbUser.setUserName("ishangit");
tbUser.setUserPassword("123456");
tbUser.setUserCode("15888888888");
tbUser.setUserState("2");
// 修改数据
userMapper.updateByExample(tbUser, example);
}
/**
* 测试查询集合
*/
@Test
public void testSelect() {
List tbUsers = userMapper.selectAll();
for (User tbUser : tbUsers) {
System.out.println(tbUser.getUserName());
}
}
/**
* 测试分页查询
*/
@Test
public void testPage() {
// PageHelper 使用非常简单,只需要设置页码和每页显示笔数即可
PageHelper.startPage(0, 2);
// 设置分页查询条件
Example example = new Example(User.class);
PageInfo pageInfo = new PageInfo(userMapper.selectByExample(example));
// 获取查询结果
List tbUsers = pageInfo.getList();
for (User tbUser : tbUsers) {
System.out.println(tbUser.getUserName());
}
}
}