检查 tableInfo.getTableName() 有没有获取到正确的表名,用日志排查一下
直接手动输入表名:tableInfo.setTableName("your_table_name");
查阅官网,发现要用了新的版本,加入了如下代码:
@Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return mybatisPlusInterceptor; }
添加了依赖:
<!-- MybatisPlusInterceptor乐观锁--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>3.5.2</version> </dependency> </dependencies>
问题完美解决!!
对比设置的MyMetaObjectHandler里的条件字段是否正确,所设置的时间需求是当前时间(LocalDateTime.now())或者其他时间
这个错误是指你的user表中没有deleted这一列,你需要修改表结构,在sql中执行
ALTER TABLE user ADD deleted INT;
他讲的这个和目前官网版本差距有点大,反正我是结合讲的和看的官网文档以及官网提供的案例,理解起来感觉还可以。
可以的
MP本身不支持恢复数据,恢复方法可参考:https://blog.csdn.net/qq_38989725/article/details/125910118
可以参考:https://juejin.cn/post/6920102056149647374
@InterceptorIgnore(tenantLine = "true") 替代。
我理解你想说的是拦截器吧 原理是一样的
把配置都开了不就好了?
手动加上呀,例如wrapper.eq("deleted",0)
是的,必须提前获取,不让你不知道原来的version是多少,而导致无法更新。
select max(id) from 表名,这样应该可以实现你的需求,但是你得确保,你得到这个结果后没有新的数据插入,如果有新数据插入,它就不是最大的id了。
不会吧,你set表名的代码是在查询方法之前吗?
按照我教程中的步骤设置的吗?乐观锁插件加了吗?你提供的信息太少了,我无法判断出原因。
没明白你说的,原生的mybatis,支持sql语句写在xml中或注解中,写在注解中也可以,xml中不是必须的。
明白了就好,我最新的课程中,专门讲解了新增人和修改人如何自动填充,欢迎观看。
我的建议是,在生产环境配置正常的数据库,开发和测试环境配置p6spy。除非有特殊情况并且单位规范允许的情况下,才能在生产环境下使用p6spy排查慢sql等问题。
这个应该可以使用分组函数可以解决。就是你想要非重复的那个字段,作为分组条件,但是要显示的其他列,控制起来可能有些费劲,不一定是显示多条数据中的哪一个
请问你数据库的主键,没有设置自增,是由自己维护是吗?注释上说“该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)”,是不是全局的主键策略配置的是由自己维护主键,如果是这样,自己生成主键,设置上就可以了。
如果是非前后端分离的,一般把当前登录人信息存到session中,可以使用RequestContextHolder实现,我的新课程有讲解,课程地址:https://www.imooc.com/learn/1294,欢迎观看
这个结果是对的呀,deleted之所以为null,应该是你重写的toString方法中,包含deleted,并且把他打印出来了。
在mp的官方文档中,有说明哪些会存在sql注入的风险,例如:last,还有apply的一种只用方式。官方文档地址:https://mybatis.plus/guide/wrapper.html
自动填充类中,你调用的填充方法中,需要设置要填充的属性的类型,要和你实体类中待填充的属性的类型一致。
看MP3.4.1版本对TenantLineHandler接口的注释,“获取租户 ID 值表达式,只支持单个 ID 值”。如果以官方的注释来判断,是不支持in的。
是的,如果使用了MP的逻辑删除,并且实体中使用了注解标识了逻辑删除字段。你还想物理删除,就得自定义sql了。但一般除了备份转移的场景下,好像没什么场景是逻辑删后还要物理删的。
你试试,最新版MP的忽略方式,使用@InterceptorIgnore注解,在Mapper上,然后设置tenantLine=true,看看好不好使,是不是这个Mapper中的所有方法,都不增加租户信息。
我猜,应该是p6这个更强大,例如可以配置控制台输出,文件输出,输出格式等等,所以mp就提供了整合p6的方式,实现执行sql打印,不再维护自己的那个了。
没有移除,只是高版本中,逻辑删除插件不需要我们自己配置了。