- 范围查询:
- lt:小于
- gt:大于
- eq:等于
- le:less equal 小于等于
- ge:greater equal 大于等于
- between:在之间:前小后大
- 模糊匹配:
- like:.like(userDao::getName,"j")包含j的:%j%
- likeLeft:%j
- likeRight:j%
- 对查询的限制:
- 在MyBatisPlus中,默认情况下是会根据所继承的BaseMapper<a>这个所对应的类的名称来查找表,那么就会出现一个问题,那就是当表名与类名不一致的时候,该怎么办,所以就有了@TableName("指定的表名")
- 同样的当列名不一样时,也会出问题,所以便有了@TableFiled(value="指定的列名")
- 当不想让某一列的数据被联同查询时(例如password列)可以使用@TableFiled(select = false)来禁止查询
- 在默认情况下,系统会去表中寻找与类中属性相关的所有名字相同的列名,若此时你只是想要设置一个属性,并且他并非表中的列,就可以使用@TableFiled(exist = false)来让系统无需寻找这个列
- Id生成策略:
- 在数据库中Id生成可以使用Id生成策略来配置
- IdType.AUTO:使用SQL默认的id设置策略
- IdType.ASSIGN_ID:使用雪花算法设置生成id策略
- idType.INPUT:手动设置id,即代码手动添加:user.setId(….)
- 多个查询与多个删除:
- userDao.deleteBatchIds(List)
- userDao.selectBatchIds(List)
- 逻辑删除:
- 首先是逻辑删除的定义:
- 举例:当一个公司的职员离开后,需要将其资料从数据库中删掉,但是直接删掉的话,与其相关的业务的数据也会被删除,而当公司需要做年度报表的时候统计数据原本是需要加上这位离职的人的交易金额的,但是前边把他的数据删除后,导致这边的金额的数据表的相关数据也被删除,这就会导致数据丢失。
- 首先是逻辑删除的定义:
- 我们想要的应该是这样
- 于是我们想了一个办法,那就是再加上一个列,来表示其是否离职,不是真正意义上的把他删除,只是逻辑上的删除,这就避免了上面的错误
- 那么要怎么通过api实现呢:
- 只需要将deleted列加入user类中,并添加注释
- value代表未删除的值,delval代表删除的值
- 也可以使用直接配置:在配置文件中直接写全局
- 只需要将deleted列加入user类中,并添加注释
- 乐观锁:
- 用来解决对秒杀问题之类的问题:
- 具体实现步骤:
- 在表中加入新的列:version
- 在user类中加入属性version,并加上@Version注释
- 添加拦截器:
- 测试成果:设置两个更改名字的操作,如果限制成功,那么应该会只执行第一个更新操作
- 结果是:
- 在表中加入新的列:version
- 分析原理:
- 此时我们设置的拦截器类似于上面的拦截器操作一样,是自动给sql语句加上了一些查询条件和操作
这是第一份更新的sql语句:他自动加上了set version = 2 ,就是说在加上拦截器后,sql语句会在查询条件后加上一个version查询条件,这个version的值传的就是你传入的·user里的version值=1,同时将version值更新加一此时set部分的version值就是2,如图中一样,然后就是执行成功
这是第二份更新操作的sql语句:与上面一样,他也是这么个原理,此时他的查询条件里的version也是1,但是此时相应的数据行里的version已经更改为了2,以至于那次是找不到这么一条数据,于是就会更新失败
所以最后结果才是zz而不是yy
- 代码生成器:通过指定一些数据来让程序自动生成代码(了解即可,前期不建议使用,以后公司制作项目可以考虑是否使用)