【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程

前言

涉及的技术栈:springboot、mybatis、分页插件pagehelper、Druid数据源

gitee源码地址https://gitee.com/shawsongyue/sevenhee_modules/tree/master/springboot_mybatis

1.基础maven依赖

<!--MyBatis分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.10</version>
        </dependency>
        <!--druid数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--Mysql数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        
        <!--单元测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        
        <!--集成springmvc框架并实现自动配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

2.目录结构与配置文件

#服务配置
server:
  port: 8080
#spring配置
spring:
  #数据源
  datasource:
    url: jdbc:mysql://localhost:3306/sevenhee_modules?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: gnnykj.2020
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 60000
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 30000
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: true
      test-on-return: false
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      filter:
        stat:
          merge-sql: true
          slow-sql-millis: 5000
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
        session-stat-enable: true
        session-stat-max-count: 100
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        reset-enable: true
        login-username: admin
        login-password: admin
        allow: 127.0.0.1
#mybatis配置
mybatis:
  #xml文件配置路径(两种选择)
  mapper-locations:
    #资源目录
#    - classpath:mapper/*.xml
    #src文件目录下
    - classpath*:com/**/mapper/impl/*.xml
  #实体类别名配置
  type-aliases-package: com.xsy.sevenhee.modules.entity
#分页插件配置
pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countSql

3.创建数据库表

4.创建实体层(SysUser.class)

import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
 * 系统用户
 *
 * @author xiaosongyue
 * @date 2021/04/14 15:22:11
 */
@Data
@NoArgsConstructor
public class SysUser {
    private Long id;
    private String username;
    private String password;
    private Date createTime;
    private Date updateTime;
    private int deleted;
    private int version;
}

4.创建mapper层(SysUserMapper.class)

import com.xsy.sevenhee.modules.entity.SysUser;
import java.util.List;
/**
 * 系统用户映射器
 *
 * @author xiaosongyue
 * @date 2021/04/14 15:17:17
 */
public interface SysUserMapper {
    /**
     * 查询全部系统用户
     *
     * @return {@link List<SysUser>}
     */
    List<SysUser> selectAllSysUser();
    /**
     * 插入系统用户
     *
     * @param sysUser 系统用户
     * @return int
     */
    int insertSysUser(SysUser sysUser);
    /**
     * 删除系统用户
     *
     * @param id id
     * @return int
     */
    int deleteById(Long id);
    /**
     * 更新系统用户
     *
     * @param sysUser 系统用户
     * @return int
     */
    int updateSysUserById(SysUser sysUser);
}

4.创建xml映射文件(SysUserMapper.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xsy.sevenhee.modules.mapper.SysUserMapper">
    <select id="selectAllSysUser" resultType="SysUser">
        select * from sys_user
    </select>
    <insert id="insertSysUser" parameterType="SysUser">
        insert into sys_user values (#{id},#{username},#{password},#{createTime},#{updateTime},#{deleted},#{version})
    </insert>
    <delete id="deleteById" parameterType="Long">
        delete from sys_user where id=#{id}
    </delete>
    <update id="updateSysUserById" parameterType="SysUser">
        update sys_user set username=#{username},password=#{password},create_time=#{createTime},update_time=#{updateTime},deleted=#{deleted},version=#{version} where id=#{id}
    </update>
</mapper>

6.创建service层(SysUserService.class)

import com.github.pagehelper.PageInfo;
import com.xsy.sevenhee.modules.entity.SysUser;
import java.util.List;
/**
 * 系统用户服务
 *
 * @author xiaosongyue
 * @date 2021/04/14 15:53:23
 */
public interface SysUserService {
    /**
     * 获取全部用户
     *
     * @return {@link List<SysUser>}
     */
    List<SysUser> getAllSysUser();
    /**
     * 添加系统用户
     *
     * @param sysUser 系统用户
     * @return int
     */
    int addSysUser(SysUser sysUser);
    /**
     * 根据id删除用户
     *
     * @param id id
     * @return int
     */
    int deleteById(Long id);
    /**
     * 根据用户id修改用户信息
     *
     * @param sysUser 系统用户
     * @return int
     */
    int modifySysUserById(SysUser sysUser);
    /**
     * 获取全部用户,分页
     *
     * @param pageNum  页码
     * @param pageSize 页面大小
     * @return {@link PageInfo<SysUser>}
     */
    PageInfo<SysUser> getAllSysUserByPage(Integer pageNum, Integer pageSize);
}

6.创建service层实现类(SysUserServiceImpl.class)

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xsy.sevenhee.modules.entity.SysUser;
import com.xsy.sevenhee.modules.mapper.SysUserMapper;
import com.xsy.sevenhee.modules.service.SysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * 系统用户服务实现类
 *
 * @author xiaosongyue
 * @date 2021/04/14 15:55:13
 */
@Service
public class SysUserServiceImpl implements SysUserService {
    @Autowired
    private SysUserMapper sysUserMapper;
    @Override
    public List<SysUser> getAllSysUser() {
        return sysUserMapper.selectAllSysUser();
    }
    @Override
    public PageInfo<SysUser> getAllSysUserByPage(Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        return new PageInfo<>(sysUserMapper.selectAllSysUser());
    }
    @Override
    public int addSysUser(SysUser sysUser) {
        return sysUserMapper.insertSysUser(sysUser);
    }
    @Override
    public int deleteById(Long id) {
        return sysUserMapper.deleteById(id);
    }
    @Override
    public int modifySysUserById(SysUser sysUser) {
        return sysUserMapper.updateSysUserById(sysUser);
    }
}

7.创建controller层(SysUserController.class)

import com.github.pagehelper.PageInfo;
import com.xsy.sevenhee.modules.entity.SysUser;
import com.xsy.sevenhee.modules.service.SysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
/**
 * 系统用户控制器
 *
 * @author xiaosongyue
 * @date 2021/04/14 16:24:54
 */
@RestController
@RequestMapping("/sys_user")
public class SysUserController {
    @Autowired
    private SysUserService sysUserService;
    /**
     * 插入
     */
    @GetMapping("/insert")
    public void insert(){
        SysUser sysUser = new SysUser();
        sysUser.setId(22L);
        sysUser.setCreateTime(new Date());
        sysUser.setPassword("1234567");
        sysUser.setUpdateTime(new Date());
        sysUser.setDeleted(0);
        sysUser.setVersion(1);
        sysUser.setUsername("xsxsxsxs");
        System.out.println(sysUserService.addSysUser(sysUser));
    }
    /**
     * 删除通过id
     */
    @GetMapping("/deleteById")
    public void deleteById(){
        System.out.println(sysUserService.deleteById(22L));
    }
    /**
     * 更新
     */
    @GetMapping("/update")
    public void update(){
        SysUser sysUser = new SysUser();
        sysUser.setUsername("opopop");
        sysUser.setId(22L);
        sysUser.setCreateTime(new Date());
        sysUser.setPassword("1234dfasdsds567");
        sysUser.setUpdateTime(new Date());
        sysUser.setDeleted(0);
        sysUser.setVersion(1);
        System.out.println(sysUserService.modifySysUserById(sysUser));
    }
    /**
     * 获取所用用户
     */
    @GetMapping("/getAllSysUser")
    public void getAllSysUser(){
        List<SysUser> sysUsers = sysUserService.getAllSysUser();
        System.out.println("测试:"+sysUsers);
    }
    /**
     * 获取所有用户并分页
     */
    @GetMapping("/getAllSysUserByPage")
    public void getAllSysUserByPage(){
        PageInfo<SysUser> sysUsers = sysUserService.getAllSysUserByPage(1,3);
        System.out.println("分页测试:"+sysUsers);
    }
}

8.创建主启动类(MybatisApplication.class)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * mybatis应用程序
 *
 * @author xiaosongyue
 * @date 2021/04/14 15:44:28
 */
@SpringBootApplication
public class MybatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class,args);
    }
}

9.访问controller层接口测试

访问路径:http://localhost:8080/sys_user/getAllSysUser

10.访问druid数据源监控

访问路径:http://localhost:8080/druid/login.html

账号密码都是:admin

11.gitee源码地址:

https://gitee.com/shawsongyue/sevenhee_modules/tree/master/springboot_mybatis

12.若有问题,欢迎交流

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
22天前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
39 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
8天前
|
Java 程序员 调度
Java|PageHelper 怎么自作主张帮我分页?
没有调用 PageHelper.startPage,查询怎么也被自动分页了?
10 2
|
21天前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
34 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
22天前
|
SQL Java 数据库连接
mybatis使用二:springboot 整合 mybatis,创建开发环境
这篇文章介绍了如何在SpringBoot项目中整合Mybatis和MybatisGenerator,包括添加依赖、配置数据源、修改启动主类、编写Java代码,以及使用Postman进行接口测试。
14 0
mybatis使用二:springboot 整合 mybatis,创建开发环境
|
7天前
|
监控 安全 Java
在 Java 中使用线程池监控以及动态调整线程池时需要注意什么?
【10月更文挑战第22天】在进行线程池的监控和动态调整时,要综合考虑多方面的因素,谨慎操作,以确保线程池能够高效、稳定地运行,满足业务的需求。
77 38
|
4天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?
|
8天前
|
Java 调度
[Java]线程生命周期与线程通信
本文详细探讨了线程生命周期与线程通信。文章首先分析了线程的五个基本状态及其转换过程,结合JDK1.8版本的特点进行了深入讲解。接着,通过多个实例介绍了线程通信的几种实现方式,包括使用`volatile`关键字、`Object`类的`wait()`和`notify()`方法、`CountDownLatch`、`ReentrantLock`结合`Condition`以及`LockSupport`等工具。全文旨在帮助读者理解线程管理的核心概念和技术细节。
23 1
[Java]线程生命周期与线程通信
|
6天前
|
安全 Java
在 Java 中使用实现 Runnable 接口的方式创建线程
【10月更文挑战第22天】通过以上内容的介绍,相信你已经对在 Java 中如何使用实现 Runnable 接口的方式创建线程有了更深入的了解。在实际应用中,需要根据具体的需求和场景,合理选择线程创建方式,并注意线程安全、同步、通信等相关问题,以确保程序的正确性和稳定性。
|
4天前
|
缓存 Java 调度
Java中的多线程编程:从基础到实践
【10月更文挑战第24天】 本文旨在为读者提供一个关于Java多线程编程的全面指南。我们将从多线程的基本概念开始,逐步深入到Java中实现多线程的方法,包括继承Thread类、实现Runnable接口以及使用Executor框架。此外,我们还将探讨多线程编程中的常见问题和最佳实践,帮助读者在实际项目中更好地应用多线程技术。
11 3
|
6天前
|
监控 安全 Java
Java多线程编程的艺术与实践
【10月更文挑战第22天】 在现代软件开发中,多线程编程是一项不可或缺的技能。本文将深入探讨Java多线程编程的核心概念、常见问题以及最佳实践,帮助开发者掌握这一强大的工具。我们将从基础概念入手,逐步深入到高级主题,包括线程的创建与管理、同步机制、线程池的使用等。通过实际案例分析,本文旨在提供一种系统化的学习方法,使读者能够在实际项目中灵活运用多线程技术。