Mybatis助手之Mybatis-Plus——开始使用
轉載自http://nihao-shijie.lofter.com/post/1cd58fc5_ceadf90
Mybatis-Plus 是 Mybatis 最得力的助手,只做增強不做改變,為簡化開發、提高效率而生。
先介紹一下Mybatis-Plus
優點
純正血統:完全繼承原生 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注入攻擊
MP自帶了代碼生成器,包含代碼生成類和Maven插件,你可以靈活的調整生成代碼的方式。
進行開發你需要做什么呢?你僅僅需要配置好數據庫和代碼生成路徑,然后生成代碼就可以開擼Controller層代碼了,MP已經把 Entity層、Mapper層、Service層的代碼以及Mapper對應的XML文件生成好了!
我們來看看生成后的代碼是什么樣子:
示例中,我們假設有一張表叫foo,里面包含id和name兩個字段,通過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 表數據庫控制層接口
?*
?*/
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">
????<!--?通用查詢結果列-->
????<sql id="Base_Column_List">
???????? id, name
????</sql>
</mapper>
FooService.java
/**
?*
?* Foo 表數據服務層接口
?*
?*/
public interface IFooService extends ISuperService<Foo>?{
}
FooServiceImpl.java
/**
?*
?* Foo 表數據服務層接口實現類
?*
?*/
@Service
public class FooServiceImpl extends SuperServiceImpl<FooMapper, Foo> implements IFooService {
}
納尼?!!怎么可以這么簡潔?!!xml怎么什么東西都沒有?!!
對,你沒有看錯,這就是MP生成代碼,非常的簡潔而且還生成了對應的注釋(備注:實體類字段的注釋需要在數據庫設計的時候就填寫好備注),要是你喜歡,甚至可以配置為無xml(如果不進行擴展,只需要基本CRUD的話)。
AutoMapper<T>方法說明
你可以看到MP采用了繼承的方式來提取CRUD方法,那么我們到底有哪些方法呢?
?
insert相關
boolean insert(T entity);?//插入
boolean insertSelective(T entity);?//選擇性插入,null字段不插入
boolean insertBatch(List<T> entityList);?//批量插入
delete相關
boolean deleteById(I id);?//通過ID刪除
boolean deleteByMap(Map<String, Object> columnMap);?//?通過自定義MAP刪除
boolean deleteSelective(T entity);?//通過entity實體選擇性刪除,null字段不作為條件
boolean deleteBatchIds(List<I> idList);?//批量刪除
update相關
boolean updateById(T entity);?//通過ID更新
boolean updateSelectiveById(T entity);?//通過ID選擇性更新,null字段不更新
boolean update(T entity, T whereEntity);?//通過whereEntity實體構造where條件進行更新
boolean updateSelective(T entity, T whereEntity);?//通過whereEntity實體構造where條件進行選擇性更新
boolean updateBatchById(List<T> entityList);?//批量更新
select相關
T selectById(I id);?//通過ID查詢
List<T> selectBatchIds(List<I> idList);?//通過ID集合批量查詢
List<T> selectByMap(Map<String, Object> columnMap);?//通過自定義MAP查詢
T selectOne(T entity);?//通過實體entity查詢
int selectCount(T entity);?//統計查詢
List<T> selectList(EntityWrapper<T> entityWrapper);?//List查詢,entityWrapper為查詢條件構造器
Page<T> selectPage(Page<T> page, EntityWrapper<T> entityWrapper);?//分頁查詢,page為分頁實體,entityWrapper為查詢條件構造器
只要生成了代碼,就已經帶有上述的所有方法,單表的CRUD已經完全能夠滿足了。
你也許會問,那多表或者復雜業務怎么辦?之前說了,MP是一個增強輔助工具,不會改變Mybatis,如果有多表業務和復雜業務,就可以像正常Mybatis一樣使用,沒有任何沖突。
了解更多
總結
以上是生活随笔為你收集整理的Mybatis助手之Mybatis-Plus——开始使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis之trim prefix=
- 下一篇: 京东面试题:Java中 ++i 的操作是