// 插入
@Test
public void insertUser(){
User user = new User();
user.setAge(18);
user.setEmail("1440613133@qq.com");
user.setName("张三");
int i = userMapper.insert(user);
System.out.println("影响行数: " + i);
}
snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。可以保证几乎全球唯一!
主键自增
实体类字段上 @TableId(type = IdType.AUTO)
数据库字段一定要是自增!
其他的源码解释
public enum IdType {
AUTO(0), // 数据库id自增
NONE(1), // 未设置主键
INPUT(2), // 手动输入
ID_WORKER(3), // 默认的全局唯一id
UUID(4), // 全局唯一id uuid
ID_WORKER_STR(5); //ID_WORKER 字符串表示法
}
@Test
void updateTest(){
User user = new User();
user.setName("小明");
user.setAge(18);
user.setId(1532944121482711054L);
int i = userMapper.updateById(user);
System.out.println("影响行数: " + i);
}
创建时间、修改时间!这些个操作一遍都是自动化完成的,我们不希望手动更新!
阿里巴巴开发手册:所有的数据库表:gmt_create、gmt_modified几乎所有的表都要配置上!而且需要自动化!
方式一
在表中新增字段 create_time, update_time
再次测试插入方法。
方式二
// 字段添加填充内容
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
package com.weihong.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Slf4j
@Component
public class MyDateObjectHandler implements MetaObjectHandler {
// 插入时自动填充策略
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill");
this.setFieldValByName("creatTime",new Date(), metaObject);
this.setFieldValByName("updateTime",new Date(), metaObject);
}
// 修改时自动填充策略
@Override
public void updateFill(MetaObject metaObject) {
log.info("update start fill");
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
测试插入
测试更新、观察时间即可!
/**
* 批量查找:
* 按条件查找
*/
@Test
void findByMap(){
Map<String , Object> map = new HashMap<>();
map.put("name","张三");
List<User> users = userMapper.selectByMap(map);
for (User user : users) {
System.out.println(user);
}
}
/**
* 测试批量查询
*/
@Test
void findBathMap(){
// selectBatchIds(list a) Arrays.asList方法将数组装换成list集合
List<User> users = userMapper.selectBatchIds(Arrays.asList(1,2,3,4));
users.forEach(System.out::println);
}
分页方法:
如何使用!
// 分页插件
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
2、直接使用Page对象即可!
// 测试分页查询
@Test
public void testPage(){
// 参数一:当前页
// 参数二:页面大小
// 使用了分页插件之后,所有的分页操作也变得简单的!
Page<User> page = new Page<>(2,5);
userMapper.selectPage(page,null);
page.getRecords().forEach(System.out::println);
System.out.println(page.getTotal());
}
// 测试删除
@Test
public void testDeleteById(){
userMapper.deleteById(1240620674645544965L);
}
// 通过id批量删除
@Test
public void testDeleteBatchId(){
userMapper.deleteBatchIds(Arrays.asList(1240620674645544961L,124062067464554496
2L));
}
// 通过map删除
@Test
public void testDeleteMap(){
HashMap<String, Object> map = new HashMap<>();
map.put("name","张三");
userMapper.deleteByMap(map);
物理删除 :从数据库中直接移除
逻辑删除 :再数据库中没有被移除,而是通过一个变量来让他失效! deleted = 0 => deleted = 1
管理员可以查看被删除的记录!防止数据的丢失,类似于回收站!
测试一下:
实体类中增加属性
@TableLogic //逻辑删除
private Integer deleted;
配置!
// 逻辑删除组件!
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
# 配置逻辑删除
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
测试一下删除!
记录依旧在数据库,但是值确已经变化了!
以上的所有CRUD操作及其扩展操作,我们都必须精通掌握!会大大提高你的工作和写项目的效率!
💖💖💖 完结撒花
💖💖💖 如果命运是世上最烂的编剧。 那么你就要争取,做你人生最好的演员
💖💖💖 写作不易,如果您觉得写的不错,欢迎给博主点赞、收藏、评论来一波~让博主更有动力吧