一、基本使用

(一)基本使用流程

springboot集成mybatis-plus
引入依赖

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>

创建一个表来做示例

create table if not exists `app_project`(`id` BIGINT(20) not null AUTO_INCREMENT comment 'id',`name` varchar(100) default null comment '项目名称',`detail` text default null comment '项目详情',`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`create_user_id` BIGINT(20) DEFAULT NULL COMMENT '创建用户',`platform_id` BIGINT(20) DEFAULT NULL COMMENT '平台ID',`update_user_id` BIGINT(20) DEFAULT NULL,`is_deleted` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '0:未删除,1:已删除',PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='项目表';

数据库连接

spring:datasource:username: usernamepassword: passwordtype: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://${ip}:${port}/database?useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8druid:initial-size: 1max-active: 30max-wait: 60filter: statremove-abandoned-timeout: 1000time-between-eviction-runs-millis: 30000driver-class-name: com.mysql.jdbc.Driver

编写entity实体类

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;import java.io.Serializable;
import java.util.Date;/*** @program: xxx* @description:* @author: 谢小鱼 xxx@qq.com* @create: 2021-10-19 11:34**//*** lombok的注解,如果找不到就需要安装一下lombok的plugs*/
@Data
/*** 支持链式编程*/
@Accessors(chain = true)
@TableName("app_project")
public class AppProjectEntity extends Model<AppProjectEntity> implements Serializable {@TableIdprivate Long id;private String name;private String detail;//JsonFormat来源于jackson
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")//JSONField来源于fastjson@JSONField(format = "yyyy-MM-dd HH:mm:ss")private Date createTime;@JSONField(format = "yyyy-MM-dd HH:mm:ss")private Date updateTime;private Long createUserId;private Long platformId;private Long updateUserId;@TableLogicprivate Integer isDeleted;
}

编写Dao数据关系层

import cn.sinvie.oauthserver.Entity.license.AppProjectEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;@Mapper
public interface AppProjectDao extends BaseMapper<AppProjectEntity> {......
}

服务层、业务逻辑层

import cn.sinvie.oauthserver.Entity.license.AppProjectEntity;
import com.baomidou.mybatisplus.extension.service.IService;public interface AppProjectService extends IService<AppProjectEntity> {......
}
import cn.sinvie.oauthserver.Entity.license.AppProjectEntity;
import cn.sinvie.oauthserver.dao.AppProjectDao;
import cn.sinvie.oauthserver.service.AppProjectService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;/*** @program: xxx* @description:* @author: 谢小鱼 xxx@qq.com* @create: 2021-10-19 11:42**/
@Service("AppProjectService")
public class AppProjectServiceImpl extends ServiceImpl<AppProjectDao, AppProjectEntity> implements AppProjectService {......
}

Controller控制器层

import cn.sinvie.oauthserver.service.AppProjectService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @program: xxx* @description: project相关接口* @author: 谢小鱼 xxx@qq.com* @create: 2021-10-19 16:19**/
@Log4j2
@RestController
@RequestMapping("/xxx/xxx")
public class AppProjectController{@Autowiredprivate AppProjectService appProjectService;......
}

(二)时间处理

时间类型有哪些

一、数据库中的日期数据类型
  数据库中的日期数据类型有四种:date、datetime、timestimp、time。date类型只保存年月日,不保存时分秒,datetime和timestimp保 存年月日时分秒,time只保存时分秒。数据库字段值进行比较时,date只比较年月日,datetime和timestimp比较年月日时分秒,time只比较 时分秒。
  datetime、timestimp在数据库中的存储结构不一样,timestimp更节省空间,但对于java对象的存取都是一样的。

二、java中的四种日期类型:java.util.Date、java.sql.date、timestimp、time。
  (1)java.sql.date、timestimp、time都在java.sql包下,都是java.util.date类的子类。java.sql包下的date显示年月日, timestimp显示年月日时分秒,time显示时分秒,java.sql.date显示年月日时分秒。
  (2)这四种日期类型内部保存的都是时间戳。虽然java.sql.date、time值显示年月日或时分秒,但其内部保存的都是完整的时间 戳,因此当把java.sql.date、time转型为java.uitl.Date类型时,还是能显示完整的年月日时分秒。
  (3)直接System.out.println(java.sql.date)显示年月日,System.out.println(java.sql.time)显示时分秒。但是通过
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
    String str = simpleDateFormat.format(objDate)
  无论objDate是四种类型中的任何类型,返回的str字符串都是准确的完整的年月日时分秒。因simpleDateFormat.format()方法的 参数是类型时java.util.Date类型,java.sql.date、timestimp、time会自动转为java.util.Date类型。

三、数据库中的四种日期数据类型通过mybatis逆向工程生成的实体类对应属性的类型都是java.util.Date(不是java.sql.Date)类型。

后端接受前端传值

import java.util.Date;@RequestMapping("/add")
public ResponseJSON add(@RequestParam(value = "date")@DateTimeFormat(pattern = "yyyy-MM-dd") Date date){xxx;
}

后端传值给前端

在实体类的属性上加注解
第一种,在springboot项目中,默认集成的是jackson解析json数据,默认用@JsonFormat。用法为在属性值上 @JsonFormat(pattern=”yyyy-MM-dd”,timezone=”GMT+8”),如果直接使用 @JsonFormat(pattern=”yyyy-MM-dd”)就会出现2018-08-01 08:00:00的情况, 会相差8个小时,因为我们是东八区(北京时间)。所以我们在格式化的时候要指定时区(timezone )

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

第二种,当我们引入了FastJson时,@JsonFormat注解会失效,这时要使用@JSONField注解,这个注解最常用的两个属性是那么和format
name:@JSONField(name=”resType”)主要用于指定前端传到后台时对应的key值,如果bean中没有这个注解,则默认前端传过来的key是field本身,即如果是private String name,name前端对应的key就是name才能对应上。
format @JSONField(format=”yyyy-MM-dd”)主要用于格式化日期,比如前台传过来的时间是2018-07-12 17:44:08,但是通过这个注解,你存到数据库的时间就是2018-07-12 00:00:00。

@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;

(三)mybatis-plus自带的分页查询工具使用

一般我们查询数据的时候都需要后端坐分页,然后返回给前端,mybatis自带的page工具很好的支持了这一功能,如下,在AppProjectServiceImpl类(继承了ServiceImpl<AppProjectDao, AppProjectEntity>)中:

QueryWrapper<AppProjectEntity> wrapper = new QueryWrapper<>();
Page<AppProjectEntity> appProjectEntityPage = baseMapper.selectPage(new Page<AppProjectEntity>(page, size),wrapper);

到这还没结束,需要注入一个分页插件到spring容器中:

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** mybatis-plus配置** @author xxx*/
@Configuration
public class MybatisPlusConfig {/*** 分页插件*/@Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();}}

这样就可以正常使用了。

(四)引入lombok简化bean代码量,支持链式编程

在idea的plugs中安装lombok插件

使用@Data注解自动生成构造函数、toString、Hash等函数

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;@Data
@TableName("app_project")
public class AppProjectEntity extends Model<AppProjectEntity> implements Serializable {@TableIdprivate Long id;private String name;private String detail;
}

使用@Accessors(chain = true)支持链式编程

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;@Data
/*** 支持链式编程*/
@Accessors(chain = true)
@TableName("app_project")
public class AppProjectEntity extends Model<AppProjectEntity> implements Serializable {@TableIdprivate Long id;private String name;private String detail;
}

链式编程构造对象:

AppProjectEntity entity = new AppProjectEntity().setName(name).setDetail(detail).setCreateUserId(userId).setPlatformId(platformId);

二、填坑

1、逻辑删除:当使用@TableLogic注解给实体类标注了逻辑删除字段后,如果想要删除数据的话一定要用baseMapper.deleteById(),而不是根据id查询出来一个实体对象,然后将逻辑删除字段标记为删除(默认11为删除),然后通过updateById()去更新这个字段,因为mabatis将该字段设置为逻辑删除后,update操作会忽略这个字段,默认将它设置为0。


持续更新ing

MyBatis Plus最全面的使用总结相关推荐

  1. mybatis查询报错:com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from string

    mybatis查询报错: com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from strin ...

  2. MyBatis的插入后获得主键的方式

    需求: 使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法: 在mapper中指定keyProperty属性,示例如下: <insert id=" ...

  3. mybatis使用注解开发

    mybatis使用注解开发 面向接口编程 在之前我们是通过面向对象编程,但是在真正开发的时候我们会选择面向接口编程. 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的 ...

  4. mybatis ResultMap

    ResultMap 解决属性名和字段的名称不一致的问题. 查询为null的问题 创建java实体类: public class User {private int id; //idprivate St ...

  5. mybatis配置文件解析

    mybatis配置文件解析 mybatis核心配置文件`mybatis-config.xml文件. mybatis的配置文件包含了会深深影响mybatis行为的设置和属性信息. 能配置的内容: con ...

  6. mybatis CRUD操作

    mybatis CRUD操作 select select标签是mybatis最常用的标签之一. select语句有很多属性可以详细的配置每一天sql语句. id 命名空间唯一的标识. 接口中的方法名与 ...

  7. java mybatis基础

    java mybatis基础 1.1 什么是mybatis? mybatis是一个优秀的持久层框架. 避免几乎所有的JDBC代码和手动设置参数以及获取结果集的过程. 可以使用简单的xml或者注解来配置 ...

  8. mybatis的资源过滤错误及xml文件编码错误

    mybatis 解决maven项目内资源过滤的问题 写的配置文件无法被导出或者生效的问题. 解决方案: <build><resources><resource>&l ...

  9. Mybatis传递多个参数的4种方式

    现在大多项目都是使用Mybatis了,但也有些公司使用Hibernate.使用Mybatis最大的特性就是sql需要自己写,而写sql就需要传递多个参数.面对各种复杂的业务场景,传递参数也是一种学问. ...

  10. SpringBoot (五) :SpringBoot整合mybatis

    说在前面 mybatis刚开始使用的时候比较麻烦,需要各种配置文件.实体类.dao层映射关联.还有一大推其它配置.初期开发了generator可以根据表结果自动生产实体类.配置文件和dao层代码,可以 ...

最新文章

  1. DPM2007轻松恢复Exchange邮件,DPM2007系列之三
  2. python编程小知识_分享Python开发中要注意的十个小贴士
  3. matlab fopen wt,matlab的fopen和fprintf
  4. C++内存管理变革(3):另类内存管理
  5. 检查gzip是否起效
  6. 【解题报告】SRM-08
  7. Linux修改命令行样式
  8. TiDB 在平安核心系统的引入及应用
  9. 固定资产分类(仅供参考 2005年),
  10. 微软高性能缓存AppFabric(二)使用
  11. php程序员自我描述_php程序员自我评价简历范文
  12. python按条件删除行_python – 根据条件删除行组
  13. cjavapy在线正则表达式测试工具
  14. 设置表头QHeaderView
  15. python学习之旅_第1天
  16. 什么是AVIF?如何在你的网站上使用AV1格式图像
  17. [软件工程] 面向对象设计
  18. js实现kmp算法_基于KMP算法JavaScript的实现方法分析
  19. Spring Data JPA REST Query QueryDSL
  20. access查找出生日期年份_access中时间日期查询的一些总结

热门文章

  1. C语言实现--快速排序
  2. Google Earth Engine(区域统计)
  3. 小福利,带你使用scrapy框架爬取苏宁图书海量信息
  4. WORDPRESS WOOCOMMERCE购物网站安装AB跳转支付插件接口的教程
  5. 语音调节 变调不变速
  6. PPM Object中对于Delegated Owner的错误图标指示问题
  7. Ceph安装后 ImportError: No module named rados
  8. Linux下使用nc命令测试TCP、UDP
  9. 2022-2028年全球与中国露营家具行业市场需求预测分析
  10. wincc的画面怎么用博图打开_如何把西门子精智面板画面直接转换成博图WINCC RT ADV画面...