insert
1.插入操作
@RunWith(SpringRunner.class)
@SpringBootTest
public class CRUDTests {
@Autowired
private UserMapper userMapper;
@Test
public void testInsert(){
User user = new User();
user.setName("yu");
user.setAge(25);
user.setEmail("1321017180@qq.com");
int result = userMapper.insert(user);
System.out.println(result); //影响的行数
System.out.println(user); //id自动回填
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class CRUDTests {
@Autowired
private UserMapper userMapper;
@Test
public void testInsert(){
User user = new User();
user.setName("yu");
user.setAge(25);
user.setEmail("1321017180@qq.com");
int result = userMapper.insert(user);
System.out.println(result); //影响的行数
System.out.println(user); //id自动回填
}
}
注意:不需要设置id值,因为mybatisPlus自动生成一个19位的id值
2.主键策略
策略的几种类型
public enum IdType {
AUTO(0),
NONE(1),
INPUT(2),
ID_WORKER(3),
UUID(4),
ID_WORKER_STR(5);
}
(1)自增策略
自增策略的两个必要条件
- 需要在创建数据库表的时候设置主键自增
- 实体字段中配置 @TableId(type = IdType.AUTO
@TableId(type = IdType.AUTO) private Long id;
优点:简单,代码方便,性能可以接受,排序。
缺点:分表分库的时候会有麻烦。因为后面的白会依赖前面的。
全局主键配置是在application.properties文件中加入
#mybatis日志 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
局部策略
主键设置主键策略使用注解方式为
(2)UUID@TableId(type = IdType.ID_WORKER)//mp自带策略,生成19位值,数字类型使用这种策略 @TableId(type = IdType.ID_WORKER_STR)//mp自带策略,生成19位值,字符串类型使用这种策略 private Long id;
随机唯一值
UUID是由32个的16进制数字组成,所以每个UUID的长度是128位(16^32 = 2^128)。
优点:
1)简单,代码方便。
2)生成ID性能非常好,基本不会有性能问题。
3)可以做安全设置。
缺点:
1)没有排序,无法保证趋势递增。
2)UUID往往是使用字符串存储,查询的效率比较低。
(3)MybatisPlus自带的雪花算法@TableId(type = IdType.UUID)
核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。
(4)Redis生成ID@TableId(type = IdType.ID_WORKER)//mp自带策略,生成19位值,数字类型使用这种策略 @TableId(type = IdType.ID_WORKER_STR)//mp自带策略,生成19位值,字符串类型使用这种策略
比较适合使用Redis来生成每天从0开始的流水号。比如订单号=日期+当日自增长号。可以每天在Redis中生成一个Key,使用INCR进行累加。
优点:
1)不依赖于数据库,灵活方便,且性能优于数据库。
2)数字ID天然排序,对分页或者需要排序的结果很有帮助。
缺点:
二、update1)如果系统中没有Redis,还需要引入新的组件,增加系统复杂度。
2)需要编码和配置的工作量比较大。
1、根据Id更新操作
2.自动填充不需要set到对象里面的值,使用mybatisplus的方式实现数据
项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。
我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作
传统的创建方式
自动方式
(1)数据库表中添加自动填充字段在User表中添加datetime类型的新的字段 create_time、update_time
(2)实体类加注解
@Data
public class User {
........
@TableField(fill = FieldFill.INSERT)
private Date creatTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
(3)实现元对象处理器接口
创建类实现接口MetaObjectHandler实现接口中的方法
注意:不要忘记添加 @Component 注解,表示交给Spring进行管理
(4)测试自动填充成功



