日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Mybatis助手之Mybatis-Plus——开始使用

發(fā)布時(shí)間:2024/2/28 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis助手之Mybatis-Plus——开始使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自http://nihao-shijie.lofter.com/post/1cd58fc5_ceadf90

Mybatis-Plus 是 Mybatis 最得力的助手,只做增強(qiáng)不做改變,為簡(jiǎn)化開發(fā)、提高效率而生。

先介紹一下Mybatis-Plus

優(yōu)點(diǎn)

  • 純正血統(tǒng):完全繼承原生 Mybatis 的所有特性

  • 最少依賴:僅僅依賴Mybatis以及Mybatis-Spring

  • 性能損耗小:啟動(dòng)即會(huì)自動(dòng)注入基本CURD?,性能無損耗,直接面向?qū)ο蟛僮?/p>

  • 自動(dòng)熱加載:Mapper對(duì)應(yīng)的xml可以熱加載,大大減少重啟Web服務(wù)器時(shí)間,提升開發(fā)效率

  • 自動(dòng)生成代碼:包含自動(dòng)生成代碼類以及Maven插件,通過少量配置,即可快速生成Mybatis對(duì)應(yīng)的xml、mapper、entity、service、serviceimpl層代碼,減少開發(fā)時(shí)間

  • 自定義操作:支持自定義Sql注入,實(shí)現(xiàn)個(gè)性化操作

  • 自定義轉(zhuǎn)義規(guī)則:支持?jǐn)?shù)據(jù)庫(kù)關(guān)鍵詞(例如:order、key等)自動(dòng)轉(zhuǎn)義,支持自定義關(guān)鍵詞

  • 多種主鍵策略:支持多達(dá)4種主鍵策略,可自由配置,若無將會(huì)自動(dòng)填充,更有充滿黑科技的分布式全局唯一ID生成器

  • 無縫分頁(yè)插件:基于Mybatis物理分頁(yè),無需關(guān)心具體操作,等同于編寫基本selectList查詢

  • 性能分析:自帶Sql性能分析插件,開發(fā)測(cè)試時(shí),能有效解決慢查詢

  • 全局?jǐn)r截:提供全表delete、update操作智能分析阻斷

  • 避免Sql注入:內(nèi)置Sql注入內(nèi)容剝離器,預(yù)防Sql注入攻擊

MP自帶了代碼生成器,包含代碼生成類和Maven插件,你可以靈活的調(diào)整生成代碼的方式。

進(jìn)行開發(fā)你需要做什么呢?你僅僅需要配置好數(shù)據(jù)庫(kù)和代碼生成路徑,然后生成代碼就可以開擼Controller層代碼了,MP已經(jīng)把 Entity層、Mapper層、Service層的代碼以及Mapper對(duì)應(yīng)的XML文件生成好了!

我們來看看生成后的代碼是什么樣子:

示例中,我們假設(shè)有一張表叫foo,里面包含id和name兩個(gè)字段,通過MP來生成代碼

Foo.java

/**

?*

?* Foo表

?*

?*/

@TableName("foo")

public class Foo implements Serializable {

????@TableField(exist?= false)

??? protected static final long serialVersionUID = 1L;

????/** ID */

????@TableId

??? protected Long id;

????/**?名稱?*/

??? protected String name;

??? public Long getId()?{

??????? return this.id;

????}

??? public void setId(Long id)?{

??????? this.id = id;

????}

??? public String getName()?{

??????? return this.name;

????}

??? public void setName(String name)?{

??????? this.name = name;

????}

}

FooMapper.java

/**

?*

?* Foo 表數(shù)據(jù)庫(kù)控制層接口

?*

?*/

public interface FooMapper extends AutoMapper<Foo>?{

}

FooMapper.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.xxx.mapper.FooMapper">

????<!--?通用查詢結(jié)果列-->

????<sql id="Base_Column_List">

???????? id, name

????</sql>

</mapper>

FooService.java

/**

?*

?* Foo 表數(shù)據(jù)服務(wù)層接口

?*

?*/

public interface IFooService extends ISuperService<Foo>?{

}

FooServiceImpl.java

/**

?*

?* Foo 表數(shù)據(jù)服務(wù)層接口實(shí)現(xiàn)類

?*

?*/

@Service

public class FooServiceImpl extends SuperServiceImpl<FooMapper, Foo> implements IFooService {

}

納尼?!!怎么可以這么簡(jiǎn)潔?!!xml怎么什么東西都沒有?!!

對(duì),你沒有看錯(cuò),這就是MP生成代碼,非常的簡(jiǎn)潔而且還生成了對(duì)應(yīng)的注釋(備注:實(shí)體類字段的注釋需要在數(shù)據(jù)庫(kù)設(shè)計(jì)的時(shí)候就填寫好備注),要是你喜歡,甚至可以配置為無xml(如果不進(jìn)行擴(kuò)展,只需要基本CRUD的話)。

AutoMapper<T>方法說明

你可以看到MP采用了繼承的方式來提取CRUD方法,那么我們到底有哪些方法呢?

?

insert相關(guān)

boolean insert(T entity);?//插入

boolean insertSelective(T entity);?//選擇性插入,null字段不插入

boolean insertBatch(List<T> entityList);?//批量插入

delete相關(guān)

boolean deleteById(I id);?//通過ID刪除

boolean deleteByMap(Map<String, Object> columnMap);?//?通過自定義MAP刪除

boolean deleteSelective(T entity);?//通過entity實(shí)體選擇性刪除,null字段不作為條件

boolean deleteBatchIds(List<I> idList);?//批量刪除

update相關(guān)

boolean updateById(T entity);?//通過ID更新

boolean updateSelectiveById(T entity);?//通過ID選擇性更新,null字段不更新

boolean update(T entity, T whereEntity);?//通過whereEntity實(shí)體構(gòu)造where條件進(jìn)行更新

boolean updateSelective(T entity, T whereEntity);?//通過whereEntity實(shí)體構(gòu)造where條件進(jìn)行選擇性更新

boolean updateBatchById(List<T> entityList);?//批量更新

select相關(guān)

T selectById(I id);?//通過ID查詢

List<T> selectBatchIds(List<I> idList);?//通過ID集合批量查詢

List<T> selectByMap(Map<String, Object> columnMap);?//通過自定義MAP查詢

T selectOne(T entity);?//通過實(shí)體entity查詢

int selectCount(T entity);?//統(tǒng)計(jì)查詢

List<T> selectList(EntityWrapper<T> entityWrapper);?//List查詢,entityWrapper為查詢條件構(gòu)造器

Page<T> selectPage(Page<T> page, EntityWrapper<T> entityWrapper);?//分頁(yè)查詢,page為分頁(yè)實(shí)體,entityWrapper為查詢條件構(gòu)造器


只要生成了代碼,就已經(jīng)帶有上述的所有方法,單表的CRUD已經(jīng)完全能夠滿足了。

你也許會(huì)問,那多表或者復(fù)雜業(yè)務(wù)怎么辦?之前說了,MP是一個(gè)增強(qiáng)輔助工具,不會(huì)改變Mybatis,如果有多表業(yè)務(wù)和復(fù)雜業(yè)務(wù),就可以像正常Mybatis一樣使用,沒有任何沖突。


了解更多


總結(jié)

以上是生活随笔為你收集整理的Mybatis助手之Mybatis-Plus——开始使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。