文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

介绍

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错误了。
解决办法:

MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean();
mybatisPlus.setDbColumnUnderline(true);

总结

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯