2023年6月27日发(作者:)
MybatisPlus--CRUD接⼝及主键增长策略、⾃动填充、乐观锁更新数据⽬录⼀、insert1、插⼊操作@RunWith()@SpringBootTestpublic class CRUDTests { @Autowired private UserMapper userMapper; @Test public void testInsert(){ User user = new User(); e("Helen"); (18); il("55317332@"); int result = (user); n(result); //影响的⾏数 n(user); //id⾃动回填 }}注意:数据库插⼊id值默认为:全局唯⼀id2、主键策略(1)ID_WORKERMyBatis-Plus默认的主键策略是:ID_WORKER 全局唯⼀ID(2)⾃增策略要想主键⾃增需要配置如下主键策略需要在创建数据表的时候设置主键⾃增实体字段中配置 @TableId(type = )@TableId(type = )private Long id;要想影响所有实体的配置,可以设置全局主键配置#全局设置主键⽣成策略-type=auto 其它主键策略:分析 IdType 源码可知@Getterpublic enum IdType { /** * 数据库ID⾃增 */ AUTO(0), /** * 该类型为未设置主键类型 */ NONE(1), /** * ⽤户输⼊ID * 该类型可以通过⾃⼰注册⾃动填充插件进⾏填充 */ INPUT(2), /* 以下3种类型、只有当插⼊对象ID 为空,才⾃动填充。 */ /** * 全局唯⼀ID (idWorker) */ ID_WORKER(3), /** * 全局唯⼀ID (UUID) */ UUID(4), /** * 字符串全局唯⼀ID (idWorker 的字符串表⽰) */ ID_WORKER_STR(5); private int key; IdType(int key) { = key; }}⼆、update1、根据Id更新操作注意:update时⽣成的sql⾃动是动态sql:UPDATE user SET age=? WHERE id=?
@Test public void testUpdateById(){ User user = new User(); (1L); (28); int result = ById(user); n(result); }2、⾃动填充项⽬中经常会遇到⼀些数据,每次都使⽤相同的⽅式填充,例如记录的创建时间,更新时间等。我们可以使⽤MyBatis Plus的⾃动填充功能,完成这些字段的赋值⼯作:
(1)数据库表中添加⾃动填充字段在User表中添加datetime类型的新的字段 create_time、update_time(2)实体上添加注解@Datapublic class User { ......
@TableField(fill = ) private Date createTime; //@TableField(fill = ) @TableField(fill = _UPDATE) private Date updateTime;}(3)实现元对象处理器接⼝注意:不要忘记添加 @Component 注解@Componentpublic class MyMetaObjectHandler implements MetaObjectHandler { private static final Logger LOGGER = ger(); @Override public void insertFill(MetaObject metaObject) { ("start insert fill ...."); ldValByName("createTime", new Date(), metaObject); ldValByName("updateTime", new Date(), metaObject); } @Override public void updateFill(MetaObject metaObject) { ("start update fill ...."); ldValByName("updateTime", new Date(), metaObject); }}3、乐观锁主要适⽤场景:当要更新⼀条记录的时候,希望这条记录没有被别⼈更新,也就是说实现线程安全的数据更新乐观锁实现⽅式:取出记录时,获取当前version更新时,带上这个version执⾏更新时, set version = newVersion where version = oldVersion如果version不对,就更新失败 (1)数据库中添加version字段ALTER TABLE `user` ADD COLUMN `version` INT
(2)实体类添加version字段并添加 @Version 注解@Version@TableField(fill = )private Integer version;(3)元对象处理器接⼝添加version的insert默认值@Overridepublic void insertFill(MetaObject metaObject) { ...... ldValByName("version", 1, metaObject);}特别说明:⽀持的数据类型只有 int,Integer,long,Long,Date,Timestamp,LocalDateTime整数类型下 newVersion = oldVersion + 1newVersion 会回写到 entity 中仅⽀持 updateById(id) 与 update(entity, wrapper) ⽅法在 update(entity, wrapper) ⽅法下, wrapper 不能复⽤
(4)在 MybatisPlusConfig 中注册 Bean创建配置类@EnableTransactionManagement@Configuration@MapperScan("s_")public class MybatisPlusConfig { /** * 乐观锁插件 */ @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); }}(5)测试乐观锁可以修改成功测试后分析打印的sql语句,将version的数值进⾏了加1操作/** * 测试 乐观锁插件 */@Testpublic void testOptimisticLocker() { //查询 User user = ById(1L); //修改数据 e("Helen Yao"); il("helen@"); //执⾏更新 ById(user);}此时数据库中的version版本也变为了2三、select1、根据id查询记录@Testpublic void testSelectById(){ User user = ById(1L); n(user);}2、通过多个id批量查询完成了动态sql的foreach的功能@Testpublic void testSelectBatchIds(){ List
(3)测试selectMapsPage分页:结果集是Map@Testpublic void testSelectMapsPage() { Page
(7)测试逻辑删除后的查询MyBatis Plus中查询操作也会⾃动添加逻辑删除字段的判断/** * 测试 逻辑删除后的查询: * 不包括被逻辑删除的记录 */@Testpublic void testLogicDeleteSelect() { User user = new User(); List
SELECT id,name,age,email,create_time,update_time,deleted FROM user WHERE deleted=0
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1687816189a47624.html
评论列表(0条)