mybatis plus 是中国程序员对 mybatis 的做的改变,往 hibernate 的方向靠拢了一下,宗旨是只做增强,不做改变,确实蛮好用的,下面介绍使用方法

1、导入依赖

<!--mybatis plus的依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatisplus.version}</version><exclusions><exclusion><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId></exclusion></exclusions></dependency>

2、application.yml 配置,大家按照自己的环境配置,不配置也可以,有默认配置的

# 容器服务
server:port: 8002servlet:context-path: /xiongdi-api# spring 配置
spring:profiles:active: dev # 使用 application-dev.yml配置servlet:multipart: # 文件上传和下载enabled: truemax-file-size: 100MBmax-request-size: 100MB# 自定义配置
xiongdi:redis:open: false # 是否开启缓存 true 开启 false 关闭# mybatis plus的配置
mybatis-plus:# mybatis 的原生配置configuration:cache-enabled: false # 是否开启缓存map-underscore-to-camel-case: true # 是否开启自动驼峰命名规则(camel case)映射call-setters-on-nulls: true # MyBatis 在使用 resultMap 来映射查询结果中的列,如果查询结果中包含空值的列jdbc-type-for-null: 'null' # 如果type为空# MyBatis-Plus 全局策略配置global-config:# MyBatis-Plus 全局策略中的 DB 策略配置db-config:id-type: auto # 全局默认主键类型,AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";field-strategy: not_null # 字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"logic-delete-value: -1 # 逻辑已删除值,(逻辑删除下有)logic-not-delete-value: 0 # 逻辑未删除值,(逻辑删除下有效)banner: false # 是否显示mybatis-plus的图标

3、定义 Mapper 接口 继承 BaseMapper,继承该接口后无需编写 mapper.xml 文件,即可获得CRUD功能,泛型 T 代表实体,也就是我们从数据库查出来的数据用哪个类封装

package io.xiongdi.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import io.xiongdi.entity.TokenEntity;
import org.apache.ibatis.annotations.Mapper;/*** TokenEntity 的操作DAO层【继承Base Mapper就具有了对TokenEntity的基本操作方法】* @author wujiaxing* @date 2019-06-30*/
@Mapper
public interface TokenDao extends BaseMapper<TokenEntity> {
}

4、如果有需要自行编写的方法,也可以继续定义 mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.xiongdi.dao.TokenDao"></mapper>

5、编写 Service 接口,继承 IService,这个接口定义了很多默认抽象方法,如果方法没有自己想要的,可以自定义,泛型 T 也是实体

package io.xiongdi.service;import com.baomidou.mybatisplus.extension.service.IService;
import io.xiongdi.entity.TokenEntity;/*** token* @author wujiaxing* @date 2019-06-30*/
public interface TokenService extends IService<TokenEntity> {/*** <p>*     根据请求token查询token信息* </p>* @param token* @return*/TokenEntity queryByToken(String token);/***  创建token* @param userId 用户ID* @return 返回token信息*/TokenEntity createToken(long userId);/*** 设置token过期* @param userId 用户ID*/void expireToken(long userId);
}

6、编写 service 的实现类,除了实现我们定义的接口,还要继承 ServiceImpl 类,该类泛型 M 表示你要告诉 mybatis plus 你的 Mapper 接口是哪个,一定要继承 BaseMapper 接口,泛型 T 是实体

package io.xiongdi.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.xiongdi.dao.TokenDao;
import io.xiongdi.entity.TokenEntity;
import io.xiongdi.service.TokenService;
import org.springframework.stereotype.Service;import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.UUID;/*** @author wujiaxing* @date 2019-07-08*/
@Service("tokenService")
public class TokenServiceImpl extends ServiceImpl<TokenDao, TokenEntity> implements TokenService {/*** 12 小时过期 单位:毫秒*/private final static int EXPIRE = 3600 * 12 * 1000;/***  根据请求头的token查询数据库对应的token信息* @param token* @return*/@Overridepublic TokenEntity queryByToken(String token) {return this.getOne(new QueryWrapper<TokenEntity>().eq("token", token));}@Overridepublic TokenEntity createToken(long userId) {// 得到当前时间LocalDateTime now = LocalDateTime.now();// 根据过期时间加上当前时间,得到token的有效期long indate = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli() + EXPIRE;LocalDateTime tokenExpireDateTime = LocalDateTime.ofInstant(new Date(indate).toInstant(), ZoneId.systemDefault());// 生成tokenString token = generateToken();// 创建实体对象TokenEntity tokenEntity = TokenEntity.builder().expireTime(tokenExpireDateTime).userId(userId).token(token).updateTime(now).build();// 放入数据库保存this.saveOrUpdate(tokenEntity);return tokenEntity;}/***  生成token* @return*/private String generateToken() {return UUID.randomUUID().toString().replace("-", "");}@Overridepublic void expireToken(long userId) {// 获取当前时间LocalDateTime now = LocalDateTime.now();TokenEntity tokenEntity = TokenEntity.builder().userId(userId).expireTime(now).updateTime(now).build();this.saveOrUpdate(tokenEntity);}
}

QueryWrapper 类定义了很多条件方法,例如:like、lt、gt、eq 等等

转载于:https://www.cnblogs.com/wujiaxing/p/11182478.html

mybatis plus 入门相关推荐

  1. c++框架有哪些_Java Mybatis框架入门教程_v20200726

    MyBatis 的前身是 Apache 的开源项目 iBatis.MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的基于 Java 的优秀持久层框架.MyBat ...

  2. MyBatis学习总结(1)——MyBatis快速入门

    2019独角兽企业重金招聘Python工程师标准>>> 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所 ...

  3. MyBatis基础入门《九》ResultMap自动匹配

    MyBatis基础入门<九>ResultMap自动匹配 描述: Mybatis执行select查询后,使用ResultMap接收查询的数据结果. 实体类:TblClient.java 接口 ...

  4. mybatis的入门

    mybatis的环境搭建 第一步:创建maven工程并导入坐标         第二步:创建实体类和dao的接口         第三步:创建Mybatis的主配置文件                 ...

  5. Mybatis最入门---代码自动生成(generatorConfig.xml配置)

    [一步是咫尺,一步即天涯] 经过前文的叙述,各位看官是不是已经被Mybatis的强大功能给折服了呢?本文我们将介绍一个能够极大提升我们开发效率的插件:即代码自动生成.这里的代码自动生成包括,与数据库一 ...

  6. mybatis select count(*) 一直返回0 mysql_Mybatis教程1:MyBatis快速入门

    点击上方"Java技术前线",选择"置顶或者星标" 与你一起成长 一.Mybatis介绍 MyBatis是一个支持普通*SQL*查询,存储过程和高级映射的优秀持 ...

  7. MyBatis学习笔记(一)——MyBatis快速入门

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4261895.html 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优 ...

  8. Mybatis从入门到精通下篇

    Mybatis从入门到精通下篇: 输入类型: 输出类型: ResultMap: 动态sql: if标签: where标签: sql片段: foreach标签: 关联查询: 以订单作为主体: 一对一查询 ...

  9. Java基础-SSM之mybatis快速入门篇

    Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...

  10. Mybatis的入门到精通这一篇文章就够了

    Mybatis的产生 idea 的配置 idea当中配置好maven工具 1Idea当中配置自动编译 Mybatis是什么? Mybatis的执行原理图 Mybatis的入门Demo 对象的详解 Re ...

最新文章

  1. 编写优质代码的 6 大关键方法
  2. 用神经网络构造一个基于分类的多体系统
  3. 数据挖掘十大算法--K-均值聚类算法
  4. matlab 小波变换_matlab小波工具箱实例(二):时频分析和连续小波变换
  5. Harmonious Graph CodeForces - 1253D(思维+并查集)
  6. POI导入导出Excel(HSSF格式,User Model方式)
  7. 让 API 端点的响应速度提高 50 倍!
  8. dojo的TabContainer竖排摆放tab标签
  9. spark to mysql date_[Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子:
  10. C#Winform使用火狐firefox内核GeckoWebBrowser
  11. Fortran 中的common,include和module
  12. 再见SNDA,在离职之后
  13. CAD-CASS免费增强测绘工具CASS++
  14. Centos使用chrony做时间同步
  15. 京东秋招java面试_最新秋招,京东技术中台Java开发面经,有想去面试的可以来看下...
  16. 在 Windows10 系统下重新安装 Ubuntu22.04 系统
  17. 做新时代的忠诚爱国者写一篇议论文800字
  18. 国产鸿蒙2.0尝鲜试用
  19. STM32F103的AD采样非线性问题
  20. 数学柏拉图多面体---定积分(一)

热门文章

  1. python qt5 数据改变 触发信号_pyqt5自定义信号实例解析
  2. 144Hz和60Hz显示器差别很大吗?
  3. 家用车多少马力才够用?
  4. 最近在学习文案,一边看文案书,一边勾画笔记,一边练习
  5. 一个人开始变富时,会有这4个征兆,坚持下去,路越走越宽
  6. 如何看待0.5元可买到身份匹配的人脸数据?
  7. SpringBoot学习总结(个人笔记)
  8. IDEA的创建javaWeb工程以及修改默认的class文件输出
  9. IPV6 Socket编程
  10. 思科模拟器划分子网实验报告_模拟多子网群集以设置SQL Server Always On可用性组–实验设置