MyBatisPlus简介 MyBatis的插件MyBatisPlus,又叫苞米豆(baomidou),简称MP,官方说,它是为了猿类崛起而生,为了提高生产率而生,为了简化开发而生,不管它为了什么而生吧,反正是它出生了。 MyBatisPlus对MyBatis只做增强不做改变,所以引入它不会对现有工程产生影响,只需要做简单的配置,就可以快速进行单表的CRUD操作,从而节省时间,提高效率。 MyBatisPlus插件有很丰富的功能,比如:单表CRUD操作、代码生成、自动分页、逻辑删除等。MyBatisPlus使用 下面我们来简单介绍一下MyBatisPlus的使用 1、pom。xml 去掉MyBatis的核心依赖(org。mybatis。spring。boot。mybatisspringbootstarter),增加MyBatisPlus的依赖:!MyBatisPlus依赖dependencygroupIdcom。baomidougroupIdmybatisplusbootstarterartifactIdversion3。5。1versiondependency 2、配置application。yml、po、dao和Application application。yml中配置数据库连接:spring:datasource:url:jdbc:mysql:localhost:3306blogusername:rootpassword:123456type:com。alibaba。druid。pool。DruidDataSourcedruid:initialSize:5minIdle:5maxActive:20maxWait:2000validationQuery:selectxtestOnBorrow:falsetestOnReturn:falsetestWhileIdle:true blog数据库中article表的实体类ArticlePo:TableName(valuearticle)publicclassArticlePo{TableId(typeIdType。AUTO)privateIprivateStringarticleId;privateSget、set。。。} 注解说明: TableName:表名注解,标识实体类对应的表 TableId注解:主键注解,当typeIdType。AUTO时,表示这个主键是自增主键 blog数据库中article表的dao,ArticleDao:RepositorypublicinterfaceArticleDaoextendsBaseMapper{} BaseMapper接口:利用Mybatis接口编程的实现机制,默认提供了一系列的增删改查的基础方法。 在Article11Application中配置MapperScan注解:SpringBootApplicationMapperScan(basePackagescom。tn222。springboot。article11。dao)publicclassArticle11Application{publicstaticvoidmain(String〔〕args){SpringApplication。run(Article11Application。class,args);}} 3、增加数据 insert:增加数据,insert返回值int代表insert了多少条记录 示例:在ArticleController中编写增加数据的接口:ResourceprivateArticleDaoarticleDPostMapping(insert)publicintinsert(){StringarticleIdUUID。randomUUID()。toString()。replace(,);ArticlePoarticlePonewArticlePo();articlePo。setArticleId(articleId);articlePo。setTitle(MybatisPlustest);intnumarticleDao。insert(articlePo);} 说明: 1)一般业务逻辑处理在service层,这里为了方便,直接在controller中演示了 2)Resource注解:注入ArticleDao,后续的方法中不再重复注入 4、删除数据 delete:物理删除数据,返回删除了多少条数据 示例,删除title为MybatisPlustest的数据:PostMapping(delete)publicintdelete(){intnumarticleDao。delete(Wrappers。lambdaQuery()。eq(ArticlePo::getTitle,MybatisPlustest));} 说明: 1)物理删除后,恢复数据很困难,所以一般情况下,业务处理采用逻辑删除的方式 5、更新数据 update:更新数据 示例,修改title为MybatisPlustest的数据的title为MybatisPlusupdate:PostMapping(update)publicintupdate(){ArticlePoarticlePonewArticlePo();articlePo。setTitle(MybatisPlusupdate);intnumarticleDao。update(articlePo,Wrappers。lambdaUpdate()。eq(ArticlePo::getTitle,MybatisPlustest));} updateById:根据主键id更新数据 示例,修改id为7的数据的title为MybatisPlusupdateById:PostMapping(updateById)publicintupdateById(){ArticlePoarticlePonewArticlePo();articlePo。setId(7);articlePo。setTitle(MybatisPlusupdateById);intnumarticleDao。updateById(articlePo);} 注意: 1、updateById方法:若传入实体Model,则会根据主键把其他字段全部更新一遍 问题:使用baomidou拿出某条数据的数据实体后,有其他人把数据库中这条数据的某个字段更新了,再用baomidou的updateById方法更新时,会把此字段再更新回来 解决: 方法1:使用sql语句,只更新需要更新的字段 方法2:新建实体Model,Model中只放主键和需要更新的字段 6、查询数据 selectOne:查询单条数据 示例,查询id为7的数据:GetMapping(selectOne)publicObjectselectOne(){ArticlePoarticlePoarticleDao。selectOne(Wrappers。lambdaQuery()。eq(ArticlePo::getId,7));returnarticlePo;} 注意: 1、selectOne方法 1)结果没有数据时,返回null 2)结果有一条数据时,返回此数据 3)结果有两条或两条以上数据时,报错 解决办法:在最后增加。last(limit1)语句 selectList:查询多条数据 示例:查询title为MybatisPlusupdate的数据GetMapping(selectList)publicObjectselectList(){ListarticlePoListarticleDao。selectList(Wrappers。lambdaQuery()。eq(ArticlePo::getTitle,MybatisPlusupdate));returnarticlePoL} 7、打印sql日志 打印执行的sql,在application。yml中配置,一般配置在开发环境mybatisplus:configuration:logimpl:org。apache。ibatis。logging。stdout。StdOutImpl MyBatisPlus的其他注意事项 1、如果数据库表字段中有desc、describe等mysql关键词或预留关键词,使用selectListselectOne会报错,需要单独写sql查询语句 2、有时我们需要在Dao中单独写方法来写sql语句,这时方法的命名跟baomidou自带的命名不要一样,否则即使参数不同,也会有问题:Dao中单独写的方法,会把baomidou的方法覆盖,就调用不到baomidou的方法了 本文示例代码,详见 https:gitee。comtunan222springbootdemo 若您觉得还可以,请帮忙点个赞,谢谢