【Spring Boot】如何集成mybatis-plus

news2024/11/17 3:09:18
  1. 在pom文件中导入maven坐标
    1.         <dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
                  <version>8.0.23</version>
              </dependency>
              <!--mybatis-plus-->
              <dependency>
                  <groupId>com.baomidou</groupId>
                  <artifactId>mybatis-plus-boot-starter</artifactId>
                  <version>3.4.2</version>
              </dependency>
              <dependency>
                  <groupId>com.alibaba</groupId>
                  <artifactId>druid</artifactId>
                  <version>1.1.23</version>
              </dependency>
  2. 创建maven项目的目录结构
  3. 创建ResultBean作为返回包装类
    1. package com.app.user.common;
      
      import lombok.Data;
      
      import java.io.Serializable;
      import java.util.HashMap;
      import java.util.Map;
      
      /**
       * 返回bean信息
       *
       * @author Administrator
       */
      @Data
      public class ResultBean<T> implements Serializable {
      
          private static final long serialVersionUID = -6759928086797729382L;
          /**
           * 编码:1成功,0和其它数字为失败
           */
          private Integer code;
          /**
           * 错误信息
           */
          private String msg;
          /**
           * 数据
           */
          private T data;
          /**
           * 动态数据
           */
          private Map map = new HashMap();
      
          public static <T> ResultBean<T> success(T object) {
              ResultBean<T> r = new ResultBean<T>();
              r.data = object;
              r.code = 1;
              return r;
          }
      
          public static <T> ResultBean<T> error(String msg) {
              ResultBean r = new ResultBean();
              r.msg = msg;
              r.code = 0;
              return r;
          }
      
          public ResultBean<T> add(String key, Object value) {
              this.map.put(key, value);
              return this;
          }
      
      }
      
  4. 创建mybatis plus的分页配置信息
    1. package com.app.user.config;
      
      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;
      
      /**
       * 配置MybatisPlus的配置信息
       *
       * @author Administrator
       */
      @Configuration
      public class MybatisPlusConfig {
      
          @Bean
          public MybatisPlusInterceptor mybatisPlusInterceptor() {
              // 获取MybatisPlus的拦截器链
              MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
              // 添加分页拦截器PaginationInnerInterceptor,实现自动分页
              mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
              return mybatisPlusInterceptor;
          }
      
      }
      
  5. 创建表实体类信息
    1. package com.app.user.pojo;
      
      import com.baomidou.mybatisplus.annotation.TableName;
      import lombok.Data;
      
      /**
       * 用户实体类
       *
       * @author Administrator
       */
      @Data
      @TableName(value = "tb_user")
      public class User {
          /**
           * 主键
           */
          private Long id;
          /**
           * 用户名
           */
          private String username;
          /**
           * 联系电话
           */
          private String phone;
      
      }
  6. 创建mapper类
    1. package com.app.user.mapper;
      
      
      import com.app.user.pojo.User;
      import com.baomidou.mybatisplus.core.mapper.BaseMapper;
      import org.apache.ibatis.annotations.Mapper;
      
      /**
       * 用户mapper
       *
       * @author Administrator
       */
      @Mapper
      public interface UserMapper extends BaseMapper<User> {
          /**
           * 计算数目
           *
           * @return 返回计算数目
           */
          int countNum();
      
      }
      
  7. 创建服务接口类
    1. package com.app.user.service;
      
      
      import com.app.user.pojo.User;
      import com.baomidou.mybatisplus.extension.service.IService;
      
      /**
       * 用户服务接口
       *
       * @author Administrator
       */
      public interface UserService extends IService<User> {
      
          /**
           * 计算数目
           *
           * @return 返回记录数
           */
          int countNum();
      
      }
      
  8. 创建服务接口类实现类
    1. package com.app.user.service.impl;
      
      
      import com.app.user.mapper.UserMapper;
      import com.app.user.pojo.User;
      import com.app.user.service.UserService;
      import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
      import org.springframework.stereotype.Service;
      
      /**
       * 用户服务
       *
       * @author Administrator
       */
      @Service
      public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
      
          @Override
          public int countNum() {
              // 使用原生的xml文件mapper查询表记录
              return this.baseMapper.countNum();
          }
      
      }
      
  9. 创建服务的controller类
    1. package com.app.user.controller;
      
      
      import cn.hutool.core.util.StrUtil;
      import com.app.user.common.ResultBean;
      import com.app.user.pojo.User;
      import com.app.user.service.UserService;
      import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
      import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
      import lombok.RequiredArgsConstructor;
      import lombok.extern.slf4j.Slf4j;
      import org.springframework.web.bind.annotation.*;
      
      import javax.servlet.http.HttpServletRequest;
      
      /**
       * 用户控制器
       *
       * @author Administrator
       */
      @RestController
      @RequestMapping("/users")
      @Slf4j
      @RequiredArgsConstructor
      public class UserController {
      
          /**
           * 结合@RequiredArgsConstructor进行构造器注入
           */
          private final UserService userService;
      
          /**
           * 新增用户
           *
           * @param user 用户信息
           * @return 用户信息
           */
          @PostMapping
          public ResultBean<User> save(@RequestBody User user) {
              log.info("新增用户,用户信息:{}", user.toString());
              userService.save(user);
              return ResultBean.success(user);
          }
      
          /**
           * 根据id修改用户信息
           *
           * @param user 用户信息
           * @return 修改提示信息
           */
          @PutMapping
          public ResultBean<String> update(HttpServletRequest request, @RequestBody User user) {
              log.info(user.toString());
              userService.updateById(user);
              return ResultBean.success("用户信息修改成功");
          }
      
          /**
           * 根据id查询用户信息
           *
           * @param id 用户id
           * @return 用户信息
           */
          @GetMapping("/{id}")
          public ResultBean<User> getById(@PathVariable Long id) {
              log.info("根据id查询用户信息...");
              User user = userService.getById(id);
              if (user != null) {
                  return ResultBean.success(user);
              }
              return ResultBean.error("没有查询到对应用户信息");
          }
      
          /**
           * 用户信息分页
           *
           * @param page     当前页
           * @param pageSize 每页显示条数
           * @param username 用户名
           * @return 返回分页用户信息
           */
          @GetMapping("/page")
          public ResultBean<Page<User>> page(int page, int pageSize, String username) {
              log.info("page = {},pageSize = {},username = {}", page, pageSize, username);
              // 1、构造简单分页模型
              Page<User> pageInfo = new Page<>(page, pageSize);
              // 2、构造条件构造器
              LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
              // 3、添加用户名过滤条件,使用模糊匹配,不为空时才生效
              queryWrapper.like(StrUtil.isNotEmpty(username), User::getUsername, username);
              // 4、添加排序条件
              queryWrapper.orderByDesc(User::getId);
              // 5、执行查询,查询的结果将会直接存在于pageInfo对象中
              userService.page(pageInfo, queryWrapper);
              return ResultBean.success(pageInfo);
          }
      
          /**
           * 获取用户记录数
           *
           * @return 返回记录数
           */
          @GetMapping("/count")
          public ResultBean<Integer> count() {
              log.info("计算用户数目...");
              int i = userService.countNum();
              return ResultBean.success(i);
          }
      
      }
      
  10. 在resources的文件夹创建mapper文件夹,并创建mapper.xml文件,示例创建的是UserMapper.xml文件
    1. <?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.app.user.mapper.UserMapper">
      
          <resultMap id="BaseResultMap" type="com.app.user.pojo.User">
              <result property="id" column="id" jdbcType="DECIMAL"/>
              <result property="username" column="username" jdbcType="VARCHAR"/>
              <result property="phone" column="phone" jdbcType="VARCHAR"/>
          </resultMap>
      
          <sql id="Base_Column_List">
              id,username,phone
          </sql>
      
          <select id="countNum" resultType="int">
              select count(*)
              from tb_user;
          </select>
      
      </mapper>
  11. 创建application.yml文件并配置下列信息
    1. server:
        port: 8080
      spring:
        application:
          #应用的名称,可选
          name: user-service
        datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3333/user_demo?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
          username: root
          password: 123456
          type: com.alibaba.druid.pool.DruidDataSource
      
      mybatis-plus:
        configuration:
          #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
          map-underscore-to-camel-case: true
          log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
        global-config:
          db-config:
            id-type: ASSIGN_ID
        mapper-locations: classpath:mapper/*.xml
      
  12. 创建logback.xml日志文件并配置下列信息
    1. <?xml version="1.0" encoding="UTF-8"?>
      <!--
        ~ Licensed to the Apache Software Foundation (ASF) under one or more
        ~ contributor license agreements.  See the NOTICE file distributed with
        ~ this work for additional information regarding copyright ownership.
        ~ The ASF licenses this file to You under the Apache License, Version 2.0
        ~ (the "License"); you may not use this file except in compliance with
        ~ the License.  You may obtain a copy of the License at
        ~
        ~     http://www.apache.org/licenses/LICENSE-2.0
        ~
        ~ Unless required by applicable law or agreed to in writing, software
        ~ distributed under the License is distributed on an "AS IS" BASIS,
        ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        ~ See the License for the specific language governing permissions and
        ~ limitations under the License.
        -->
      
      <configuration>
          <property name="log.context.name" value="sharding-jdbc-spring-namespace-mybatis-example" />
          <property name="log.charset" value="UTF-8" />
          <property name="log.pattern" value="[%-5level] %date --%thread-- [%logger] %msg %n" />
          <contextName>${log.context.name}</contextName>
      
          <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
              <encoder charset="${log.charset}">
                  <pattern>${log.pattern}</pattern>
              </encoder>
          </appender>
          <root>
              <level value="info" />
              <appender-ref ref="STDOUT" />
          </root>
      </configuration>
  13. 直接启动SpringBootApplication启动类即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1283939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卷积神经网络(CNN):艺术作品识别

文章目录 一、前言一、设置GPU二、导入数据1. 导入数据2. 检查数据3. 配置数据集4. 数据可视化 三、构建模型四、编译五、训练模型六、评估模型1. Accuracy与Loss图2. 混淆矩阵3. 各项指标评估 一、前言 我的环境&#xff1a; 语言环境&#xff1a;Python3.6.5编译器&#xf…

python获取指定用户csdn博客列表并查询质量分,将结果保存到excel

API接口 获取博文总数接口 usernamehougang&#xff0c;表示获取用户hougang的所有博文数量 https://blog.csdn.net/community/home-api/v1/get-tab-total?usernamehougang 获取博文列表接口 https://blog.csdn.net/community/home-api/v1/get-business-list 质量分接口…

在文本框中添加单位

<el-col :span"12"><el-form-item label"进度" prop"schedule":rules"[{required: true, message:进度不能为空, trigger:blur},{validator: validator.isFloatGteZero, trigger:blur}]"><el-input v-model"input…

2024搞钱方式,这些你都了解吗?

气温日渐降低&#xff0c;凛冬已至&#xff0c;年关将近&#xff0c;咱还得多多搞钱才能喜气洋洋过大年不是&#xff1f;拿满全勤搞绩效&#xff0c;累死累活KPI……为了生活咱也是付出了太多。可是咱程序员该咋办呢&#xff1f; 相信有机智的小伙伴已经脱口而出了&#xff1a…

分布式搜索引擎elasticsearch(二)

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查…

从0开始使用Maven

文章目录 一.Maven的介绍即相关概念1.为什么使用Maven/Maven的作用2.Maven的坐标 二.Maven的安装三.IDEA编译器配置Maven环境1.在IDEA的单个工程中配置Maven环境2.方式2&#xff1a;配置Maven全局参数 四.IDEA编译器创建Maven项目五.IDEA中的Maven项目结构六.IDEA编译器导入Mav…

关于rocketMQ踩坑的那些事

在最近&#xff0c;我所写的这个项目需要使用到rocketMQ&#xff0c;为了图方便我便使用的是Windows版本的&#xff0c;但是在使用的过程中首先是发现无法发送消息出去&#xff0c;报错信息为 org.apache.rocketmq.client.exception.MQClientException: Send [3] times, still …

做一件荒谬的事:用AI推理下一次双色球结果 v0.1

做一件荒谬的事&#xff1a;用AI推理下一次双色球结果 v0.1 引言 事情的起因是父亲被亲戚安利&#xff0c;突然喜欢上了双色球&#xff0c;连规则和开奖结果怎么看都不懂的他&#xff0c;让我研究研究这个事&#xff0c;给他选个号。他还说老家有好几个人中了几百万&#xff…

unity学习笔记18

模型文件属性简介 1.动画类型&#xff1a;一共有四种&#xff1a;无 表示没有动画&#xff0c;旧版 就表示这个模型文件里面的动画片段可以用animation组件来播放的&#xff0c;最后两个 ”泛型“和“人形”都是animator组件来播放的。区别是泛型支持所有类型的动画播放&#x…

CoreDNS实战(一)-构建高性能、插件化的DNS服务器

1 概述 在企业高可用DNS架构部署方案中我们使用的是传统老牌DNS软件Bind, 但是现在不少企业内部流行容器化部署&#xff0c;所以也可以将Bind替换为 CoreDNS &#xff0c;由于 CoreDNS 是 Kubernetes 的一个重要组件&#xff0c;稳定性不必担心&#xff0c;于此同时还可将K8S集…

微信扫码登录修改二维码的样式

默认是这个样子二维码都没有展示全 微信的了的 js 对象是这个样子&#xff0c;既然大家看到我这篇文章&#xff0c;想必里面的属性已经知道了&#xff0c;这里不做赘述。 let href data:text/css;base64,LmltcG93ZXJCb3ggLnFyY29kZSB7d2lkdGg6ODAlO21hcmdpbi10b3A6MH0uaW1wb3d…

价差后的几种方向,澳福如何操作才能盈利

在价差出现时&#xff0c;澳福认为会出现以下几种方向。 昂贵资产的贬值和便宜资产的平行升值。昂贵的资产贬值&#xff0c;而便宜的资产保持不变。昂贵资产的贬值和便宜资产的平行贬值&#xff0c;但昂贵资产的贬值速度更快&#xff0c;超过便宜资产。更贵的一对的进一步升值和…

Pycharm配置jupyter使用notebook详细指南(可换行conda环节)

本教程为事后记录&#xff0c;部分图片非实操图片。 详细记录了pycharm配置jupyter的方法&#xff0c;jupyter添加其他conda环境的方法&#xff0c;远程密码调用jupyter的方法&#xff0c;修改jupyter工作目录的方法。 文章目录 一、入门级配置1. Pycharm配置Conda自带的jupyt…

Python Opencv实践 - Yolov3目标检测

本文使用CPU来做运算&#xff0c;未使用GPU。练习项目&#xff0c;参考了网上部分资料。 如果要用TensorFlow做检测&#xff0c;可以参考这里 使用GPU运行基于pytorch的yolov3代码的准备工作_little han的博客-CSDN博客文章浏览阅读943次。记录一下自己刚拿到带独显的电脑&a…

springboot数据源配置

springboot数据源配置 数据层解决方案——持久化技术 内置持久化解决方案——jdbcTemplate 内置数据库 H2一般用于测试环境&#xff0c;配置profiels&#xff0c;只在开发阶段使用&#xff0c;让他在上线的时候不走这里就可以了 要使用内嵌的数据库H2,要先导入jar包

python提取通话记录中的时间信息

您需要安装适合中文的SpaCy模型。您可以通过运行 pip install spacypython -m spacy download zh_core_web_sm来安装和下载所需的模型。 import spacy# 加载中文模型 nlp spacy.load(zh_core_web_sm)# 示例电话记录文本 text """ Agent: 今天我们解决一下这…

语音识别从入门到精通——1-基本原理解释

文章目录 语音识别算法1. 语音识别简介1.1 **语音识别**1.1.1 自动语音识别1.1.2 应用 1.2 语音识别流程1.2.1 预处理1.2.2 语音检测和断句1.2.3 音频场景分析1.2.4 识别引擎(**语音识别的模型**)1. 传统语音识别模型2. 端到端的语音识别模型基于Transformer的ASR模型基于CNN的…

14、pytest像用参数一样使用fixture

官方实例 # content of test_fruit.py import pytestclass Fruit:def __init__(self, name):self.name nameself.cubed Falsedef cube(self):self.cubed Trueclass FruitSalad:def __init__(self, *fruit_bowl):self.fruit fruit_bowlself._cube_fruit()def _cube_fruit(s…

【从零开始学习Redis | 第六篇】爆改Setnx实现分布式锁

前言&#xff1a; 在Java后端业务中&#xff0c; 如果我们开启了均衡负载模式&#xff0c;也就是多台服务器处理前端的请求&#xff0c;就会产生一个问题&#xff1a;多台服务器就会有多个JVM&#xff0c;多个JVM就会导致服务器集群下的并发问题。我们在这里提出的解决思路是把…

Spring Security 自定义异常失效?源码分析与解决方案

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…