【文末送书】全栈开发流程——后端连接数据源(二)

这篇具有很好参考价值的文章主要介绍了【文末送书】全栈开发流程——后端连接数据源(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划
「作者主页」:雪碧有白泡泡
「个人网站」:雪碧的个人网站
「推荐专栏」

java一站式服务
React从入门到精通
前端炫酷代码分享
★ 从0到英雄,vue成神之路★
uniapp-从构建到提升
从0到英雄,vue成神之路
解决算法,一个专栏就够了
架构咱们从0说
★ 数据流通的精妙之道★
★后端进阶之路★

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

当我们拿到项目需求后,有时候可能会感到迷茫,不知道整体流程和接下来该做什么。为了能够不断实战并快速提高自己,我们需要找到适合自己的一套开发流程。这样我们就能够有条不紊地进行项目开发,并且及时发现和修正自己的不足之处
【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

以最常用的java全栈开发为例,这个系列以MySQL数据库后端以SpringBoot,MybatisPlus,Redis,Spring security,前端以vue,微信小程序的技术栈组合,进行步骤细化。

根据上文 全栈开发流程——数据表的分析与创建详解实战演示(一)我们讨论了建立数据库的详细过程
再此篇文章讲述后端的启动以及数据源的连接,如下:

Spring boot基本demo启动

新建项目

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划
【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划
【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

添加依赖项

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

构建maven

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

基本项目完成

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

更改文件后缀

新建 Spring Boot 项目后,resources 目录下有一个默认的全局配置文件 application.properties(空文件),Spring Boot 在底层已经自动配置好了默认配置。

默认的文件类型是 .properties,我们这边修改为 .yml,原因是 .yml 更加灵活、简洁!

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

添加基础依赖项 ——配置文件提示与lombok

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

<!--lombok依赖-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

再引入一个常用的工具包依赖

    <!-- hutool 工具包  -->
    <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>5.7.22</version>
    </dependency>

常见错误——maven

1.未正确配置setting.xml文件

打开Maven文件下conf/setting.xml文件,找到如图所示位置,如若未设置本地库的位置,则如黄色路径所示,在C:\Users\用户名.m2。设置了路径,则采用的是红色默认位置。(IDEA下使用Maven,未在全局设置中设置Maven Home Dictionary,则使用默认位置)

根据路径找到repository,删除库中对应的包文件,重新导入。

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

2.未配置阿里云国内镜像

尝试多次重新导入仍然无法运行,原因是此时网段无法访问maven.org网站,可采用阿里云镜像操作,打开maven安装文件夹的conf文件夹下的settings.xml文件,在如图所示位置配置如下:

完成后,先执行第一步操作后,重新导入包。

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

复制代码

<mirrors>

    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>

3.爆红
【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划
如图修改即可

pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.15</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring boot-demo</name>
    <description>spring boot-demo</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <!--lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- hutool 工具包  -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.22</version>
        </dependency>
        
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>


以上为 springboot 的 demo 项目全部过程

springboot连接MySQL

新建项目

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

连接数据库

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

添加依赖

        <!-- mysql  -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.17</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

编辑application.yml配置文件

数据源和连接池

# 数据源
spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/schooldb?useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      # 连接池最大连接数
      maximum-pool-size: 12
      # 空闲时保持最小连接数
      minimum-idle: 5
      # 空闲连接存活时间
      idle-timeout: 300000
      # 连接超时时间
      connection-timeout: 20000
      # 测试sql
      connection-test-query: select 1

成功运行

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

测试一下是是否链接成功

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

import javax.sql.DataSource;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
public class DataSourceTests {
    @Autowired private DataSource dataSource;

    @Test
    public void testConnection() throws Exception {
        System.out.println(dataSource.getConnection());
    }
}

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划
成功连接数据库

代码中使用了Spring Boot的注解@SpringBootTest来标注测试类,表明这是一个Spring Boot的测试类,并且会加载整个Spring应用程序上下文。

通过@Autowired注解,将名为dataSource的DataSource实例自动注入进来。DataSource是一个接口,它是Spring提供的用于创建和管理数据库连接的工具,并且可以处理数据库连接的打开、关闭和连接池管理等操作。在@Test注解的方法testConnection中,通过调用getConnection()方法来获取一个数据库连接,并将其打印出来。如果一切正常,将会打印出一个数据库连接对象。

SpringBoot 整合 MyBatis 操作 MySql

先给出数据库

CREATE DATABASE `mydemo`;

USE `mydemo`;

DROP TABLE IF EXISTS `sys_user`;

CREATE TABLE `sys_user` (
    `user_id` bigint NOT NULL,
    `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名',
    PRIMARY KEY (`user_id`),
    KEY `user_idx1_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户表';

INSERT INTO `sys_user` (`user_id`, `username`) VALUES (1, '雪碧');
INSERT INTO `sys_user` (`user_id`, `username`) VALUES (2, '可乐');

添加依赖项

        <!--  mybatis  -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

修改 SpringBoot 配置文件

除数据源和连接池外,还有mybatis的mapper和mapper.xml位置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://127.0.0.1:3306/schooldb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    hikari:
      # 连接池最大连接数
      maximum-pool-size: 12
      # 空闲时保持最小连接数
      minimum-idle: 5
      # 空闲连接存活时间
      idle-timeout: 300000
      # 连接超时时间
      connection-timeout: 20000
      # 测试sql
      connection-test-query: select 1
      
# mybatis 配置
mybatis:
  mapper-locations:
    - classpath:mapper/*.xml
    - classpath*:com/**/mapper/*.xml

创建实体类

package com.example.mybatisdemo.model;


import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;


@Data
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor

public class User {


    private Long userId;

    private String username;
}

创建 Mapper 接口

package com.example.mybatisdemo.mapper;


import com.example.mybatisdemo.model.User;
import org.apache.ibatis.annotations.Mapper;


@Mapper
public interface SysUserMapper {

    /**
     * 根据用户ID查询用户信息
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    User queryUserById(Long userId);
}

这段代码是一个MyBatis的Mapper接口,被注解为@Mapper表示该接口是MyBatis的映射器接口。
Mapper接口是定义与数据库交互的方法的接口,通过MyBatis配置文件与SQL语句进行映射。其中,SysUserMapper接口定义了一个查询用户信息的方法queryUserById,该方法接受一个userId参数,返回一个User对象。

该接口的实现是由MyBatis框架自动创建,并且会根据接口方法的注解和参数类型来动态生成SQL语句,以实现数据库操作。## 创建 Mapper 映射文件

根据 mybatis.mapper-locations 配置地址创建 Mapper 映射文件

<?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.example.mybatisdemo.mapper.SysUserMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="baseResultMap" type="com.example.mybatisdemo.model.User">
        <id column="user_id" property="userId"/>
        <result column="username" property="username"/>
    </resultMap>

    <select id="queryUserById" resultMap="baseResultMap">
        select *
        from sys_user
        where user_id = #{userId}
    </select>
</mapper>

创建 Service 与接口

  • Service
package com.example.mybatisdemo.service;

import com.example.mybatisdemo.mapper.SysUserMapper;
import com.example.mybatisdemo.model.User;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;


@Service
@RequiredArgsConstructor
public class UserService {

    private final SysUserMapper sysUserMapper;

    /**
     * 根据用户ID查询用户信息
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    public User queryUserById(Long userId) {
        return sysUserMapper.queryUserById(userId);
    }
}
  • 接口
package com.example.mybatisdemo.controller;


import com.example.mybatisdemo.model.User;
import com.example.mybatisdemo.service.UserService;

import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;



@RestController
@RequiredArgsConstructor
@RequestMapping("/user")
public class UserController {

    private final UserService UserService;


    @GetMapping("/{userId}")
    public ResponseEntity<User> queryUserById(@PathVariable Long userId) {
        return ResponseEntity.ok(UserService.queryUserById(userId));
    }
}

这段代码是一个基于Spring Boot的RESTful风格的控制器类。它使用@RestController注解标识该类为一个控制器,并将返回的数据直接作为HTTP响应体进行返回。
@RequiredArgsConstructor是一个Lombok注解,它会为控制器类生成一个包含所有final修饰的成员变量的构造函数。@RequestMapping(“/user”)用于映射URL路径,即指定该控制器的基本URL路径为/user。UserController类的构造函数接受一个UserService类型的参数,并使用final修饰符标识为成员变量,表示该类依赖于UserService。
@GetMapping(“/{userId}”)用于映射GET请求的URL路径。{userId}是一个路径变量,表示一个具体的用户ID。public ResponseEntityqueryUserById(@PathVariable Long userId)方法是该控制器的处理方法,用于根据用户ID查询用户信息。它使用@PathVariable注解将URL路径中的路径变量userId绑定到方法的参数上。该方法使用UserService调用queryUserById方法查询用户信息,并将结果包装成ResponseEntity对象返回ResponseEntity.ok(UserService.queryUserById(userId))表示请求成功,响应状态码为200,并将用户信息作为响应体返回。

测试接口

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

案例成功

SpringBoot 整合 MyBatis-Plus 实现分页查询

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

构建查询数据

CREATE DATABASE `mydemo`;

USE `mydemo`;

DROP TABLE IF EXISTS `sys_user`;

CREATE TABLE `sys_user` (
    `user_id` bigint NOT NULL,
    `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名',
    PRIMARY KEY (`user_id`),
    KEY `user_idx1_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户表';

INSERT INTO `sys_user` (`user_id`, `username`) VALUES (1, '雪碧');
INSERT INTO `sys_user` (`user_id`, `username`) VALUES (2, '可乐');

-- 创建岗位信息表
CREATE TABLE `sys_post` (
    `post_id` bigint NOT NULL AUTO_INCREMENT COMMENT '岗位ID',
    `post_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '岗位编码',
    `post_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '岗位名称',
    `post_sort` int NOT NULL COMMENT '岗位排序',
    `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '0' COMMENT '是否删除 -1:已删除 0:正常',
    `create_time` datetime DEFAULT NULL COMMENT '创建时间',
    `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '创建人',
    `update_time` datetime DEFAULT NULL COMMENT '更新时间',
    `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '更新人',
    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注信息',
    PRIMARY KEY (`post_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='岗位信息表';

-- 向岗位信息表插入数据
INSERT INTO `sys_post` VALUES (11, 'user8', '员工8', 10, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '打工人');
INSERT INTO `sys_post` VALUES (2, 'cto', 'cto', 0, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '秃头大佬');
INSERT INTO `sys_post` VALUES (3, 'user', '董事长', -1, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '资本家');
INSERT INTO `sys_post` VALUES (4, 'user1', '员工1', 3, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '打工人');
INSERT INTO `sys_post` VALUES (5, 'user2', '员工2', 4, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '打工人');
INSERT INTO `sys_post` VALUES (6, 'user3', '员工3', 5, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '打工人');
INSERT INTO `sys_post` VALUES (7, 'user4', '员工4', 6, '0', '2023-03-16 13:14:20', 'admin', '2023-06-26 13:14:20', 'admin', '打工人');
sys_user

添加依赖

<!--  Mysql 数据库驱动  -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<!--  mybatis-plus  -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>

实体类

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

package com.example.mybatisplusdemo.model;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;

import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.time.LocalDateTime;


@Getter
@Setter
public class BaseEntity implements Serializable {

    /**
     * 创建者
     */

    @TableField(fill = FieldFill.INSERT)
    private String createBy;

    /**
     * 创建时间
     */

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新者
     */

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateBy;

    /**
     * 更新时间
     */

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

}
package com.example.mybatisplusdemo.model;


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 岗位管理
 *
 * @author Strive
 * @date 2022-03-15 17:18:40
 */
@Data
@TableName("sys_post")
@EqualsAndHashCode(callSuper = true)

public class Post extends BaseEntity {

    private static final long serialVersionUID = -8744622014102311894L;

    /**
     * 岗位ID
     */
    @TableId(type = IdType.ASSIGN_ID)

    private Long postId;

    /**
     * 岗位编码
     */

    private String postCode;

    /**
     * 岗位名称
     */

    private String postName;

    /**
     * 岗位排序
     */

    private Integer postSort;

    /**
     * 是否删除 -1:已删除 0:正常
     */

    private String delFlag;

    /**
     * 备注信息
     */

    private String remark;

}
package com.example.mybatisplusdemo.model;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/** @author Strive */
@Data
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor

@TableName("sys_user")
public class User {

    @TableId

    private Long userId;


    private String username;
}

Mapper 接口

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

package com.example.mybatisplusdemo.mapper;

import cn.hutool.db.Page;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.mybatisplusdemo.model.Post;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface PostMapper extends BaseMapper<Post> {
    IPage<Post> selectPageSql(@Param("page") Page page, @Param("query") Post mingYuePost);
}

其中定义了一个selectPageSql方法,用于分页查询Post表的数据。方法参数使用了@Param注解来给参数取别名,方便在SQL语句中使用。
其中,@Param(“page”)表示分页参数,@Param(“query”)表示查询条件。方法返回值类型为IPage,表示查询结果的分页对象。IPage是MybatisPlus框架提供的分页对象,它包含了查询结果的总数、当前页码、每页记录数等信息。

这段代码可以实现根据指定的分页参数和查询条件,查询Post表的数据,并返回分页对象。

package com.example.mybatisplusdemo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.example.mybatisplusdemo.model.User;
import org.apache.ibatis.annotations.Mapper;


@Mapper
public interface UserMapper extends BaseMapper<User> {}

编写 Mapper.xml

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

<?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.example.mybatisplusdemo.mapper.PostMapper">
    <resultMap id="PostMap" type="com.example.mybatisplusdemo.model.Post">
        <id property="postId" column="post_id"/>
        <result property="postCode" column="post_code"/>
        <result property="postName" column="post_name"/>
        <result property="postSort" column="postSort"/>
        <result property="delFlag" column="del_flag"/>
        <result property="createTime" column="create_time"/>
        <result property="createBy" column="create_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="remark" column="remark"/>
    </resultMap>

    <select id="selectPageSql" resultMap="PostMap">
        SELECT p.post_id,
        p.post_name,
        p.post_code,
        p.post_sort as postSort,
        p.del_flag,
        p.create_time,
        p.update_time,
        p.update_by,
        p.create_by,
        p.remark
        FROM sys_post p
        <where>
            p.del_flag = '0'
            <if test="query.postName != null and query.postName != ''">
                <bind name="postNameLike" value="'%' + query.postName + '%'" />
                and p.post_name LIKE  #{postNameLike}
            </if>
        </where>
        <if test="null != page.orders">
            <include refid="dynamicOrder"></include>
        </if>
    </select>

    <!-- 动态排序 -->
    <sql id="dynamicOrder">
        ORDER BY
        <choose>
            <when test="page.orders != null and page.orders.size > 0">
                <foreach collection="page.orders" item="order" separator=",">
                    ${order.column}
                    <choose>
                        <when test="order.asc == true">
                            asc
                        </when>
                        <otherwise>
                            desc
                        </otherwise>
                    </choose>
                </foreach>
            </when>
        </choose>
    </sql>
</mapper>

Service

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

package com.example.mybatisplusdemo.service;


import cn.hutool.db.Page;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import com.example.mybatisplusdemo.mapper.PostMapper;
import com.example.mybatisplusdemo.model.Post;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Slf4j
@Service
@RequiredArgsConstructor
public class PostService extends ServiceImpl<PostMapper, Post> {

    private final PostMapper PostMapper;

    public IPage<Post> pageSql(Page page, Post Post) {
        return PostMapper.selectPageSql(page, Post);
    }
}
package com.example.mybatisplusdemo.service;



import com.example.mybatisplusdemo.mapper.UserMapper;
import com.example.mybatisplusdemo.model.User;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;


@Slf4j
@Service
@RequiredArgsConstructor
public class UserService {

    private final UserMapper sysUserMapper;

    /**
     * 根据用户ID查询用户信息
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    public User queryUserById(Long userId) {
        log.info("根据用户ID查询用户信息");
        return sysUserMapper.selectById(userId);
    }
}

提供分页查询接口

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

package com.example.mybatisplusdemo.controller;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.mybatisplusdemo.model.Post;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;



@RestController
@RequiredArgsConstructor
@RequestMapping("/post")
public class PostController {

    private final com.example.mybatisplusdemo.service.PostService PostService;


    @GetMapping("/page")
    public ResponseEntity<IPage<Post>> page(Page<Post> page) {
        return ResponseEntity.ok(PostService.page(page));
    }


    @GetMapping("/pageSql")
    public ResponseEntity<IPage<Post>> pageSql(cn.hutool.db.Page page, Post Post) {
        return ResponseEntity.ok(PostService.pageSql(page, Post));
    }

}
package com.example.mybatisplusdemo.controller;



import com.example.mybatisplusdemo.model.User;
import com.example.mybatisplusdemo.service.UserService;

import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/** @author Strive */

@RestController
@RequiredArgsConstructor
@RequestMapping("/user")
public class UserController {

    private final UserService UserService;

 @GetMapping("/{userId}")
    public ResponseEntity<User> queryUserById(@PathVariable Long userId) {
        return ResponseEntity.ok(UserService.queryUserById(userId));
    }
}

新增分页拦截器

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

package com.example.mybatisplusdemo.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class MyBatisPlusConfig {
    /**
     * 分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

这是一个用于配置MyBatis Plus的配置类。在这个类中,我们定义了一个名为MyBatisPlusConfig的@Configuration注解,表示它是一个配置类。
该配置类中定义了一个名为mybatisPlusInterceptor的@Bean注解方法,用于创建一个MybatisPlusInterceptor对象。MybatisPlusInterceptor是MyBatis Plus提供的分页插件,它可以用于实现数据库分页查询的功能。在mybatisPlusInterceptor方法中,我们创建了一个MybatisPlusInterceptor对象,并向其中添加了一个PaginationInnerInterceptor内部拦截器。内部拦截器用于处理分页查询的逻辑,这里选择使用MySQL数据库作为数据源,所以传入DbType.MYSQL参数。

通过这个配置,我们可以将该分页插件集成到我们的MyBatis Plus配置中,从而实现分页查询的功能。

由于篇幅问题,剩余缓存内容在下一篇完成,剩余内容为:
【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划
此篇文章的全部代码为,可以私信获取
【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

🎁清华出版社送书活动

以上技术栈主要为spring boot

当谈论Spring Boot时,不可忽视的是它构建在Java之上。Java是一种广泛使用的编程语言,具有跨平台性和强大的生态系统。Spring Boot的出现为Java开发者提供了更方便、更高效的方式来构建应用程序。

此外,Java也是一种广泛使用的编程语言,具有丰富的开发人员社区和大量的开源资源。通过学习和了解Java,你将能够更好地理解Spring Boot框架的工作原理和内部机制,并能够利用Java的强大功能来解决应用程序开发中的各种挑战。🌱👨‍💻

为了让大家更好地学习java全栈开发流程系列,文章开展送书环节

【文末送书】全栈开发流程——后端连接数据源(二),spring boot,mysql,mybatis,原力计划

出版日期: 2023/6/1最新版 京东链接 当当网文章来源地址https://www.toymoban.com/news/detail-696721.html

  • 🎁本次送书1-3本【取决于阅读量,阅读量越多,送的越多】👈
  • ⌛️活动时间:截止到2023-9月13号
  • ✳️参与方式:关注博主+三连
  • 评论人生苦短,我爱java(最多可评论三条)

到了这里,关于【文末送书】全栈开发流程——后端连接数据源(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django新手必看:从入门到精通Web应用开发①【文末送书三本】

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 Django 是使用 Python 语言开发的

    2024年02月08日
    浏览(48)
  • 【粉丝福利社】Flutter小白开发——跨平台客户端应用开发学习路线(文末送书-完结)

    🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:

    2024年01月16日
    浏览(72)
  • 【粉丝福利社】Flutter小白开发——跨平台客户端应用开发学习路线(文末送书-进行中)

    🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:

    2024年01月18日
    浏览(80)
  • Linux与C/C++服务器开发:深入探索网络编程与实用技术(文末送书)

    🎥 屿小夏 : 个人主页 🔥个人专栏 : 书籍推荐 🌄 莫道桑榆晚,为霞尚满天! 本文将探讨构建高性能Linux C/C++服务器的关键技术和最佳实践,包括优化服务器性能、处理并发和并行性、高效管理内存,以及利用高级网络功能等。我们还将推荐一本相关的书籍《Linux C/C++服务

    2024年02月04日
    浏览(43)
  • 进阶高级Python开发工程师,不得不掌握的Python高并发编程(文末送书5本)

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+         Python成为时下技术革新的弄潮儿,全民Python的发展趋势让人们不再满足于简单地

    2024年02月17日
    浏览(48)
  • AI大模型时代,开发工程师与项目管理者面对的机遇和挑战,文末送书3本

    🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于PHP专栏:PHP进阶实战教程,评测专区。 🎉欢迎 👍点赞✍

    2024年02月08日
    浏览(82)
  • AI 时代,程序员无需焦虑 | 《服务端开发:技术、方法与实用解决方案》(文末送书福利4.0)

    ChatGPT 横空出世后,“AI 即将取代程序员” 的观点一度引发热议,至今尚未完全冷却。作为一名服务端开发工程师,同时也是 ChatGPT 的“忠实”用户,经过将近一年的使用,今天抽空写一篇文章,谈谈自己对“AI 时代,程序员何去何从?”这一问题的看法。 2022 年 11 月 30 日

    2024年02月11日
    浏览(58)
  • 浅谈 Node.js 与快速入门使用——前端开发工程师必须要知道的技术(文末送书福利6.0)

    当下,各行各业都面临着大数据、人工智能、AR(augmented reality,增强现实)、VR(virtual reality,虚拟现实)等各种互联网新技术的冲击。在此技术背景下,Web前端行业也发生了巨大的改变,前端程序员已从单纯的切图处理发展到了需要处理多种后端业务。其中,Node.js 就是连

    2024年02月09日
    浏览(60)
  • 聚类分析(文末送书)

    目录 聚类分析是什么 一、 定义和数据类型 聚类应用 聚类分析方法的性能指标 聚类分析中常用数据结构有数据矩阵和相异度矩阵 聚类分析方法分类 二、K-means聚类算法 划分聚类方法对数据集进行聚类时包含三个要点 K-Means算法流程: K-means聚类算法的特点 三、k-medoids算法 基

    2024年02月09日
    浏览(41)
  • 【文末送书】拥抱人工智能

    欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关注公粽号 《机器和智能》 回复 “python项目

    2024年02月04日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包