关键词:
架空一切前提条件,只讲怎么让它跑起来,实现基本的增删改查操作!
假设:
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进行报文转发;要永久... 查看详情