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

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS Agent(兼容OpenClaw),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.若有问题,欢迎交流

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
1024 0
|
12月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1635 1
Spring boot 使用mybatis generator 自动生成代码插件
|
12月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
465 1
|
11月前
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
330 0
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
698 1
|
SQL 前端开发 Java
深入理解 Spring Boot 项目中的分页与排序功能
本文深入讲解了在Spring Boot项目中实现分页与排序功能的完整流程。通过实际案例,从Service层接口设计到Mapper层SQL动态生成,再到Controller层参数传递及前端页面交互,逐一剖析每个环节的核心逻辑与实现细节。重点包括分页计算、排序参数校验、动态SQL处理以及前后端联动,确保数据展示高效且安全。适合希望掌握分页排序实现原理的开发者参考学习。
845 4
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
936 29
|
SQL druid Oracle
【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
客户Java日志中出现异常,影响Druid的merge SQL功能(将SQL字面量替换为绑定变量以统计性能),但不影响正常业务流程。原因是Druid在merge SQL时传入null作为dbType,导致无法解析递归查询中的`start`关键字。
|
SQL JavaScript Java
Spring Boot 3 整合 Mybatis-Plus 实现数据权限控制
本文介绍了如何在Spring Boot 3中整合MyBatis-Plus实现数据权限控制,通过使用MyBatis-Plus提供的`DataPermissionInterceptor`插件,在不破坏原有代码结构的基础上实现了细粒度的数据访问控制。文中详细描述了自定义注解`DataScope`的使用方法、`DataPermissionHandler`的具体实现逻辑,以及根据用户的不同角色和部门动态添加SQL片段来限制查询结果。此外,还展示了基于Spring Boot 3和Vue 3构建的前后端分离快速开发框架的实际应用案例,包括项目的核心功能模块如用户管理、角色管理等,并提供Gitee上的开源仓库
3470 11
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
1147 0