碎片知识-02 MyBatis Plus 后台数据库操作详解--细到没朋友

步骤

需求步骤(基础版)

  • 该文档主要让你了解Mybatis的基本使用和数据库交互的知识
    1.新建Spring应用程序框架,并加了依赖包
    2.数据库准备,至少有一个有数据的表
    3.新建实体类
    4.新建映射
    5.新建测试项目
    6.编写测试代码
    以上是这个知识点所需要的操作步骤*

流程图(官方版)

1.新建SpringBoot工程
2.pom.xml 引入MyBatis依赖
3.创建实体类
4.创建Mapper接口
5.启动类添加MapperScan
6.测试

具体方法

1.省略
2.数据库,如图所示,选择bussiness_name 作为测试模拟数据

在这里插入图片描述

3.新建实体类

在这里插入图片描述

代码

package com.southwind.layui.entity;
import lombok.Data;
@Data
public class bussinessName {    
private Integer ID;    
private String name;    
private String bumen;    
private String gonghao;
}
4,映射

在这里插入图片描述

5.新建测试

在这里插入图片描述

6.编写测试代码
(1)查询语句

此方法将会查询出列表中所有数据

@Test
void select(){   
    List<bussinessName> list = mapper.selectList(null);    
    list.forEach(System.out::println);
}

在这里插入图片描述

(2)条件查询(构造器)
任务一:

选择出中包含“花”字且工号<50
语法:
name like ‘%花%’ and gonghao<40

代码

@Test
void selectByWrapper(){    
        QueryWrapper<bussinessName> queryWrapper = new QueryWrapper<bussinessName>();    
        queryWrapper.like("name","花").lt("gonghao",50);    
        List<bussinessName> list = mapper.selectList(queryWrapper);    
        list.forEach(System.out::println);
}

结果
在这里插入图片描述

任务二:

选择出包含“花”并且工号大于等于20小于27并且部门不能为空
语法:
name like ‘%花%’ and gonghao between 20 and 27 bumen is not null

代码

@Test
void selectByWrapper2(){   
QueryWrapper<bussinessName> queryWrapper = new QueryWrapper<bussinessName>();    
queryWrapper.like("name","花").between("gonghao",20,27).isNotNull("bumen");    
List<bussinessName> list = mapper.selectList(queryWrapper);   
list.forEach(System.out::println);
}

结果
在这里插入图片描述

任务三:

选择出中包含“花”字且工号<50,只返回指定的字段

代码

@Testvoid selectByWrapper3(){    
        QueryWrapper<bussinessName> queryWrapper = new QueryWrapper<bussinessName>();    
        queryWrapper.select("ID","name").like("name","花").lt("gonghao",50);    
        List<bussinessName> list = mapper.selectList(queryWrapper);    list.forEach(System.out::println);
}

结果

(3)插入语句

注意:在插入语句之前,如果希望数据库ID自增,请做好两个步骤。
1.设置数据库主键自增,赋默认值
2.开启 @TableId(type = IdType.AUTO)

代码:

@Testvoid add(){    
bussinessName newperson = new bussinessName();    
newperson.setGonghao("228");    
newperson.setBumen("销售部");    
newperson.setName("小李");    
mapper.insert(newperson);}

结果:
在这里插入图片描述

(4)删除语句

任务:删除某个字段对应的一行

  • 代码-方法一
@Testvoid Delete(){
    int row = mapper.deleteById(4);   
    System.out.println("删除条数" + row);
}

结果 4号已经删除

在这里插入图片描述

  • 代码-方法二
    省略 通过mapper库
(5)更新语句

任务:
更新ID = 1 的部门

  • 第一种代码方式
@Test
void update(){    
bussinessName newperson = new bussinessName();   
newperson.setID(1);    
newperson.setBumen("技术销售");    
int rows = mapper.updateById(newperson);    
System.out.println("影响记录数:" +rows);}

结果
在这里插入图片描述
在这里插入图片描述

  • 第二种代码方式
@Testvoid update1(){   
QueryWrapper<bussinessName> updateWrapper = new QueryWrapper<>();    
        updateWrapper.eq("name","小东").eq("bumen","销售部");    
        bussinessName newperson = new bussinessName();    
        newperson.setGonghao("999");    
        int rows = mapper.update(newperson,updateWrapper);    
        System.out.println("影响记录数:" +rows);
 }

结果
在这里插入图片描述

常用注解

@TableName
解决数据库名称不一样的问题

@TableId
解决字段名称不一样的问题(主键)
value 映射关键字的段名,
type 设置主键类型,主键的生成策略

描述
AUTO数据库自增
NONEMP set主键,雪花算法实现
INPUT需要开发者手动赋值
ASSIGN_IDMP分配 ID, Long、Integer、String
ASSIGN_UUID分配 UUID、String

@TableField
解决字段名称不一样的问题
映射非主键字段,value 映射字段名
fill 表示是否自动填充,将对象存入数据库的时候,有MyBatis Plus自动给某些字段赋值,create_time,update_time

看一个常用的例子:比如用户修改时间如何保证首次创建的时间不会改变!

1.在之前的数据库基础上新增两个字段创建时间和更新时间,并添加在实体类

@Data
public class bussinessName {
    @TableId(type = IdType.AUTO)
    private Integer ID;
    private String name;
    private String bumen;
    private String gonghao;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

2.创建处理器,新建一个handle的类

package com.southwind.layui.handle;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {    
    @Override    
    public void insertFill(MetaObject metaObject) {        
    this.setFieldValByName("createTime",new Date(),metaObject);        
    this.setFieldValByName("updateTime",new Date(),metaObject);   
    }    

    @Override    
    public void updateFill(MetaObject metaObject) {        
    this.setFieldValByName("updateTime",new Date(),metaObject);    
}

}

结果
插入:
在这里插入图片描述

更新:

@Test
void update(){    
        bussinessName bussinessName = mapper.selectById(8);    
        bussinessName.setBumen("技术销售");    
        int rows = mapper.updateById(bussinessName);   
        System.out.println("影响记录数:" +rows);
   }

测试通过

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值