Mybatisplus 相关操作之 IService BaseMapper ServiceImpl 简单应用_至今為止 從今以后的博客-程序员秘密_mybatis plus serviceimpl

技术标签: spring  spring boot  java  mybatis  

本篇主要介绍mybatisplus的简单应用

这里对mybatisplus中配置遇到的问题及extent、implement所导入的包也为大家方便引入依赖

1 引入相关依赖

依赖只是参考,每人的仓库不同,代码块内容仅作参考

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.20</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatisplus-spring-boot-starter</artifactId>
            <version>1.0.5</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-core</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.2.0</version>
        </dependency>
    </dependencies>

2 yml文件配置

部分小伙伴 mysql-connector-java 版本过高,需要将 driver-class-name换成:com.mysql.cj.jdbc.Driver

server:
  port: 9999

# 配置数据源
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/goods?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=true
    username: root
    password: 123456

3 相关的数据库表数据

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for tb_area
-- ----------------------------
DROP TABLE IF EXISTS `tb_area`;
CREATE TABLE `tb_area`  (
  `area_id` int(2) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `area_name` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '区域名称',
  `priority` int(2) NOT NULL DEFAULT 0 COMMENT '优先级',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间',
  PRIMARY KEY (`area_id`) USING BTREE,
  UNIQUE INDEX `UK_AREA`(`area_name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;

代码环节

1 目录结构

2 dao数据

import java.io.Serializable;
import java.util.Date;

import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class BaseEntity<T extends Model> extends Model {

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;

    @Override
    protected Serializable pkVal() {
        return super.pkVal();
    }

}
import java.io.Serializable;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_area")
public class Book extends BaseEntity<Book> implements Serializable {

    @TableId(value = "area_id", type = IdType.AUTO)
    private Integer areaId;

    private String areaName;

    private int priority;

}

3 service层

需要注意的是import的对象是什么(吃过这里的亏)

import com.alnex.myOwn.dao.Book;
import com.baomidou.mybatisplus.extension.service.IService;

public interface IBookService extends IService<Book> {
}
import org.springframework.stereotype.Service;

import com.alnex.myOwn.dao.Book;
import com.alnex.myOwn.mapper.BookMapper;
import com.alnex.myOwn.service.IBookService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

@Service
public class BookServerImpl extends ServiceImpl<BookMapper, Book> implements IBookService{
}

4 map包下

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface SuperMapper<T> extends BaseMapper<T> {
}
import java.util.List;

import org.apache.ibatis.annotations.Select;

import com.alnex.myOwn.dao.Book;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface BookMapper extends BaseMapper<Book> {

    @Select("SELECT * FROM `tb_area`")
    List<Book> selectList();
}

5 controller包下

import javax.annotation.Resource;
import java.util.List;
import org.springframework.web.bind.annotation.*;

import com.alnex.myOwn.dao.Book;
import com.alnex.myOwn.service.IBookService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@RestController
@RequestMapping("/book")
public class IndexController {

    @Resource
    private IBookService bookServer;

    @GetMapping("/list/{pageNum}/{pageSize}")
    public Object index(@PathVariable("pageNum") int pageNum,@PathVariable("pageSize") int pageSize){

        System.out.println("pageNum = " + pageNum);
        System.out.println("pageSize = " + pageSize);

        log.info("----- baseMapper 自带分页 ------");
        Page<Book> pg = new Page<>(pageNum, pageSize);

        IPage<Book> bookIPage = bookServer.page(pg);
        log.info("总条数 ------> [{}]" , bookIPage.getTotal());
        log.info("当前页数 ------> [{}]" , bookIPage.getCurrent());
        log.info("当前每页显示数 ------> [{}]" , bookIPage.getSize());
        log.info("当前页数据 ------> [{}]" , bookIPage.getRecords());

        print(bookIPage.getRecords());

        log.info("----- Book 列表数据展示 ------");
        List<Book> list = bookServer.list();
        log.info("list 数据 ------> {[]} " + list);

        return bookIPage;
    }

    private <T> void print(List<Book> list) {
        if (!CollectionUtils.isEmpty(list)) {
            for (Book t : list) {
                log.info("Book 数据为 ----> [{}]",t);
                log.info("[{}]",t.getCreateTime());
                log.info("[{}]",t.getUpdateTime());
            }
        }
    }

    @GetMapping("/getOne/{areaId}")
    public Object getOne(@PathVariable("areaId") int areaId){

        System.out.println(areaId);

        //方法一
        Book other = bookServer.getById(areaId);
        log.info("book 数据为 ------> [{}]" , other);
        System.out.println();

        //方法二
        QueryWrapper<Book> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("area_id",areaId);

        Book book = bookServer.getOne(queryWrapper);
        log.info("book1 数据为 ------> [{}]" , book);

        return book;
    }

    @PutMapping("/save")
    public Object save(@RequestBody Book book){
        return bookServer.save(book);
    }

    @DeleteMapping("/del/{areaId}")
    public Object del(@PathVariable("areaId") int areaId){

        boolean b;

        //方式一
        // b = bookServer.removeById(areaId);

        //方式二
        QueryWrapper<Book> queryWrapper  =new QueryWrapper<>();
        queryWrapper.eq("area_id",areaId);

        b = bookServer.remove(queryWrapper);

        return b;
    }

    @PutMapping("/update")
    public Object update(@RequestBody Book book){
        return bookServer.updateById(book);
    }

    //批量新增或者修改方法,判断ID是否存在,如果ID不存在执行新增,如果ID存在先执行查询语句,查询结果为空新增,否则修改。
    @PutMapping("/addMore")
    public Object addList(@RequestBody List<Book> list){
        return bookServer.saveOrUpdateBatch(list);
    }
}

6 config包下【重要】

在之前配置config 时只配置mybatisplus 的分页插件,发现在启动时一直报   Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required 的错误

附查询的相关资料:https://www.cnblogs.com/hawk0035/p/3337283.html?utm_source=tuicool

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.MybatisXMLLanguageDriver;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.incrementer.DB2KeyGenerator;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;


@Configuration
@MapperScan("com.alnex.myOwn.mapper")
public class MybatisPlusConfig {


    /**
     * mybatis-plus分页插件<br>
     * 文档:http://mp.baomidou.com<br>
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource, GlobalConfig globalConfig) throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
        configuration.setJdbcTypeForNull(JdbcType.NULL);
        configuration.setMapUnderscoreToCamelCase(true);
        sqlSessionFactory.setConfiguration(configuration);
        PaginationInterceptor pagination = new PaginationInterceptor();
        sqlSessionFactory.setPlugins(pagination);
        sqlSessionFactory.setGlobalConfig(globalConfig);
        return sqlSessionFactory.getObject();
    }

    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig config = new GlobalConfig();
        GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();
        dbConfig.setKeyGenerator(new DB2KeyGenerator());
        config.setDbConfig(dbConfig);
        return config;
    }
}

以上就是mybatisplus的相关总结,如有问题,欢迎留言讨论~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lidxx/article/details/106055899

智能推荐

思科 交换机 全局、telnet、consol 密码配置_Bobo_ 8888的博客-程序员秘密

全局密码(enable)配置enable password 密码再次进入secret 特权密码(是经过加密的密码)要注意的是secret 不能和password 密码一样否则就失去了加密的意义,还有就是2个密码都配置了的话要登入时系统默认secret 密码生效。另外注意的是配了enable secret 就看不到enable password了,相当于覆盖了enable password 密码,官方考试题中就曾经考察过这一点,-般建议直接配enable secrettelnet(远程登陆)

04高级自绘-11横向时间线-timeline_feiyangqingyun的博客-程序员秘密_横向timeline

一、运行效果二、功能特点可设置当前缩放比例。可设置线条高度。可设置线条颜色。可设置背景颜色。缩放级别支持 时、分、秒、毫秒。支持鼠标滚轮缩放。三、公共接口public: //缩放级别 int getScaled() const; int getScaledWidth() const; void setScaled(int scaled); //线条高度 int getLineHeight() const; void setLi

MTD系列 - linux中yaffs2文件系统挂载_jiav_net的博客-程序员秘密

/*题记:上一篇文章《android平台上linux启动时init进程解析init.rc文件分析.txt》中跟踪了nand分区上的yaffs2文件系统在系统初始化时最上层的表现,调用到libc库函数mount()为止。对于我关心的几个分区可以将其罗列一下:mount(“/dev/block/mtdblock4”, “/system”, “yaffs2”, 0 , NULL);mou...

【最新合集】编译原理习题(含答案)_4-7语法分析_MOOC慕课 哈工大陈鄞_来老铁干了这碗代码的博客-程序员秘密

1 如果文法G是无二义的,则它的任何句子α( )。A. 最左推导和最右推导对应的语法树必定相同B. 最左推导和最右推导对应的语法树可能不同C. 最左推导和最右推导必定相同D. 可能存在两个不同的最左推导,但它们对应的语法树相同  2 采用自上而下分析,不必( )。A. 消除回溯B. 消除左递归C. 消除右递归D. 提取公共左因子  3 识别上下文无关语言的自动机是( )。A. 下推自动机B. NFAC. DFAD. 图灵机  4 ( )文法不是LL(1)的。A

实现国标GB28181流媒体直播服务解决方案_jinlong0603的博客-程序员秘密_gb直播

背景28181协议全称为GB/T28181《安全防范视频监控联网系统信息传输、交换、控制技术要求》,是由公安部科技信息化局提出,由全国安全防范报警系统标准化技术委员会(SAC/TC100)归口,公安部一所等多家单位共同起草的一部国家标准(以下简称28181)。28181协议在全国平安城市、交通、道路等监控中广泛采用,若想做统一的大监控平台,则支持28181协议接入是必不可少的。如今很多客户都是...

OpenCV-Python系列·第二十五集:Harris角点检测_Seung-Yim Yau的博客-程序员秘密

Tip:Harris角点检测# -*- coding: utf-8 -*-&quot;&quot;&quot;Created on Sat Sep 22 21:18:41 [email protected]: Administrator&quot;&quot;&quot;import cv2import numpy as npimg = cv2.imread(&quot;pisa.jpg&quot;)cv2.imshow(&quot;original image&quot;,i...

随便推点

BAPC 2018 F Financial Planning_囿于昼夜one的博客-程序员秘密

**BAPC 2018 F Financial Planning(二分+贪心)**DescriptionBeing a responsible young adult, you have decided to start planning for retirement. Doing some back-of-the-envelope calculations, you figured ou...

vb底层开发之Hook(钩子)_幻影时空的博客-程序员秘密

原帖地址:http://hi.baidu.com/starwork/blog/item/6d989ed3b2cb2c35960a1638.htmlhook是WINDOWS提供的一种消息处理机制,它使得程序员可以使用子过程来监视系统消息,并在消息到达目标过程前得到处理。 下面将介绍WINNDOWS HOOKS并且说明如何在WINDOWS 程序中使用它。 关于HOOKS 使用HOOK 将会降低

分布式id黑科技完善_四名狂客的博客-程序员秘密

    分布式环境下唯一id确实算个问题,今天分享的算法自己项目已经跑了两年,效率高也没出现重复情况;直接上干货:核心两个类:package com.longbei.appservice.common;import java.sql.Timestamp;import java.util.concurrent.Executors;import java.util.concurrent.Sch...

TCP自时钟/拥塞控制/带宽利用之脉络半景解析_dog250的博客-程序员秘密

0.说明搬家公司的人很多都穿皮鞋!Why?这个题目不是很明确,而且这个文章比较长,也算是我的一个阶段性总结,既然是总结,就不必为题目而纠结了。在端午假期的最后来做这个总结也实属不易(假期前两天加班,没有完成预期的计划,低落),记得很早以前写那篇《TCP协议疑难杂症全景解析》的时候跟现在一个心情。翻翻以前的记录,写那个的时候是2011年的7月初,小小才刚刚半个月,如今小小已经马上5岁了,时间过得真快

Python库Matplotlib绘图教程_周雄伟的博客-程序员秘密

第一部分:基本参数导入绘图包import matplotlib.pyplot as pltimport numpy as np12使用from pylab import *一次导入matplotlib.pyplot和numpy也可以,但是不推荐,推荐像上面一样分别导入,以防导入中出现错误而难以检查。生成模拟数据点X = np.linspace(-np.pi, np.pi, 256,endpoin...

axios代理跨域 cli4_使用vue-cli+axios配置代理进行跨域访问数据_weixin_39946300的博客-程序员秘密

1、首先在本地全局安装 vue-cli先在控制台安装 全局vue-clisnpm install -g vue-cli2、初始化项目(vuecli 项目名称)vue init webpack vuecli //vuecli是项目名也可以在空项目中输入vue init webpack将项目变为 vue-cli项目3、在vuecli 项目中安装依赖文件npm install4、在vuecli 项目中...

推荐文章

热门文章

相关标签