- 测试
// 测试插入 @Test public void testInsert(){ user user = new user(); user.setName("吉士先生"); user.setAge(21); user.setEmail("979748385@qq.com"); int insert = userMapper.insert(user); System.out.println(insert); }
其他的主键策略解释
AUTO(0), //数据库自增 NONE(1), //数据库未操作 INPUT(2), //手动输入 ID_WORKER(3), //雪花算法 UUID(4), //UUID ID_WORKER_STR(5); //雪花算法字符串解释法
实体类
package com.jsxs.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class user { // bigint->Long @TableId(type = IdType.INPUT) //设置成自增 private Long id; private String name; // int->Integer private Integer age; private String email; }
测试类
// 测试插入 @Test public void testInsert(){ user user = new user(); user.setName("吉士先生"); user.setAge(21); user.setEmail("979748385@qq.com"); user.setId(7L); int insert = userMapper.insert(user); System.out.println(insert); }
4.更新操作💲
🛑WARNING:
在工作的时候,我们假如使用MybatisPlus第三方插件。我们的修改操作、删除操作一定要注意。
update函数会修改全部
@Test public void testUpdate(){ user user = new user(); user.setId(7L); user.setName("李明先生"); user.setAge(22); user.setEmail("979748385@qq.com"); int update = userMapper.update(user, null); // 增删改的返回值,其实就是被改变的行数 System.out.println(update); }
delete函数会删除全部
根据id进行修改的操作
// 测试修改 @Test public void testUpdate(){ user user = new user(); user.setId(7L); user.setName("李先生"); user.setAge(22); user.setEmail("979748385@qq.com"); int update = userMapper.updateById(user); // 增删改的返回值,其实就是被改变的行数 System.out.println(update); }
mybatis最牛逼的地方就是可以帮助我们动态的设置sql语句
5.自动填充
切记 date 和 datetime 和 timestmp的长度都为0
创建时间 . 修改时间! 这些操作都是自动化完成的,我们不希望手动更新!
阿里巴巴开发手册:所有的数据库表:gmt_create .gmt_modified几乎所有的表都要配置上!而且需要自动化!
方式一:数据库级别
1.在表中新增字段 gmt_create ,gmt_modified.默认未CREATE_TIMESTAMP
2.再次测试插入方法,我们需要先把实体类同步
private Date gmtCreate; private Date gmtUpdate;
再次更新查看结果即可
这里我们可是没有重新编写那个更新时间,是数据库帮我们做的
// 测试修改 @Test public void testUpdate(){ user user = new user(); user.setId(7L); user.setName("李生"); user.setAge(11); user.setEmail("979748385@qq.com"); int update = userMapper.updateById(user); // 增删改的返回值,其实就是被改变的行数 System.out.println(update); }
方式二: 代码级别♻⚠
1.删除数据库默认值
2.实体类字段属性上添加注解
package com.jsxs.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; @Data @AllArgsConstructor @NoArgsConstructor public class user { // bigint->Long @TableId(type = IdType.AUTO) private Long id; private String name; // int->Integer private Integer age; private String email; @TableField(fill = FieldFill.INSERT) // 这个意思就是插入的操作,当我们插入的时候会帮助我们自动更新时间 private Date gmtCreate; @TableField(fill = FieldFill.INSERT_UPDATE) //这个意思就是更新的操作,当我们插入然后更新就会自动更新时间 private Date gmtUpdate; }
3.编写处理器来处理这个注解
创建一个handel包,然后我们要记得添加@Compoent
package com.jsxs.mapper.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; // 我们需要继承一个处理程序 @Component // 注入到bean @Slf4j // 日志 public class MyMetaObjectHandler implements MetaObjectHandler { // 当我们插入的时候将会同时更新 创建时间和更新时间 @Override public void insertFill(MetaObject metaObject) { log.info("开始插入......"); // 插入值的名字、 this.setFieldValByName("gmtCreate",new Date(),metaObject); this.setFieldValByName("gmtUpdate",new Date(),metaObject); } @Override public void updateFill(MetaObject metaObject) { log.info("更新......"); this.setFieldValByName("gmtUpdate",new Date(),metaObject); } }
5测试更新,观察时间即可!
6.乐观锁处理讲解
- 乐观锁: 顾名思义十分乐观,他总是认为不会出现问题,无论干什么都不去上锁!如果出现了问题,再次更新值测试
- 悲观锁;顾名思义十分悲观,他总是认为出现问题,无论干什么都会上锁!再去操作!
(1).乐观锁机制
我们这里主要讲解 乐观锁机制!
乐观锁实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时,set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
乐观锁官方: 当要更新一条记录的时候,希望这条记录没有被别人更新
假如说就是A线程在还没有确定的时候,B线程抢先于A线程完成
乐观锁: 1.先查询,获得版本号 version=1 -- A 我们的意思是当我们每次更新version的时候都会自增1,前提是version是等于1的 update user set name="jsxs",version=version+1 where id=2 and version=1 --B B线程抢先完成,这个时候version=2 我们的意思是当我们每次更新version的时候都会自增1,前提是version是等于1的 update user set name="jsxs",version=version+1 where id=2 and version=1
(2).乐观锁实现:
- 在数据库中新增version字段
- 我们数据库对应的实体类
实体类
package com.jsxs.pojo; import com.baomidou.mybatisplus.annotation.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; @Data @AllArgsConstructor @NoArgsConstructor public class user { // bigint->Long @TableId(type = IdType.AUTO) private Long id; private String name; // int->Integer private Integer age; private String email; @Version // 乐观锁注解 private Integer version; @TableField(fill = FieldFill.INSERT) // 这个意思就是插入的操作,当我们插入的时候会帮助我们自动更新时间 private Date gmtCreate; @TableField(fill = FieldFill.INSERT_UPDATE) //这个意思就是更新的操作,当我们插入然后更新就会自动更新时间 private Date gmtUpdate; }










