SpringBoot+Mybatis实现简单的增删改查

SpringBoot+Mybatis实现简单的增删改查

首先是在Springboot项目中整合Mybatis

先导入依赖
<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.2</version>
 </dependency>

这里我用的是MP,因为只是实现一些比较简单的数据库操作,所以使用mp可以减少代码量

接着就是对于mybatis,sql的配置

模板引擎我使用的是springboot推荐的thymeleaf,配置如下:

spring:
  thymeleaf:
    enabled: true  #开启thymeleaf视图解析
    encoding: utf-8  #编码
    prefix: classpath:/templates/  #前缀
    cache: false  #是否使用缓存
    mode: HTML  #严格的HTML语法模式
    suffix: .html  #后缀名
  datasource:
    name: test
    url: jdbc:mysql://localhost:3306/dfrz_edusys?useUnicode=true&characterEncoding=utf8
    username: root
    password: 123456
    # 使用druid数据源
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    filters: stat
    maxActive: 20
    initialSize: 1
    maxWait: 60000
    minIdle: 1
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: select 'x'
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    maxOpenPreparedStatements: 20

## 该配置节点为独立的节点,有很多同学容易将这个配置放在spring的节点下,导致配置无法被识别
mybatis:
  mapper-locations: classpath:mapping/*.xml  #注意:一定要对应mapper映射xml文件的所在路径
  type-aliases-package: com.example.login.bean  # 注意:对应实体类的路径
#pagehelper分页插件
pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

#mybatis-plus
mybatis-plus:
  mapper-locations: classpath:mapping/*.xml
  configuration:
    #开启MyBatis日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    cache-enabled: true

完成配置后就是对于mapper类的书写,先完成一个对于User信息的操作:

public interface UserMapper extends BaseMapper<User> {
    //public User getUserById(Integer id);
}

只要继承 BaseMapper就能够调用封装好的增删改查功能。

服务层的编写
public interface IUserService {
    public void addUser(User user);

    public User login(User user);

    public List<User> getUsers();

    public void editUser(User user);

    public void delUser(User user);

    public User getUser(User user);
}

Impl对于接口的具体实现如下:

public class UserServiceImpl implements IUserService{
    @Autowired
    UserMapper userMapper;

    @Override
    public void addUser(User user) {
        userMapper.insert(user);
    }

    @Override
    public User login(User user) {
        System.out.println(user.getUname()+" "+user.getUpass());
        if ("wsk".equals(user.getUname()) && "wsk".equals(user.getUpass())){
            return user;
        }else {
            return null;
        }
    }

    @Override
    public List<User> getUsers() {
        List<User> list = userMapper.selectList(null);

        return list;
    }

    @Override
    public void editUser(User user) {
        userMapper.updateById(user);
    }

    @Override
    public void delUser(User user) {
        userMapper.deleteById(user.getId());
    }

    @Override
    public User getUser(User user) {
        User user1 = userMapper.selectById(user.getId());
        return user1;
    }

}
接着编写单元测试用例:

首先是插入功能:

@Test
    public void test03() {
        //添加用户
        User user = new User(null, "testman20200701", "0701");
        userMapper.insert(user);
    }

结果如下
在这里插入图片描述
在这里插入图片描述
接着是查询功能,根据id(主键)来查询,调用selectById()接口即可实现

@Test
    public void test01() {
        User user = userMapper.selectById(7);
        System.out.println(user);
    }

结果如下
在这里插入图片描述
删除功能代码如下:

@Test
    public void test05(){
        userMapper.deleteById(7);
    }

结果如下:
在这里插入图片描述
更新代码如下:

@Test
    public void test06(){
        userMapper.updateById(new User(9,"qwe","qwe"));
    }

结果如下
在这里插入图片描述
本篇仅对于mybatis-plus的简单增删改查接口进行单员测试,服务层代码还未用到(写完博客才发现,懒得删了),所以在下一篇博客会具体讲到结合前端页面,如何进行完整的增删改查。😃

热门文章

暂无图片
编程学习 ·

mysql8 windows版密码忘记如何重新设置?

本机安装位置:D:\Program Files (x86)\java\mysql-8.0.13-winx64重设密码具体过程:还好有一个navicat的连接可以打开,查看其中的用户名和主机名称(一般默认是这个,改了又忘了的话我也没办法了)打开cmd,用管理员的身份运行,先关闭mysql(net stop mysql);然后进入mysql8所…
暂无图片
编程学习 ·

layui的时间控件laydate实现不用点击确定按钮

laydate.render({elem: #start, //指定元素type:month, //插件只选择年月showBottom :false, //关闭底部框 去掉取消、确定、清空按钮change: function(value, date, endDate){$("#start").val(value);if($(".layui-laydate").length){$(".layu…
暂无图片
编程学习 ·

坚强奋斗的后浪们,后浪们的逆风翻盘之路。

逆风5.4日B站播出了后浪,视频伴随着激情澎湃的音乐、华丽无比的台词、精英人士的代言,可以说很振奋人心。但是观看后,网上却有着两种不同的声音,分别是乐观与悲观。当然伴随着疫情肆虐,悲观的声音反而是最响亮。90后们更是看的焦躁不安、时逢逆风,如何翻盘? 逆风论点:通…
暂无图片
编程学习 ·

前端适配问题总结

前端适配问题总结视口布局的优点:宽度和高度全部自动适应!再加上rem布局的字体适应,可以完美解决各种屏幕适配问题!1.vw:1vw等于视口宽度的1%。2.vh:1vh等于视口高度的1%。3.vmin:选取vw和vh中最小的那个。4.vmax:选取vw和vh中最大的那个。vh and vw:相对于视口的高度…
暂无图片
编程学习 ·

05 Pandas(2)

# Author:Nimo_Dingimport pandas as pd import numpy as np from pandas import Series,DataFrame# 数据表的合并 df1=DataFrame({name:[ZhangFei,GuanYu,a,b,c],data1:range(5) }) df2=DataFrame({name:[ZhangFei,GuanYu,A,B,c],data2:range(5) }) print(\n1、基于指定列进行…
暂无图片
编程学习 ·

7-9 1.2.5 双重回文数 (70分)

如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”.例如,12321 就是一个回文数,而 77778 就不是. 当然,回文数的首和尾都应是非零的,因此 0220 就不是回文数. 事实上,有一些数(如 21),在十进制时不是回文数,但在其它进制(如二进制时为 10101)时就是 回…
暂无图片
编程学习 ·

文献管理之 Citavi & Latex

文章目录为什么选择Citavi安装地址使用指南不足之处官方文档 为什么选择Citavi 比较好的文献管理软件主要有Citavi、Endnote、Mendeley、Zotero,根据Citavi、Endnote、Mendeley 功能大比拼!到底哪一款才是众望所归的终极文献管理软件?总结,Citavi不仅是个免费的软件,而且功…
暂无图片
编程学习 ·

int 作为POJO类属性的坑

int 作为POJO类属性的坑Lombok 主键更新 updateById ,这一句主键更新没有更新floorNumber 但是floorNumber 每次都被更新为 0@ApiModelProperty(value = "楼层")private int floorNumber;Integer up = 100; baseMapper.updateById(AppVillageCircleComment.builde…
暂无图片
编程学习 ·

React配置less以及less的全局变量设置

工作中接触react的项目比较的少,对于less的全局变量设置在vue项目中设置过,react的全局变量设置没怎么接触了。 看到有小伙伴问这个,试着在网上找了下,也是花费了不少的功夫才找到不错的方式,在这里分享给大家。 由于之前vue项目里没法使用sass-resource-loader,一开始也…
暂无图片
编程学习 ·

【机器学习】图神经网络

图神经网络是一种直接在图结构上运行的神经网络。GNN 的一个典型应用是节点分类。本质上,图中的每个节点都与一个标签相关联,我们的目的是预测没有 ground-truth 的节点的标签。 将node编码到特征空间:将卷积神经网络中的方法泛化到graph中,用邻居节点来update该节点的feat…
暂无图片
编程学习 ·

Portworx Essentials 视频讲解

Portworx Essentials vs. Portworx Enterprise:https://www.iqiyi.com/v_19rzfuk1yw.html欢迎回到Portworx讲解视频系列,我是Ryan Warner。今天我们来介绍一下Portworx Essentials版本,以及与Portworx Enterprise版本的区别。Portworx Essentials是在K8S上运行数据管理的最必…
暂无图片
编程学习 ·

每日一题 -- LeetCode (八)

JavaScript / TypeScript for LeetCode 当前进程:开始时间:2020.6.27 结束时间:undefinedGitHub仓库:https://github.com/Cundefined/JavaScript-or-TypeScript-for-LeetCode 参考视频:https://www.bilibili.com/video/BV1wA411b7qZ 1、题目要求 ( LeetCode-第53题 ) 最大…
暂无图片
编程学习 ·

C++字符串的输入和用getline输入遇到的问题

C++中的字符串读入我们通常是用 cin>>str; 它只要碰到空格或者换行符就意味着本字符串读取结束,且不会读取空格和换行符(相当于丢掉)。 而getline函数读取一行,可以读入空格,遇到换行符结束(从输入流中丢掉该换行符)。但是,注意一点就是:如果只读入了一个换行符…
暂无图片
编程学习 ·

将现有Vue项目改为electron桌面端

零、前言之前看了看electron-vue,感觉还是存在一些问题的,比如electon的版本特别特别低,不能忍受。且如果你是用vue搭建的项目,最后希望能够打包成桌面端,其实很简单。一、基本步骤(1)创建vue项目、并进行开发vue create vueDemo(2)突然一天我想打包成桌面程序了// 进…
暂无图片
编程学习 ·

加速推进新基建,中国联通软件研究院助力广东智造云升级为全国工业平台

加速推进新基建,中国联通软件研究院助力广东智造云升级为全国工业平台发稿时间:2020-07-01 11:260【字体: 大 中 小】6月23日,中国联通智造云全国级工业市场顺利完成上线,6月28日,智造云产品成功在湖北省签约下单,打破了省内地域的限制,实现了省分政企创新业务迈向全国…
暂无图片
编程学习 ·

Java Spring Shiro 安全框架:(八)加密算法

加密算法1.手动处理数据时,自行使用MD5加密2.使用Shiro的MD5方式进行加密在身份认证的过程中往往都会涉及到加密,如果不加密,这个时候信息就会非常的不安全,shiro 中提供的算法比较多 如 MD5 SHA 等1.手动处理数据时,自行使用MD5加密 package com.shiro3;import org.apache.s…
暂无图片
编程学习 ·

RetinaNet(基于resnet50和fpn)的tensorboard网络架构图

采用网络的backbone部分,为了能运行tensorboard,所以必须要是完整的网络,所以结尾采用提取有效特征层P7(tensor类型),进行Flatten拉平,然后接了一层全连接,使用虚拟数据进行空跑,才能进入tensorboard。 Keras和TF是可以互通,使用tf.keras更加方便,中间可以嵌套tf,使…
暂无图片
编程学习 ·

Java中的递归

Java中的递归(涉及到面试)举个例子: package com.wang.digui; /* 递归*/ public class Demo {public static void main(String[] args) {int calcetor = calcetor(3);System.out.println(calcetor);}//算阶乘的public static int calcetor(int n){if (n == 1){return 1;}els…
暂无图片
编程学习 ·

datawhale-综合练习题目

这里写自定斜体样式义目录标题这两天考试多,休息的时间也没有,等我考完再重新做回来,等我!功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建…