步骤
需求步骤(基础版)
- 该文档主要让你了解Mybatis的基本使用和数据库交互的知识
1.新建Spring应用程序框架,并加了依赖包
2.数据库准备,至少有一个有数据的表
3.新建实体类
4.新建映射
5.新建测试项目
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 | 数据库自增 |
NONE | MP set主键,雪花算法实现 |
INPUT | 需要开发者手动赋值 |
ASSIGN_ID | MP分配 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);
}
测试通过