【Spring Boot】如何集成mybatis-plus

  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启动类即可

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenResty(nginx+lua+resty-http)实现访问鉴权

OpenResty(nginxluaresty-http)实现访问鉴权 最近用BI框架解决了一些报表需求并生成了公开链接&#xff0c;现在CMS开发人员打算将其嵌入到业务系统中&#xff0c;结果发现公开链接一旦泄露任何人都可以访问&#xff0c;需要实现BI系统报表与业务系统同步的权限控制。但是目前…

软件测试【理论基础】

软件测试的IEEE定义&#xff1a;使用人工或自动的手段来运行或测量软件系统的过程&#xff0c;目的是检验软件系统是否满足规定的需求&#xff0c;并找出与预期结果之间的差异。 软件测试的发展趋势&#xff1a; ① 测试工作将进一步前移。软件测试不仅仅是单元测试、集成测…

Java中三种定时任务总结(schedule,quartz,xxl-job)

目录 1、Spring框架的定时任务 2、Quartz Quartz的用法 3、xxl-job 3.1 docker 安装xxl-job 3.2 xxl-job编程测试 补充&#xff1a;Java中自带的定时任务调度 1. java.util.Timer和java.util.TimerTask 2. java.util.concurrent.Executors和java.util.concurrent.Sche…

前端开发_CSS

CSS定义 层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现&#xff08;美化内容&#xff09; 书写位置&#xff1a;title 标签下方添加 style 双标签&#xff0c;style 标签里面书…

Qt应用开发(Quick篇)——矩形模块 Rectangle

一、前言 矩形模块用于用纯色或渐变填充区域&#xff0c;或者提供一个矩形边框。 二、外观 每个矩形项都可以使用使用color属性指定的纯填充色、使用gradient类型定义并使用gradient属性设置的渐变来绘制。如果同时指定了颜色和渐变效果&#xff0c;则只会生效渐变效果。 通过…

探讨Unity中的动画融合技术(BlendTree)

动画在游戏和虚拟现实应用中扮演着关键的角色&#xff0c;而动画融合技术则是使角色动作更加流畅和逼真的核心。在Unity引擎中&#xff0c;我们可以使用动画混合树&#xff08;Blend Trees&#xff09;来实现这一目标。本篇技术博客将深入讨论动画融合技术的实现原理、在Unity中…

jsp前端输入中文数据传到controller变成问号?的解决办法

还是写老师布置的实验的时候&#xff0c;解决了xml文件找不到的问题之后又遇到新的问题&#xff1a;前端登录处输入用户名和密码&#xff0c;结果明明输入的用户名是对的密码也是对的&#xff08;输入的用户名是中文&#xff09;&#xff0c;它就是显示用户名或密码错误。然后我…

高压配电室智能运维

高压配电室智能运维是指通过运用先进的物联网、大数据、云计算等技术&#xff0c;对高压配电室进行智能化、远程化的运行维护&#xff0c;实现高压配电室的安全、高效、经济运行。以下是高压配电室智能运维的主要功能和优势&#xff1a; 实时监测&#xff1a;通过传感器和监测设…

Vue3引入markdown编辑器--Bytemd

字节跳动开源了一款markdown编辑器&#xff0c;bytemd&#xff0c;项目地址&#xff1a;GitHub - bytedance/bytemd: ByteMD v1 repository 安装 npm i bytemd/vue-next 引入方式如下&#xff0c;再main.js中引入样式 import bytemd/dist/index.css 直接封装一个Markdown编…

JavaEE进阶学习:SpringBoot 的创建和使用

1.什么是Spring Boot Spring 的诞生是为了简化 Java 程序的开发的&#xff0c;而 Spring Boot 的诞生是为了简化 Spring 程序开发的。 Spring Boot 翻译一下就是 Spring 脚手架&#xff0c;它就是为了快速开发 Spring 框架而诞生的 2.Spring Boot 优点 起步依赖 (创建的时候…

深入浅出理解kafka

1.Kafka简介 Kafka 本质上是一个 MQ&#xff08;Message Queue&#xff09;&#xff0c;使用消息队列的优点&#xff1a; 解耦&#xff1a;允许独立的扩展或修改队列两边的处理过程。可恢复性&#xff1a;即使一个处理消息的进程挂掉&#xff0c;加入队列中的消息仍然可以在系…

Android,JNI开发和NDK之间的联系

Android&#xff0c;JNI开发和NDK。 1.jni和ndk jni是在jdk中就有出现的 在我们jdk路径中 D:\java\jdk11\include 这就是jdk中的jni Android开发环境中的ndk也有jni&#xff0c; D:\Android\sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\in…

数据结构第六课 -----链式二叉树的实现

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

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

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

python pyaudio对音频进行端点检测,检测出说话区间

python pyaudio对音频进行端点检测&#xff0c;检测出说话区间 主要采用过零率和语音能量来进行检测&#xff0c;并设置双阈值。 代码如下&#xff1a; # -*- coding: utf-8 -*- import wave import os import matplotlib.pyplot as plt import numpy as np# 判断是否变号 de…

大数据技术学习笔记(四)—— HDFS

目录 1 HDFS 概述1.1 HDFS 背景与定义1.2 HDFS 优缺点1.3 HDFS 组成架构1.4 HDFS 文件块大小 2 HDFS的shell操作2.1 上传2.2 下载2.3 HDFS直接操作 3 HDFS的客户端操作3.1 Windows 环境准备3.2 获取 HDFS 的客户端连接对象3.3 HDFS文件上传3.4 HDFS文件下载3.5 HDFS删除文件和目…

Lab 3: Recursion, Tree Recursion(CS61A 2020)

在网上没有lab3相应的答案&#xff0c;作者也卡蛮久 作者可能就自己的卡住过的问题做一些总结&#xff0c;不能面面俱到&#xff0c;请见谅 &#xff08;就此补充一下答案&#xff09;&#xff08;完整答案在最后&#xff09; Q2: WWPD: Journey to the Center of the Earth…

AcW730.机器人跳跃问题(二分法)-Java版

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;//由题目可知,无论能量大与小,都满足 e 2 * e - h[i]; //初始能量越大,最终的结果越大,要找到一个满足条件的最小值 //可以根据二分的向左找模板: /*if(check(mid)) r mid;els…

【C++ STL】vector类最全详解(什么是vector?vector类的常用接口有哪些?)

目录 一、前言 二、什么是vector ? &#x1f4a6; vector的基本概念 &#x1f4a6;vector的作用是什么 &#x1f4a6;总结 三、 vector的(一维)定义 四、vector(一维)常用接口的使用 &#x1f4a6;vector的常见构造&#xff08;初始化&#xff09; &#x1f4a6;vector…

11. 哈希冲突

上一节提到&#xff0c;通常情况下哈希函数的输入空间远大于输出空间&#xff0c;因此理论上哈希冲突是不可避免的。比如&#xff0c;输入空间为全体整数&#xff0c;输出空间为数组容量大小&#xff0c;则必然有多个整数映射至同一桶索引。 哈希冲突会导致查询结果错误&#…