SpringBoot整合MyBatis-Plus实现增删改查,yml配置

你的名字 2021-05-04 18:26 949阅读 0赞

mybatis-plus

    • mp介绍
    • 1.配置mybatis-plus

之前因为需求的关系,用到了elasticsearch,但是操作es的时候用的是jpa,感觉这一类全自动的orm还挺好用,简单的单表操作可以直接调用其方法就可以完成也可以使用自定义sql就像是mybatis的注解注入那种。但是jpa在处理复杂的查询真心不给力,所以现在换一个全自动的orm,叫做mybatis-plus简称mp。

mp介绍

mp是一个mybatis增强工具,只做增强不做改变。也就是说mp只会提供一些好用的单表操作功能,你可以使用mp的功能也可以继续用mybatis写sql,mp旨在成为mybatis最好的搭档。

1.配置mybatis-plus

正如官方所说,mybatis-plus在mybatis的基础上只做增强不做改变,因此其与spring的整合亦非常简单。
首先看看我的项目结构:
在这里插入图片描述
application.yml配置文件

  1. server:
  2. port: 8090
  3. spring:
  4. #------------------------MySql-----------------------------
  5. datasource:
  6. url: jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=utf8
  7. username: root
  8. password: 123456
  9. driver-class-name: com.mysql.jdbc.Driver
  10. type: com.alibaba.druid.pool.DruidDataSource
  11. mybatis-plus:
  12. mapper-locations: classpath:mapper/*/*Mapper.xml type-aliases-package: com.wyu.itblog.article.model global-config: refresh-mapper: true

maven依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>com.alibaba</groupId>
  7. <artifactId>druid-spring-boot-starter</artifactId>
  8. <version>1.1.9</version>
  9. </dependency>
  10. <dependency>
  11. <groupId>mysql</groupId>
  12. <artifactId>mysql-connector-java</artifactId>
  13. <scope>runtime</scope>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.projectlombok</groupId>
  17. <artifactId>lombok</artifactId>
  18. <optional>true</optional>
  19. </dependency>
  20. <dependency>
  21. <groupId>com.baomidou</groupId>
  22. <artifactId>mybatis-plus-boot-starter</artifactId>
  23. <version>3.0.1</version>
  24. </dependency>

数据库表设计

  1. CREATE TABLE `article` (
  2. `article_id` bigint(20) NOT NULL AUTO_INCREMENT,
  3. `title` varchar(128) DEFAULT NULL COMMENT '文章标题',
  4. `content` longtext COMMENT '正文内容',
  5. PRIMARY KEY (`article_id`) USING BTREE
  6. ) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='文章表';

Article.java实体类,注意的是这里需要标识主键

  1. @Data
  2. @TableName("article")
  3. public class Article implements Serializable {
  4. private static final long serialVersionUID = 1L;
  5. //标识主键策略
  6. @TableId
  7. private Long articleId;
  8. private String title;
  9. private String content;
  10. }

ArticleDao接口,继承BaseMapper接口即可,另外也可以在这里自定义mybatis接口,所以说mp的扩展性其实比jpa强

  1. @Mapper
  2. public interface ArticleDao extends BaseMapper<Article> {
  3. }

我们可以点进去看看BaseMapper里面到底封装了什么方法,有什么可以是给我们调用的

  1. public interface BaseMapper<T> {
  2. int insert(T entity);
  3. int deleteById(Serializable id);
  4. int deleteByMap(@Param("cm") Map<String, Object> columnMap);
  5. int delete(@Param("ew") Wrapper<T> wrapper);
  6. int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
  7. int updateById(@Param("et") T entity);
  8. int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
  9. T selectById(Serializable id);
  10. List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
  11. List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
  12. T selectOne(@Param("ew") Wrapper<T> queryWrapper);
  13. Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
  14. List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
  15. List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
  16. List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
  17. IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);
  18. IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);
  19. }

根据BaseMapper封装的方法,我们在service层中使用一下

  1. @Service
  2. public class ArticleService {
  3. @Autowired
  4. private ArticleDao articleDao;
  5. /** * 1.新增 , insert方法 * @param article * @return */
  6. public boolean save(Article article){
  7. return articleDao.insert(article) > 0;
  8. }
  9. /** * 2.通过QueryWrapper查询数量 */
  10. public Integer selectArticleCount(){
  11. return articleDao.selectCount(new QueryWrapper<Article>().eq("title","测试"));
  12. }
  13. /** * 3.通过selectMaps查询list<Map<String, Object>> */
  14. public List<Map<String, Object>> selectArticleMaps(){
  15. QueryWrapper<Article> queryWrapper = new QueryWrapper<>();
  16. queryWrapper.eq("title", "测试");
  17. List<Map<String, Object>> list = articleDao.selectMaps(queryWrapper);
  18. return list;
  19. }
  20. /** * 4.通过QueryWrapper查询list<Object> */
  21. public List<Object> selectObjs()
  22. {
  23. List<Object> list = articleDao.selectObjs(new QueryWrapper<Article>().eq("title", "测试"));
  24. return list;
  25. }
  26. /** * 5.分页查询,笔者个人还是比较喜欢使用pagehelper来分页,毕竟比较简单 */
  27. public IPage<Article> selectPage()
  28. {
  29. QueryWrapper queryWrapper = new QueryWrapper<Article>().eq("title", "测试");
  30. int count = articleDao.selectCount(queryWrapper);
  31. IPage<Article> page = new Page(1,2,count);
  32. IPage<Article> list = articleDao.selectPage(page, queryWrapper);
  33. System.out.println("返回数据:"+ list.getRecords());
  34. System.out.println("总条数:"+list.getTotal() + "当前页码:"+list.getCurrent()+ "总页码:"+list.getPages() + "每页显示条数:"+list.getSize());
  35. System.out.println("返回的数据:"+page.getRecords());
  36. return list;
  37. }
  38. /** * 6,删除,根据articleId来删除 */
  39. public boolean delete(Long articleId)
  40. {
  41. return articleDao.deleteById(articleId) > 0;
  42. }
  43. /** * 7,删除,根据QueryWrapper删除 */
  44. public boolean deleteByQueryWrapper()
  45. {
  46. return articleDao.delete(new QueryWrapper<Article>().eq("title", "测试")) > 0;
  47. }
  48. /** * 8, 批量删除,把多个id存放到list中,再批量删除,其实很少会用到 */
  49. public boolean deleteBatchIds(List<Long> articleIdList)
  50. {
  51. return articleDao.deleteBatchIds(articleIdList) > 0;
  52. }
  53. /** * 9,修改 封装方法中做了非空校验,如果该字段为null,则不进行更新 */
  54. public boolean updateById(Article article) {
  55. return articleDao.updateById(article) > 0;
  56. }
  57. }

最后在controller中调用,其实也就是传入参数直接使用既可,我们可以通过postman来测试,找一个简单的测试一下就好了

  1. @RestController
  2. public class ArticleController {
  3. @Autowired
  4. private ArticleService articleService;
  5. @RequestMapping("/selectArticleCount")
  6. public Integer selectArticleCount(){
  7. return articleService.selectArticleCount();
  8. }
  9. @RequestMapping("/selectPage")
  10. public String selectPage(){
  11. return articleService.selectPage().toString();
  12. }
  13. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,949人围观)

还没有评论,来说两句吧...

相关阅读