mybatis-plus插件使用的一些问题

介绍

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方法时,返回值只有idrealname有信息,找了一下发现是返回值的原因。我们在实体类中做了数据绑定
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);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,398评论 0 4
  • Spring 技术笔记Day 1 预热知识一、 基本术语Blob类型,二进制对象Object Graph:对象图...
    OchardBird阅读 955评论 0 2
  • 官方文档 简介 入门 XML配置 XML映射文件 动态SQL Java API SQL语句构建器 日志 一、 JD...
    拾壹北阅读 3,538评论 0 52
  • 昨天我们提到大部分人的一个通病“想得太多,做得太少”,今天笑来老师指出了第二个通病:“低估别人,高估自己”,那么...
    自性如本阅读 344评论 0 2
  • 文/盛德 那一年,花开正好,有阳光,有微风,有白云,没有雾霾;那一年,我还是个少年,遇见了一位姑娘。 姑娘短发齐眉...
    盛德阅读 324评论 2 2