小工具      在线工具  汉语词典  css  js  c++  java

MyBatis-Plus注意事项

# MyBatis,mybatis,java,mysql 额外说明

收录于:152天前

Mybatis-Plus中文网的快速开始可以快速搭建项目,具体就不多介绍,主要讲述遇到的几个问题。

  1. 导入依赖项
<dependency>
	<groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>
  1. 在Spring Boot启动类中添加@MapperScan注解来扫描Mapper文件夹:
@MapperScan("com.example.mybatisplus01.mapper")

//
@SpringBootApplication
@MapperScan("com.example.mybatisplus01.mapper")
public class MybatisPlus01Application {
    

    public static void main(String[] args) {
    
        SpringApplication.run(MybatisPlus01Application.class, args);
    }

}
  1. 在Mapper包下编写UserMapper接口
public interface UserMapper extends BaseMapper<User> {
    

}

测试程序:

    @Test
    public void UserTest(){
    
        List<User> userList = userMapper.selectList(null);
        System.out.println(userList);
    }

第一个错误
Public Key Retrieval is not allowed,在我们使用MySQL8.0的,连接数据库会存在一定的问题当提示:Public Key Retrieval is not allowed 错误的时候,我们可以在连接数据库的配置文件中加上

allowPublicKeyRetrieval=true

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/smbms?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false

第二个错误

在这里插入图片描述
由于我的数据表名是smbms_user,而bean是user并不对应,需要使用@TableName注解声明

在这里插入图片描述

第三个错误
Unknown column 'user_code' in 'field list'

在这里插入图片描述
在Java Bean对象中使用的是驼峰命名,但是经Mybatis-Plus映射后变为了_的命名方式(userCode变为user_code),这和数据库字段和pojo的都不一样,需要将java bean和数据库字段按mybatis-plus的命名方式更改吗?

Mybatis-Plus提供了@TableField注解来解决这一问题:

在这里插入图片描述

package com.example.mybatisplus01.domain;

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

@TableName("smbms_user")
public class User {
    
    private int id;
    @TableField("userCode")
    private String userCode;
    @TableField("userName")
    private String userName;
    @TableField("userPassword")
    private String userPassword;
    private int gender;
    private String birthday;
    private String phone;
    private String address;
    @TableField("userRole")
    private int userRole;
    @TableField("createdBy")
    private int createdBy;
    @TableField("creationDate")
    private String creationDate;
    @TableField("modifyBy")
    private int modifyBy;
    @TableField("modifyDate")
    private String modifyDate;

    public int getId() {
    
        return id;
    }

    public void setId(int id) {
    
        this.id = id;
    }

    public String getUserCode() {
    
        return userCode;
    }

    public void setUserCode(String userCode) {
    
        this.userCode = userCode;
    }

    public String getUserName() {
    
        return userName;
    }

    public void setUserName(String userName) {
    
        this.userName = userName;
    }

    public String getUserPassword() {
    
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
    
        this.userPassword = userPassword;
    }

    public int getGender() {
    
        return gender;
    }

    public void setGender(int gender) {
    
        this.gender = gender;
    }

    public String getBirthday() {
    
        return birthday;
    }

    public void setBirthday(String birthday) {
    
        this.birthday = birthday;
    }

    public String getPhone() {
    
        return phone;
    }

    public void setPhone(String phone) {
    
        this.phone = phone;
    }

    public String getAddress() {
    
        return address;
    }

    public void setAddress(String address) {
    
        this.address = address;
    }

    public int getUserRole() {
    
        return userRole;
    }

    public void setUserRole(int userRole) {
    
        this.userRole = userRole;
    }

    public int getCreatedBy() {
    
        return createdBy;
    }

    public void setCreatedBy(int createdBy) {
    
        this.createdBy = createdBy;
    }

    public String getCreationDate() {
    
        return creationDate;
    }

    public void setCreationDate(String creationDate) {
    
        this.creationDate = creationDate;
    }

    public int getModifyBy() {
    
        return modifyBy;
    }

    public void setModifyBy(int modifyBy) {
    
        this.modifyBy = modifyBy;
    }

    public String getModifyDate() {
    
        return modifyDate;
    }

    public void setModifyDate(String modifyDate) {
    
        this.modifyDate = modifyDate;
    }

    @Override
    public String toString() {
    
        return "User{" +
                "id=" + id +
                ", userCode='" + userCode + '\'' +
                ", userName='" + userName + '\'' +
                ", userPassword='" + userPassword + '\'' +
                ", gender=" + gender +
                ", birthday='" + birthday + '\'' +
                ", phone='" + phone + '\'' +
                ", address='" + address + '\'' +
                ", userRole=" + userRole +
                ", createdBy=" + createdBy +
                ", creationDate='" + creationDate + '\'' +
                ", modifyBy=" + modifyBy +
                ", modifyDate='" + modifyDate + '\'' +
                '}';
    }
}



Mybatis-Plus会自动将驼峰命令改为_下划线的,所以在数据库表设计之初可以遵循其规则设计。否则就需要使用@TableField来覆盖默认。

测试成功:
在这里插入图片描述

Mybatis-Plus注解的使用

增删改查操作

  1. 添加

在这里插入图片描述
可以看到插入操作只有一种方法,那必然是插入一个数据项(一行元素)包含了数据库表的各个字段,这就意味着mybatis-plus帮我们完成了mybatis的如下的模块:

<insert paramerType="pojo">
	insert into user(...) values (...)
</insert>

同时限制插入的输入对象只能是Java bean对象。对于开发者来说,只需要输入对象实例即可。

测试代码:


import com.example.mybatisplus01.domain.User;
import com.example.mybatisplus01.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

@SpringBootTest
@RunWith(SpringRunner.class)
public class MybatisTest01 {
    

    @Resource
    private UserMapper userMapper;

    @Test
    public void insetTest(){
    
        User user = new User();
        user.setId(16);
        user.setAddress("北京市海淀区成府路207号");
        user.setBirthday("1980-01-01");
        user.setCreatedBy(1);
        user.setGender(1);
        user.setCreationDate("1980-01-01");
        user.setModifyBy(1);
        user.setModifyDate("2013-03-21 16:52:07");
        user.setPhone("18567542321");
        user.setUserCode("lihua");
        user.setUserName("李华");
        user.setUserRole(1);
        user.setUserPassword("1234567");
        userMapper.insert(user);
    }
}

插入类型仅限于 java bean 类型。

2. 删除

在这里插入图片描述

delete接口有四个方法,一般之用的上deleteById()方法传入一个id即可。

    @Test
    public void deleteTest1(){
    
        userMapper.deleteById(17);
    }
  1. 改变

在这里插入图片描述
updateById()方法是传入一个Java bean根据id选择修改对应的字段,java bean提供几个字段就修改那几个字段。

  1. 寻找

在这里插入图片描述

. . .

相关推荐

额外说明

将mysql改成所有IP都能访问

    一般安装mysql后,只能localhost访问,怎么让其他远程机器也能访问呢     将host地址改为通配符“%”, 最后一定还要刷新权限 flush privileges    

额外说明

PostgreSQL 和标准 SQL:2023 年的新增功能

上一篇文章我们介绍了即将发布的 SQL:2023 标准中的新特性。作为最先进的开源关系型数据库,PostgreSQL 至少支持了 SQL:2023 标准 177 项强制功能中的 170 项。 本文并不是一个完整的 PostgreSQL 支持列表,而是专注

额外说明

python多线程 (2)

import threading import time def thread_job(): print('T1 start\n') for i in range(10): time.sleep(0.1) #

额外说明

HNU-离散数学期末考试题库

离散数学是一门重要基础学科,希望HUNer们努力学好 以下为2016-2020湖南大学离散数学期末正式考题 一、命题逻辑等值演算 二、谓词逻辑推理题 三、关系 四、群论 五、图论 六、组合数学

额外说明

个人随笔:实习一个多月总想写点东西

如果您不幸看到了这篇博客,还是关掉吧,这里只是我个人的胡诌,很大程度上与您而言无半点价值 口水回忆录: 大致6月份准备的简历,边准备边学习,简历和知识都更新迭代了,大致到了7月份(后来听说很多公司在秋招前会在6、7月份有类似于提前批的操作) 于是就bos

额外说明

【Rust 基础篇】Rust 通道实现单个消费者多个生产者模式

导言 在 Rust 中,我们可以使用通道(Channel)来实现单个消费者多个生产者模式,简称为 MPMC。MPMC 是一种常见的并发模式,适用于多个线程同时向一个通道发送数据,而另一个线程从通道中消费数据的场景。本篇博客将详细介绍 Rust 中单个消费

额外说明

跨域解决方案之JSONP的解决方式汇总与示例演示

JSONP 是在前端解决跨域访问的解决方案, 利用的是<script>的src没有跨域限制的这个例外进行实现的。 关于跨域可以参考: 跨域访问的相关概念及解决方法 关于JSONP 可以参考: 跨域解决方案之JSONP原理及基本解决 本篇汇总JSONP 的

额外说明

@Transactional注解异常报错之多数据源

如果在加上@Transactional注解之后报错,先查看程序是否为多数据源,之前专门有一章讲解springboot的多数据源实现。多数据源的情况下加事物注解,有可能会出现问题,以下是解决方案。 1.在配置数据源的同时,一定到在其中一个配置上加上@Pri

额外说明

ES6学习笔记03:变量的解构赋值

ES6学习笔记03:变量的解构赋值 如果想从复杂数据结构(数组、对象)中获取某一个数据,可能需要大量的遍历操作才能完成。通过解构赋值,这一过程可以得到简化。 1、字符串的解构赋值 其实,Python也具有字符串的解构赋值特性。 2、数组的解构赋值 其实,

额外说明

Linux三剑客sed

注意sed和awk使用单引号,双引号有特殊解释 sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器。 sed是操作、过滤和转换文本内容的强大工具。 常用功能包括结合正则表达式对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过

ads via 小工具