先让springbootmybatisplus跑起来(代码片段)

TabKey9 TabKey9     2022-10-21     616

关键词:

架空一切前提条件,只讲怎么让它跑起来,实现基本的增删改查操作!

架空一切前提条件,只讲怎么让它跑起来,实现基本的增删改查操作!
假设:
1、MySQL里已经有一张user表;
2、已经安装IDEA
3、已经新建一个SpringBoot项目;
4、已经部署好MyBatisPlus相关配置;

src/main/resources/application.yml配置例子:

spring:
  datasource:
                                              #    TODO : allowPublicKeyRetrieval=true
    url: jdbc:mysql://localhost:3306/user?useUnicode=true&allowPublicKeyRetrieval=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

server:
  port: 8080

mybatis-plus:
  global-config:
    db-config:
      #  TODO : MyBatis-plus 设置 id 自增
      id-type: auto

src/main/java/tabkey9/dao/UserDao.java DAO层:

import tabkey9.entity.UserEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * 用户信息表 - DAO 层
 *
 * @author TabKey9
 * @date 2022-3-25
 */
@Mapper
public interface UserDao extends BaseMapper<UserEntity> 


src/main/java/tabkey9/dao/UserDao.java 映射的实体类:

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

import java.io.Serializable;
import java.util.Date;
import lombok.Data; // 引入这个依赖就可以不用写 SET/GET

/**
 * 用户信息表 - 映射的实体类
 *
 * @author TabKey9
 * @date 2022-3-25
 */
@Data
@TableName("user")
public class UserEntity implements Serializable 
	private static final long serialVersionUID = 1L;

	/**
	 * 用户编号
	 */
	@TableId
	private Integer id;
	/**
	 * 用户姓名
	 */
	private String user;
	/**
	 * 年龄
	 */
	private Integer age;
	/**
	 * 性别
	 */
	private String sex;
	/**
	 * 手机号码
	 */
	private String phone;
	/**
	 * 注册时间
	 */
	private Date addDate;
	/**
	 * 密码
	 */
	private String password;


TODO: 前面都是部署,现在开始写业务代码,我的思路是:

1、先在 调用 写 调用的方法,IEDA报错没有该方法,不理它,根据报错,跳转去写 服务
2、写 服务IDEA又报错,没有该服务的实现,不理它,根据报错,跳转去写 实现
3、当调用服务实现都写了,IDEA还报错,就要去找原因了,最后再调试一下。

TODO:下面是一个 增删改查Demo,用了 MyBatisPlus 内置的 CRUD,简化了很多代码量

src/main/java/tabkey9/controller/UserController.java 调用:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import tabkey9.entity.UserEntity;
import tabkey9.service.UserService;

import java.util.HashMap;
import java.util.List;


/**
 * 用户信息表 - 调用
 *
 * @author TabKey9
 * @date 2022-3-25
 */
@RestController
@RequestMapping("/user")
public class UserController 
//    @Resource
//    private UserDao mapper;
    @Autowired
    private UserService userService;

    // 根据主键 id 查询一条数据
    @GetMapping("/getId")
    public UserEntity getId(@RequestParam(required = false) Integer id) // RequestParam加上(required = false)表示可以不传参数,看需求加
        Integer param = id == null ? 1 : id; // 用了三元运算符,不穿参数则默认查 id 为 1 的数据
        return userService.getId(param);
    

    // 删除 ,根据指定“id"字段删除数据
    @RequestMapping("/delId")
    public boolean delId( @RequestParam(required = false) Integer id) 
        if (id==null) return false; // 防止报错
//        根据指定主键 ID 删除数据
        return userService.delId(id);
    

    // 删除 ,根据指定“name"字段删除数据
    @RequestMapping("/delName")
    public boolean delName( @RequestParam String name) 
        if (name==null) return false; // 防止报错
        return userService.delName(name);
    

    // 查询所有数据
    @GetMapping("/list")
//    @RequestMapping(value = "/list",method = RequestMethod.POST)
    public List<UserEntity> lists()
        return userService.lists();
    

    // 增 一条,通过 前端传参 id 改变主键
    @RequestMapping(value = "/insert",method = RequestMethod.POST)
    public boolean insertOne(@RequestParam HashMap<String, String> info) 
        UserEntity user = new UserEntity();
        user.setUser( info.get("user") );
        user.setAge( Integer.parseInt(info.get("age") ));
        user.setPhone( info.get("phone") );
        user.setSex( info.get("sex") );
        user.setPassword( info.get("password") );
        return userService.insOne(user);
    

//    根据 id 修改一条数据
    @RequestMapping("/save")
    public boolean cUpdate() 
        UserEntity user = new UserEntity();
        user.setId(41); // 注意这三个字段在数据库中是不为空的,所有至少得加上这三个字段,其余不 set 的字段,默认不更新
        user.setUser("小小"); // DB 中不为空
        user.setPassword("admin"); // DB 中不为空
        return userService.cUpDate(user);
    



src/main/java/tabkey9/service/UserService.java 服务:

import com.baomidou.mybatisplus.extension.service.IService;
import tabkey9.entity.UserEntity;

import java.util.List;

/**
 * 用户信息表 - 服务
 *
 * @author TabKey9
 * @date 2022-3-25
 */
public interface UserService extends IService<UserEntity> 

    // 根据 id 字段查
    UserEntity getId(Integer id);

    // 查询所有数据
    List<UserEntity> lists();

    // 根据 id 删除
    boolean delId(Integer id);

    boolean delName(String name);

    // 新增 1条
    boolean insOne(UserEntity user);

    // 更新
    boolean cUpDate(UserEntity user);

src/main/java/tabkey9/service/impl/UserServiceImpl.java 实现:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import tabkey9.dao.UserDao;
import tabkey9.entity.UserEntity;
import tabkey9.service.UserService;

import javax.annotation.Resource;
import java.util.List;

/**
 * 用户信息表 - 实现
 *
 * @author TabKey9
 * @date 2022-3-25
 */
@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements UserService 
    @Resource
    private UserDao mapper; // 相当于实例化了一个名为 mapper 的 UserDao 对象

//    指定 id 字段查
    @Override
    public UserEntity getId(Integer id) 
        return this.getById(id);
    

//    查所有数据
    @Override
    public List<UserEntity> lists()
        return this.list();
    

//    指定 id 删除
    @Override
    public boolean delId(Integer id) 
        return this.removeById(id);
    

//    指定 name 字段删除数据
    @Override
    public boolean delName(String name) 
//        不使用映射字段的话,就要自己指定字段名
//        this.remove(new QueryWrapper<UserEntity>().eq("user" ,"root") );
//        使用了链式查询【lambda()】,映射字段,方便开发
        return this.remove(new QueryWrapper<UserEntity>().lambda().eq(UserEntity::getUser,name));
    

//    根据前端 HTML Form 表单传参进行数据处理,实例化 UserEntity 实例并 Set 值,最后再通过 DAO 层写入数据库
//    演示:  file:///C:/Users/EDY/Desktop/main/resources/html.html
    @Override
    public boolean insOne(UserEntity user) 
        return this.save(user);
    

//    更新一条数据
    @Override
    public boolean cUpDate(UserEntity user) 
        return this.updateById(user);
    



再来个简单的 HTML Form 表单:

<!DOCTYPE html>
<html lang="cn">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div >
        <form name="info" accept-charset="UTF-8" action="http://localhost:8080/user/insert" method="post" ectype="application/json" >
            <fieldset>
                <legend>form表单 注册:</legend>
                姓名:<input  type="text" name="user" value="刘备">
                <br>
                年龄:<input type="text" name="age" value="25">
                <br>
                性别:<input type="text" name="sex" value="男">
                <br>
                手机:<input type="text" name="phone" value="18888888888">
                <br>
                密码:<input type="text" name="password" value="root">
                <br>
                <input type="submit" value="Submit">
            </fieldset>
        </form>
    </div>
</body>
</html>

TODO: 一边跑起来,一边理解这里为什么这样?那里为什么那样?,换成这样行不行?换成那样行不行?

扩展:附一张图:

springbootmybatisplus集成shiro实现权限控制(代码片段)

1.创建数据库表。由于时间仓促,数据库表设计不太合理,后期会更改/*NavicatPremiumDataTransferSourceServer:本地SourceServerType:MySQLSourceServerVersion:80021SourceHost:localhost:3306SourceSchema:logindatabaseTargetServerType:MySQLTarge 查看详情

springbootmybatisplus报错,依赖冲突问题。

      今天使用springBoot热部署插件,引入了依赖,然后发现 查询mybatis报错,描述是 一个字段不存在,各种检查相关配置和数据库,都没有问题。然后深入查找,发现下面的依赖和mybatisplus冲突了。&n... 查看详情

三分钟跑起jsblocks

  1下载代码gitclonehttps://github.com/astoilkov/jsblocks-seed.git 2安装依赖[email protected]/F/home/qianduan/jsblocks-seed(master)$npminstall|>[email protected]postinstallf:homeq 查看详情

windows/mac跑起xdag源码

Windows环境1,下载github源码https://github.com/XDagger/xdag/archive/master.zip2,安装VS20173,安装openssl和pthreadshttp://slproweb.com/download/Win64OpenSSL-1_0_2o.exe(注:不是每个版本都可以)ftp://sourceware.org/pub/pthreads- 查看详情

java零基础跑起第一个程序

Java 零基础跑起第一个程序一 概述1  java代码编译编译后才干在计算机中执行。编译就是把人能看懂的代码转换成机器能看懂的形式2 java的长处一次编译。到处执行。由于java代码是在虚拟机中执行,虚拟机消除... 查看详情

docker容器跑起mysql后,在宿主机无法进去mysql?

docker小白,如题,已经成功跑起mysql容器,端口映射已经做好,3306:3306,进入容器内部后,可以通过mysql-uroot-p进入mysql,但是在宿主机,却报错bash:mysql:未找到命令...参考技术A这不很正常嘛宿主机又没安装MySQL(至少要安装客户... 查看详情

电商项目后端框架springbootmybatisplus(代码片段)

后端框架基础1.代码自动生成工具mybatis-plus(1)首先需要添加依赖文件<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.2</version></dependency><dependency><groupId>mysql&l... 查看详情

springbootmybatisplus代码自动生成工具类(代码片段)

文章目录前言一、pom依赖二、工具类结尾前言代码生成器,也叫逆向工程,是根据数据库里的表结构,自动生成对应的实体类、映射文件和接口。看到很多小伙伴在为数据库生成实体类发愁,现分享给大家,... 查看详情

springbootmybatisplus代码自动生成工具类(代码片段)

文章目录前言一、pom依赖二、工具类结尾前言代码生成器,也叫逆向工程,是根据数据库里的表结构,自动生成对应的实体类、映射文件和接口。看到很多小伙伴在为数据库生成实体类发愁,现分享给大家,... 查看详情

3分钟,让虚拟机跑起python(代码片段)

文章目录Python入门第一天Python简介Python环境搭建Python解释器第一个Python程序总结Python入门第一天Python简介Python的简介Python官网Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python的设计具有很强的可... 查看详情

图文详细解决idea使用debug模式启动项目一直转圈圈跑起不来(亲测可以)

问题描述今天使用IDEA打断点使用Debug启动项目的时候发现起不来了,一直再转圈圈,停不下来,但是通过run可以正常启动项目解决问题百度了一下才知道,原来有其他断点存在,会影响你的项目启动,这些都是之前打过的断点,但是由于... 查看详情

你的计算机也可以看懂世界——十分钟跑起卷积神经网络(windows+cpu)

学习、使用卷积神经网络已经挺久了,期间一直在基于贾扬清大神的Caffe框架来研究别人的模型,抑或是在无聊的时候以近似于算命一样的方式,眼睛微闭,摇头晃脑,口中不时漏出几个音节,半晌便DIY出一个自认为改进颇多的... 查看详情

《程序是怎样跑起的》第九章

操作系统的原型就是仅具有加载和运行功能的监控程序。通过事先启动监控程序,程序员就可以根据需要将各种程序加载到内存中运行。随着时代的进发展,开始有更多的功能被追加到监控程序中,比如,为了方便程序员的硬件... 查看详情

ubuntu安装到跑起tomcat全套教程

前段时间自己发布项目,并没有看到一个详细的全套案例,所以我抽出一上午的时间总结了一套,有什么不足的地方望指教,废话不多说,直接进入正题。本次安装已Ubuntu14为例Ubuntu14.04LTS是一款长期支持版本&... 查看详情

scrapy-redis能分布式post请求吗

...些功能制造些设备用于替换scrapy工厂原设备所要想跑布式先让scrapy工厂搭建起再用scrapy-redis设备更换scrapy某些设备些scrapy-redis组件突特点呢使用redis数据库替换scrapy原本使用队列结构(deque)换数据结构相应操作都要换啦所与队... 查看详情

ai人工智能:在生活变难之前,先让自己变强!

近几年大家对AI的关注度越来越高,在2016年世界互联网大会上,人工智能被冠以“四大热词”之一,2017年12月,人工智能入选“2017年度中国媒体十大流行语”。自从2016年AlphaGo以悬殊比分打败世界顶级围棋棋手李世石后,人们开... 查看详情

wpf的问题一个内容控件,打开界面的时候,我想先让界面显示出来,再加载数据,有啥办法没?

排除在构造函数和loaded事件中加载数据,效果不好,给用户的感觉是很卡.创建一个定时器,1秒或者一定时间后开始加载数据。需要读取数据的时候界面还不卡,考虑使用BackgroundWorker,在BackgroundWorker里直接用WaitDelay之类的也可以,... 查看详情

01.先让kubernetes跑起来

参考技术A①、修改主机名(Master、node1、node2)、修改hosts表、关闭selinux、清空防火墙、关闭firewalld服务(或者放行相应的端口);永久关闭swap,配置离线yum仓库;注:防火墙不能关闭,网络要使用iptables进行报文转发;要永久... 查看详情