一個 Mybatis 開發神器:Fast MyBatis

程序猿久一 發佈 2022-03-08T08:14:43+00:00

fastmybatis 是一個 mybatis 開發框架,其宗旨為:簡單、快速、有效。支持自定義 SQL,對於基本的增刪改查不需要寫 SQL,對於其它特殊 SQL可寫在 xml 中,支持與 S。

fastMyBatis 是一個 mybatis 開發框架,其宗旨為:簡單、快速、有效。零配置快速上手,無需編寫 xml 文件即可完成 CRUD 操作。同時支持 mySQL、sqlserver、oracle、postgresql、sqlite。

支持自定義 SQL,對於基本的增刪改查不需要寫 SQL,對於其它特殊 SQL(如統計 SQL )可寫在 xml 中,支持與 S

pring-Boot 集成,依賴 starter 即可,支持插件編寫,支持 ActiveRecord 模式,提供通用 Service,輕量級,無侵入性,是官方 MyBatis 的一種擴展

快速開始(springboot)

  • 新建一個 Spring boot 項目

  • pom.xml 添加 fastmybatis-spring-boot-starter

<dependency>

<groupId>net.oschina.durcframework</groupId>

<artifactId>fastmybatis-spring-boot-starter</artifactId>

<version>最新版本</version>

</dependency>

  • 增刪改查例子

假設資料庫有張 t_user 表,添加對應的實體類TUser.java和 Mapper 類TUserMapper.java

/**

* 增刪改查例子

*/

@RestController

public class CrudController {

@Autowired

private UserService userService;

/**

* 分頁查詢

* http://localhost:8080/user/page?id=10

* http://localhost:8080/user/page?pageIndex=1&pageSize=5

*

* @param param

* @return

*/

@GetMapping("/user/page")

public Result<PageInfo<TUser>> page(UserParam param) {

Query query = param.toQuery;

PageInfo<TUser> pageInfo = userService.page(query);

return Result.ok(pageInfo);

}

/**

* 新增記錄,這裡為了方便演示用了GET方法,實際上應該使用POST

* http://localhost:8080/user/save?username=jim

*

* @param user

* @return

*/

@GetMapping("/user/save")

public Result<Integer> save(TUser user) {

userService.saveIgnore(user);

// 返回添加後的主鍵值

return Result.ok(user.getId);

}

/**

* 修改記錄,這裡為了方便演示用了GET方法,實際上應該使用POST

* http://localhost:8080/user/update?id=10&username=jim

*

* @param user 表單數據

* @return

*/

@GetMapping("/user/update")

public Result<?> update(TUser user) {

userService.updateIgnore(user);

return Result.ok;

}

/**

* 刪除記錄,這裡為了方便演示用了GET方法,實際上應該使用DELETE

* http://localhost:8080/user/delete?id=10

*

* @param id 主鍵id

* @return

*/

@GetMapping("/user/delete")

public Result<?> delete(Integer id) {

userService.deleteById(id);

return Result.ok;

}

}

  • UserService.java

// 實現通用接口

@Service

public class UserService implements IService<TUser/*實體類*/, Integer/*主鍵類型*/> {

}

  • TUserMapper.java

public interface TUserMapper extends CrudMapper<TUser/*實體類*/, Integer/*主鍵類型*/> {

}

service和mapper不用寫一行代碼就能實現各種資料庫操作,非常方便。

Mapper方法列表

方法 說明
E getByColumn(String column, Object value) 根據欄位查詢一條記錄
E getById(I id) 根據主鍵查詢
E getByQuery(Query query) 根據條件查找單條記錄
E getBySpecifiedColumns(List<String> columns, Query query) 查詢單條數據並返回指定欄位
<T> T getBySpecifiedColumns(List<String> columns, Query query, Class<T> clazz) 查詢單條數據返回指定欄位並轉換到指定類中
<T> T getColumnValue(String column, Query query, Class<T> clazz) 查詢某一行某個欄位值
long getCount(Query query) 查詢總記錄數
List<E> list(Query query) 查詢結果集
List<E> listByArray(String column, Object[] values) 根據多個欄位值查詢結果集
List<E> listByCollection(String column, Collection<?> values) 根據欄位多個值查詢結果集
List<E> listByColumn(String column, Object value) 根據欄位查詢結果集
List<E> listByIds(Collection<I> ids) 根據多個主鍵查詢
List<E> listBySpecifiedColumns(List<String> columns, Query query) 查詢返回指定的列,返回實體類集合
<T> List<T> listBySpecifiedColumns(List<String> columns, Query query, Class<T> clazz) 查詢返回指定的列,返指定類集合
<T> List<T> listColumnValues(String column, Query query, Class<T> clazz) 查詢指定列,返指定列集合
PageInfo<E> page(Query query) 分頁查詢
<R> PageInfo<R> page(Query query, Function<E, R> converter) 查詢結果集,並轉換結果集中的記錄,轉換處理每一行
<R> PageInfo<R> page(Query query, Supplier<R> target, Consumer<R> format) 查詢結果集,並轉換結果集中的記錄,並對記錄進行額外處理
<T> PageInfo<T> page(Query query, Supplier<T> target) 查詢結果集,並轉換結果集中的記錄
<R> PageInfo<R> pageAndConvert(Query query, Function<List<E>, List<R>> converter) 查詢結果集,並轉換結果集中的記錄,轉換處理list
<T> PageInfo<T> pageBySpecifiedColumns(List<String> columns, Query query, Class<T> clazz) 查詢返回指定的列,返回分頁數據
PageEasyui<E> pageEasyui(Query query) 查詢返回easyui結果集
<T> PageEasyui<T> pageEasyui(Query query, Class<T> clazz) 查詢返回easyui結果集,並轉換結果集中的記錄
E forceById(I id) 根據主鍵查詢強制查詢,忽略邏輯刪除欄位
int save(E entity) 保存,保存所有欄位
int saveBatch(Collection<E> entitys) 批量保存
int saveIgnore(E entity) 保存,忽略欄位
int saveMultiSet(Collection<E> entitys) 批量保存,兼容更多的資料庫版本,忽略重複行,此方式採用union的方式批量insert
int saveOrUpdate(E entity) 保存或修改,當資料庫存在記錄執行UPDATE,否則執行INSERT
int saveOrUpdateIgnore(E entity) 保存或修改,忽略欄位,當資料庫存在記錄執行UPDATE,否則執行INSERT
int saveUnique(Collection<E> entitys)
批量保存,去除重複行,通過對象是否相對判斷重複數據,實體類需要實現equals方法
int saveUnique(Collection<E> entitys, Comparator<E> comparator) 批量保存,去除重複行,指定比較器判斷
int update(E entity) 更新,更新所有欄位
int updateByQuery(E entity, Query query) 根據條件更新
int updateIgnore(E entity) 更新,忽略欄位
int updateByMap(Map<String, Object> map, Query query) 根據條件更新,map中的數據轉化成update語句set部分,key為資料庫欄位名
int delete(E entity) 刪除,在有邏輯刪除欄位的情況下,做UPDATE操作
int deleteByColumn(String column, Object value) 根據指定欄位值刪除,在有邏輯刪除欄位的情況下,做UPDATE操作
int deleteById(I id) 根據id刪除,在有邏輯刪除欄位的情況下,做UPDATE操作
int deleteByIds(Collection<I> ids) 根據多個主鍵id刪除,在有邏輯刪除欄位的情況下,做UPDATE操作
int deleteByQuery(Query query) 根據條件刪除,在有邏輯刪除欄位的情況下,做UPDATE操作
int forceDelete(E entity) 強制刪除(底層根據id刪除),忽略邏輯刪除欄位,執行DELETE語句
int forceDeleteById(I id) 根據id強制刪除,忽略邏輯刪除欄位,執行DELETE語句
int forceDeleteByQuery(Query query) 根據條件強制刪除,忽略邏輯刪除欄位,執行DELETE語句

Query查詢對象

查詢姓名為張三,並且年齡為22歲的用戶:
Query query = new Query.eq("username","張三").eq("age",22);
List<User> users = mapper.list(query);

查詢年齡為10,20,30的用戶:
Query query = new Query.in("age",Arrays.asList(10,20,30));
List<User> users = mapper.list(query);

查詢註冊日期大於2017-11-11的用戶:
Date regDate = ...
Query query = new Query.gt("reg_date",regDate);
List<User> users = mapper.list(query);

查詢性別為男的,年齡大於等於20歲的用戶,按年齡降序:
Query query = new Query.eq("gender",1).ge("age",20).orderby("age",Sort.DESC);
List<User> users = mapper.list(query);

分頁查詢:
Query query = new Query.eq("age",10).page(1,10); // 第一頁,每頁10條數據
List<User> users = mapper.list(query);

查詢總記錄數:
Query query = new Query.eq("age",10).page(1,10); // 第一頁,每頁10條數據
long total = mapper.getCount(query); // 該條件下總記錄數
開源地址:https://gitee.com/durcframework/fastmybatis
相關文檔:https://durcframework.gitee.io/fastmybatis/#/
關鍵字: