关于mybatis-plus插件使用时的一些问题小结

目录
  • 介绍
  • 优点
  • 我的感受
  • 遇到的问题
    • 返回的list只有数据库字段不含大写的属性
    • setDbColumnUnderline导致的字段不一致
  • 总结

介绍

mybatis-plus是国内大牛在Mybatis3的基础上做了一些封装,简化了一些操作(分页,自动生成实体块等)。是快速开发一个不错的工具插件。

Mybatis 增强工具包 - 只做增强不做改变,简化CRUD操作

优点

纯正血统:完全继承原生 Mybatis 的所有特性
最少依赖:仅仅依赖Mybatis以及Mybatis-Spring
性能损耗小:启动即会自动注入基本CURD ,性能无损耗,直接面向对象操作
自动热加载:Mapper对应的xml可以热加载,大大减少重启Web服务器时间,提升开发效率
自动生成代码:包含自动生成代码类以及Maven插件,通过少量配置,即可快速生成Mybatis对应的xml、mapper、entity、service、serviceimpl层代码,减少开发时间
自定义操作:支持自定义Sql注入,实现个性化操作
自定义转义规则:支持数据库关键词(例如:order、key等)自动转义,支持自定义关键词
多种主键策略:支持多达4种主键策略,可自由配置,若无将会自动填充,更有充满黑科技的分布式全局唯一ID生成器
无缝分页插件:基于Mybatis物理分页,无需关心具体操作,等同于编写基本selectList查询
性能分析:自带Sql性能分析插件,开发测试时,能有效解决慢查询
全局拦截:提供全表delete、update操作智能分析阻断
避免Sql注入:内置Sql注入内容剥离器,预防Sql注入攻击

我的感受

我们项目是spring-boot + mybatis-plus,官方也有一个这样的Demo,在搭建一些比较套路的工程还是很节约时间的,它自动生成代码的插件可以生成 Entity.mapper,Entity.java,EntityVo.java,EntityBusinessController.java,EntityService.java,IEntityMapper.java等一系列Spring mvc文件架构,大大节约了开发时间。但是就JDBCUtil来说,它还是比较单薄的,只提供了基本的增删查改,用起来可能没有自己写的工具类好用,但这些都可以根据自己习惯和数据结构封装进去的。另外就是作者定义的一套规则我们需要注意一下,否则可能在开发过程中要话费额外的时间去找bug。

遇到的问题

返回的list只有数据库字段不含大写的属性

通常生成的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="com.test.domain.po.IFundAccountMapper">

    <!-- 通用查询结果列-->
    <resultMap id="TestEntityMap" type="com.test.domain.po.FundAccount">
        <id column="id" property="id"/>
        <result column="user_id" property="userId"/>
        <result column="realname" property="realname"/>
    </resultMap>

    <select id="selectObjPage" resultType="TestEntity">
        SELECT * FROM fund_account
    </select>

</mapper>

我们发现在控制层去调用.selectObjPage方法时,返回值只有id和realname有信息,找了一下发现是返回值的原因。我们在实体类中做了数据绑定
Entity.java

package com.senthink.www.micat.domain.po;

import com.baomidou.mybatisplus.annotations.IdType;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;

@TableName("fund_account")
public class TestEntity {

    @TableId(type = IdType.AUTO)
    private Integer id;

    @TableField(value = "user_id")
    private String userId;

    private String realname;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getRealname() {
        return realname;
    }

    public void setRealname(String realname) {
        this.realname = realname;
    }
}

而实体的数据绑定是通过mapper.xml中
<resultMap id="TestEntityMap" type="com.test.domain.po.FundAccount">来完成连接的。所以,当你想返回TestEntity实体类型的时候必须要返回的是这个定义的resultMap,即把
<select id="selectObjPage" resultType="TestEntity">修改为
<select id="selectObjPage" resultMap="TestEntityMap">即可。

setDbColumnUnderline导致的字段不一致

mybatis-plus的setDbColumnUnderline设置使得数据库字段强行按照java实体的骆驼式命名法大写字母前转化为下划线加小写的命名规范。
TestEntity中的userId在拼装sql语句时自动对应为userId,所以这就要求你实体命名和数据库字段名必须满足这个规则,若出现不满足规则的命名,如
passwordMD5,将被编译为password_m_d5这样就会报sql错误了。
解决办法:

  • 按照规范命名,对未规范的命名全部修改
  • 设置不用其下划线命名法,在MybatisPlusConfig.java中设置
MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean();
mybatisPlus.setDbColumnUnderline(true);

总结

到此这篇关于mybatis-plus插件使用时的一些问题的文章就介绍到这了,更多相关mybatis-plus插件使用问题内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MyBatis-Plus分页插件不生效的解决方法

    描述 项目中用到boot 整合 mybatis-plus , 个人在使用分页条件查询的时候一直查不出 total, pages, 终于找到原因了. 环境 <springboot.version>2.1.5.RELEASE</springboot.version> <mybatisplus.version>3.1.1</mybatisplus.version> 配置 1.自定义MybatisPlusConfig 配置分页插件 package com.eyela

  • Mybatis分页插件PageHelper的配置和简单使用方法(推荐)

    前言 在web开发过程中涉及到表格时,例如dataTable,就会产生分页的需求,通常我们将分页方式分为两种:前端分页和后端分页. 前端分页 一次性请求数据表格中的所有记录(ajax),然后在前端缓存并且计算count和分页逻辑,一般前端组件(例如dataTable)会提供分页动作. 特点是:简单,很适合小规模的web平台:当数据量大的时候会产生性能问题,在查询和网络传输的时间会很长. 后端分页 在ajax请求中指定页码(pageNum)和每页的大小(pageSize),后端查询出当页的数据返回

  • 解决mybatis分页插件PageHelper导致自定义拦截器失效

    目录 问题背景 mybatis拦截器使用 使用方法: 注解参数介绍: setProperties方法 bug内容: 自定义拦截器部分代码 PageInterceptor源码: 解决方法: 解决方案一 调整执行顺序 解决方案二 修改拦截器注解定义 问题背景 在最近的项目开发中遇到一个需求 需要对mysql做一些慢查询.大结果集等异常指标进行收集监控,从运维角度并没有对mysql进行统一的指标搜集,所以需要通过代码层面对指标进行收集,我采用的方法是通过mybatis的Interceptor拦截器进行

  • JS封装的三级联动菜单(使用时只需要一行js代码)

    前言 在实际的项目开发中,我们经常需要三级联动,比如省市区的选择,商品的三级分类的选择等等. 而网上却找不到一个代码完整.功能强大.使用简单的三级联动菜单,大都只是简单的讲了一下实现思路. 下面就给大家分享我在工作中封装并在项目中使用的三级级联操作代码,如有错误或者不当的地方欢迎大家指正. 使用简单(只需要一行代码) 可以根据需要设置是否显示"请选择"项 支持回调(在三级分类加载完成后触发回调事件) 支持一个页面多个级联菜单 演示效果预览: 三级联动封装 原理:将selec标签以及相关

  • 自己动手编写一个Mybatis插件之Mybatis脱敏插件

    1. 前言 在日常开发中,身份证号.手机号.卡号.客户号等个人信息都需要进行数据脱敏.否则容易造成个人隐私泄露,客户资料泄露,给不法分子可乘之机.但是数据脱敏不是把敏感信息隐藏起来,而是看起来像真的一样,实际上不能是真的.我以前的公司就因为不重视脱敏,一名员工在离职的时候通过后台的导出功能导出了核心的客户资料卖给了竞品,给公司造成了重大的损失.当然这里有数据管理的原因,但是脱敏仍旧是不可忽略的一环,脱敏可以从一定程度上保证数据的合规使用.下面就是一份经过脱敏的数据: 2. Mybatis 脱敏插

  • MyBatis Log 插件无法显示SQL语句的原因解析

    Mybatis有什么用 前两天跟阿里的大牛聊天,他讲到对于性能要求高,需求变化多的互联网项目来说,用在sql优化上的开发时间是大头,有时候代码写出来一小时,优化反反复复可能要几个星期,这时候Mybatis这种配置比较灵活的框架优势就显现了!Mybatis为什么在国内这么流行? 1. 什么是Mybatis? MyBatis是支持定制化sql.存储过程以及高级映射的优秀的持久层框架.MyBatis避免了几乎所有的JDBC代码和手工设置参数以及抽取结果集.MyBatis使用简单的XML或注解来配置和映

  • Mybatis分页插件的实例详解

    Mybatis分页插件的实例详解 1.前言: 我们知道,在MySQL中,分页的sql是使用limit来做,如果我们自己写sql,那分页肯定是没有任何问题的.但是一旦model多了起来,复杂了起来,我们很自然的想到使用mybatis的逆向工程来生成相应的po和mapper,但是同时也会带来弊端,比如这里的分页问题就不好解决了. 可能有人会说,我可以修改生成的文件,没错,这是可行的,但是一般我们通过逆向工程生成的文件,都不会去动它,所以这个时候,就需要使用分页插件来解决了. 如果你也在用Mybati

  • mybatis分页插件pageHelper详解及简单实例

    mybatis分页插件pageHelper详解及简单实例 工作的框架spring springmvc mybatis3 首先使用分页插件必须先引入maven依赖,在pom.xml中添加如下 <!-- 分页助手 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>3.7.5

  • Go语言WaitGroup使用时需要注意的坑

    前言 WaitGroup在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组.团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执行.Golang 中的 WaitGroup 一直是同步 goroutine 的推荐实践.自己用了两年多也没遇到过什么问题. 直到最近的一天同事扔过来一段奇怪的代码: 第一个坑 复制代码 代码如下: package main   import (     "log"       "sync&qu

  • 扩展Bootstrap Tooltip插件使其可交互的方法

    本文实例讲述了扩展Bootstrap Tooltip插件使其可交互的方法.分享给大家供大家参考,具体如下: 最近在公司某项目开发中遇见一特殊需求,请笔者帮助,因此有了本文的插件.在前端开发中tooltip是一个极其常用的插件,它能更好向使用者展示更多的文档等帮助信息.它们通常都是一些静态文本信息.但同事他们的需求是需要动态交互,在文本信息中存在帮助网页的链接.如果使用常规tooltip,则在用户移出tooltip依赖DOM节点后,tooltip panel则将被隐藏.所以用户没有办法点击到这些交

  • Spring Mybatis 分页插件使用教程

    Mybatis分页切入点 Mybatis内部有个plugins(插件)概念,本质上属于拦截器的思想.具体的解析可见他文MyBatis拦截器原理探究.本文将在此基础上直接展示实际项目的实现代码和其他的相关解析 分页具体代码实现 首先我们可以定义方言抽象类,用于实现分页AbstractDialect.java public abstract class AbstractDialect{ /** * 是否支持limit和偏移量 * @return */ public abstract boolean

随机推荐