關(guān)于mybatis-plus插件使用時的一些問題小結(jié)
介紹
mybatis-plus是國內(nèi)大牛在Mybatis3的基礎(chǔ)上做了一些封裝,簡化了一些操作(分頁,自動生成實體塊等)。是快速開發(fā)一個不錯的工具插件。
Mybatis 增強工具包 - 只做增強不做改變,簡化CRUD操作
優(yōu)點
純正血統(tǒng):完全繼承原生 Mybatis 的所有特性
最少依賴:僅僅依賴Mybatis以及Mybatis-Spring
性能損耗?。簡蛹磿詣幼⑷牖綜URD ,性能無損耗,直接面向?qū)ο蟛僮?br />自動熱加載:Mapper對應(yīng)的xml可以熱加載,大大減少重啟Web服務(wù)器時間,提升開發(fā)效率
自動生成代碼:包含自動生成代碼類以及Maven插件,通過少量配置,即可快速生成Mybatis對應(yīng)的xml、mapper、entity、service、serviceimpl層代碼,減少開發(fā)時間
自定義操作:支持自定義Sql注入,實現(xiàn)個性化操作
自定義轉(zhuǎn)義規(guī)則:支持?jǐn)?shù)據(jù)庫關(guān)鍵詞(例如:order、key等)自動轉(zhuǎn)義,支持自定義關(guān)鍵詞
多種主鍵策略:支持多達4種主鍵策略,可自由配置,若無將會自動填充,更有充滿黑科技的分布式全局唯一ID生成器
無縫分頁插件:基于Mybatis物理分頁,無需關(guān)心具體操作,等同于編寫基本selectList查詢
性能分析:自帶Sql性能分析插件,開發(fā)測試時,能有效解決慢查詢
全局?jǐn)r截:提供全表delete、update操作智能分析阻斷
避免Sql注入:內(nèi)置Sql注入內(nèi)容剝離器,預(yù)防Sql注入攻擊
我的感受
我們項目是spring-boot + mybatis-plus,官方也有一個這樣的Demo,在搭建一些比較套路的工程還是很節(jié)約時間的,它自動生成代碼的插件可以生成 Entity.mapper,Entity.java,EntityVo.java,EntityBusinessController.java,EntityService.java,IEntityMapper.java
等一系列Spring mvc文件架構(gòu),大大節(jié)約了開發(fā)時間。但是就JDBCUtil來說,它還是比較單薄的,只提供了基本的增刪查改,用起來可能沒有自己寫的工具類好用,但這些都可以根據(jù)自己習(xí)慣和數(shù)據(jù)結(jié)構(gòu)封裝進去的。另外就是作者定義的一套規(guī)則我們需要注意一下,否則可能在開發(fā)過程中要話費額外的時間去找bug。
遇到的問題
返回的list只有數(shù)據(jù)庫字段不含大寫的屬性
通常生成的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"> <!-- 通用查詢結(jié)果列--> <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>
我們發(fā)現(xiàn)在控制層去調(diào)用.selectObjPage
方法時,返回值只有id和realname有信息,找了一下發(fā)現(xiàn)是返回值的原因。我們在實體類中做了數(shù)據(jù)綁定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; } }
而實體的數(shù)據(jù)綁定是通過mapper.xml中<resultMap id="TestEntityMap" type="com.test.domain.po.FundAccount">
來完成連接的。所以,當(dāng)你想返回TestEntity實體類型的時候必須要返回的是這個定義的resultMap,即把<select id="selectObjPage" resultType="TestEntity">
修改為<select id="selectObjPage" resultMap="TestEntityMap">
即可。
setDbColumnUnderline導(dǎo)致的字段不一致
mybatis-plus的setDbColumnUnderline
設(shè)置使得數(shù)據(jù)庫字段強行按照java實體的駱駝式命名法大寫字母前轉(zhuǎn)化為下劃線加小寫的命名規(guī)范。
如TestEntity
中的userId
在拼裝sql語句時自動對應(yīng)為userId
,所以這就要求你實體命名和數(shù)據(jù)庫字段名必須滿足這個規(guī)則,若出現(xiàn)不滿足規(guī)則的命名,如passwordMD5
,將被編譯為password_m_d5
這樣就會報sql錯誤了。
解決辦法:
- 按照規(guī)范命名,對未規(guī)范的命名全部修改
- 設(shè)置不用其下劃線命名法,在
MybatisPlusConfig.java
中設(shè)置
MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean(); mybatisPlus.setDbColumnUnderline(true);
總結(jié)
到此這篇關(guān)于mybatis-plus插件使用時的一些問題的文章就介紹到這了,更多相關(guān)mybatis-plus插件使用問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java爬蟲實戰(zhàn)抓取一個網(wǎng)站上的全部鏈接
這篇文章主要介紹了JAVA使用爬蟲抓取網(wǎng)站網(wǎng)頁內(nèi)容的方法,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧。2016-10-10解決zuulGateway網(wǎng)關(guān)添加路由異常熔斷問題
這篇文章主要介紹了解決zuulGateway網(wǎng)關(guān)添加路由異常熔斷問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10詳解APP微信支付(java后臺_統(tǒng)一下單和回調(diào))
這篇文章主要介紹了APP微信支付(java后臺_統(tǒng)一下單和回調(diào)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Maven發(fā)布項目 (jar包) 到Nexus私服中的操作
這篇文章主要介紹了Maven發(fā)布項目 (jar包) 到Nexus私服中的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10SpringBoot集成thymeleaf渲染html模板的步驟詳解
這篇文章主要給大家詳細(xì)介紹了SpringBoot集成thymeleaf如何使實現(xiàn)html模板的渲染,文中有詳細(xì)的代碼示例,具有一定的參考價值,需要的朋友可以參考下2023-06-06Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之漢諾塔
漢諾塔是源于印度一個古老傳說的益智玩具。大梵天創(chuàng)造世界時做了三根石柱,在一根柱子上從下往上按大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規(guī)定,在小圓盤上不能放大圓盤,三根柱子之間一次只能移動一個圓盤2022-02-02Java實現(xiàn)將容器 Map中的內(nèi)容保存到數(shù)組
這篇文章主要介紹了Java實現(xiàn)將容器 Map中的內(nèi)容保存到數(shù)組,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09