Mybatis 開發(fā)神器:Fast MyBatis,太強了!
點擊關(guān)注公眾號,回復(fù)“2T”獲取2TB學(xué)習(xí)資源!
互聯(lián)網(wǎng)架構(gòu)師后臺回復(fù)?2T?有特別禮包
上一篇:一篇搞懂TCP、HTTP、Socket、Socket連接池
fastmybatis 是一個 mybatis 開發(fā)框架,其宗旨為:簡單、快速、有效。零配置快速上手,無需編寫 xml 文件即可完成 CRUD 操作。同時支持 mysql、sqlserver、oracle、postgresql、sqlite。
支持自定義 SQL,對于基本的增刪改查不需要寫 SQL,對于其它特殊 SQL(如統(tǒng)計 SQL )可寫在 xml 中,支持與 Spring-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>
- 增刪改查例子
假設(shè)數(shù)據(jù)庫有張?t_user?表,添加對應(yīng)的實體類?TUser.java和 Mapper 類
TUserMapper.java
/*** 增刪改查例子*/@RestControllerpublic class CrudController {@Autowiredprivate 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方法,實際上應(yīng)該使用POST* http://localhost:8080/user/save?username=jim** @param user* @return*/@GetMapping("/user/save")public Result<Integer> save(TUser user) {userService.saveIgnoreNull(user);// 返回添加后的主鍵值return Result.ok(user.getId());}/*** 修改記錄,這里為了方便演示用了GET方法,實際上應(yīng)該使用POST* http://localhost:8080/user/update?id=10&username=jim** @param user 表單數(shù)據(jù)* @return*/@GetMapping("/user/update")public Result<?> update(TUser user) {userService.updateIgnoreNull(user);return Result.ok();}/*** 刪除記錄,這里為了方便演示用了GET方法,實際上應(yīng)該使用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
// 實現(xiàn)通用接口@Servicepublic class UserService implements IService<TUser/*實體類*/, Integer/*主鍵類型*/> {}
public?interface?TUserMapper?extends?CrudMapper<TUser/*實體類*/,?Integer/*主鍵類型*/>?{}
| 方法 | 說明 |
|---|---|
| E getByColumn(String column, Object value) | 根據(jù)字段查詢一條記錄 |
| E getById(I id) | 根據(jù)主鍵查詢 |
| E getByQuery(Query query) | 根據(jù)條件查找單條記錄 |
| E getBySpecifiedColumns(List<String> columns, Query query) | 查詢單條數(shù)據(jù)并返回指定字段 |
| <T> T getBySpecifiedColumns(List<String> columns, Query query, Class<T> clazz) | 查詢單條數(shù)據(jù)返回指定字段并轉(zhuǎn)換到指定類中 |
| <T> T getColumnValue(String column, Query query, Class<T> clazz) | 查詢某一行某個字段值 |
| long getCount(Query query) | 查詢總記錄數(shù) |
| List<E> list(Query query) | 查詢結(jié)果集 |
| List<E> listByArray(String column, Object[] values) | 根據(jù)多個字段值查詢結(jié)果集 |
| List<E> listByCollection(String column, Collection<?> values) | 根據(jù)字段多個值查詢結(jié)果集 |
| List<E> listByColumn(String column, Object value) | 根據(jù)字段查詢結(jié)果集 |
| List<E> listByIds(Collection<I> ids) | 根據(jù)多個主鍵查詢 |
| 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) | 查詢結(jié)果集,并轉(zhuǎn)換結(jié)果集中的記錄,轉(zhuǎn)換處理每一行 |
| <R> PageInfo<R> page(Query query, Supplier<R> target, Consumer<R> format) | 查詢結(jié)果集,并轉(zhuǎn)換結(jié)果集中的記錄,并對記錄進行額外處理 |
| <T> PageInfo<T> page(Query query, Supplier<T> target) | 查詢結(jié)果集,并轉(zhuǎn)換結(jié)果集中的記錄 |
| <R> PageInfo<R> pageAndConvert(Query query, Function<List<E>, List<R>> converter) | 查詢結(jié)果集,并轉(zhuǎn)換結(jié)果集中的記錄,轉(zhuǎn)換處理list |
| <T> PageInfo<T> pageBySpecifiedColumns(List<String> columns, Query query, Class<T> clazz) | 查詢返回指定的列,返回分頁數(shù)據(jù) |
| PageEasyui<E> pageEasyui(Query query) | 查詢返回easyui結(jié)果集 |
| <T> PageEasyui<T> pageEasyui(Query query, Class<T> clazz) | 查詢返回easyui結(jié)果集,并轉(zhuǎn)換結(jié)果集中的記錄 |
| E forceById(I id) | 根據(jù)主鍵查詢強制查詢,忽略邏輯刪除字段 |
| int save(E entity) | 保存,保存所有字段 |
| int saveBatch(Collection<E> entitys) | 批量保存 |
| int saveIgnoreNull(E entity) | 保存,忽略null字段 |
| int saveMultiSet(Collection<E> entitys) | 批量保存,兼容更多的數(shù)據(jù)庫版本,忽略重復(fù)行,此方式采用union的方式批量insert |
| int saveOrUpdate(E entity) | 保存或修改,當數(shù)據(jù)庫存在記錄執(zhí)行UPDATE,否則執(zhí)行INSERT |
| int saveOrUpdateIgnoreNull(E entity) | 保存或修改,忽略null字段,當數(shù)據(jù)庫存在記錄執(zhí)行UPDATE,否則執(zhí)行INSERT |
| int saveUnique(Collection<E> entitys) | 批量保存,去除重復(fù)行,通過對象是否相對判斷重復(fù)數(shù)據(jù),實體類需要實現(xiàn)equals方法 |
| int saveUnique(Collection<E> entitys, Comparator<E> comparator) | 批量保存,去除重復(fù)行,指定比較器判斷 |
| int update(E entity) | 更新,更新所有字段 |
| int updateByQuery(E entity, Query query) | 根據(jù)條件更新 |
| int updateIgnoreNull(E entity) | 更新,忽略null字段 |
| int updateByMap(Map<String, Object> map, Query query) | 根據(jù)條件更新,map中的數(shù)據(jù)轉(zhuǎn)化成update語句set部分,key為數(shù)據(jù)庫字段名 |
| int delete(E entity) | 刪除,在有邏輯刪除字段的情況下,做UPDATE操作 |
| int deleteByColumn(String column, Object value) | 根據(jù)指定字段值刪除,在有邏輯刪除字段的情況下,做UPDATE操作 |
| int deleteById(I id) | 根據(jù)id刪除,在有邏輯刪除字段的情況下,做UPDATE操作 |
| int deleteByIds(Collection<I> ids) | 根據(jù)多個主鍵id刪除,在有邏輯刪除字段的情況下,做UPDATE操作 |
| int deleteByQuery(Query query) | 根據(jù)條件刪除,在有邏輯刪除字段的情況下,做UPDATE操作 |
| int forceDelete(E entity) | 強制刪除(底層根據(jù)id刪除),忽略邏輯刪除字段,執(zhí)行DELETE語句 |
| int forceDeleteById(I id) | 根據(jù)id強制刪除,忽略邏輯刪除字段,執(zhí)行DELETE語句 |
| int forceDeleteByQuery(Query query) | 根據(jù)條件強制刪除,忽略邏輯刪除字段,執(zhí)行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條數(shù)據(jù)List<User> users = mapper.list(query);查詢總記錄數(shù):Query query = new Query().eq("age",10).page(1,10); // 第一頁,每頁10條數(shù)據(jù)long total = mapper.getCount(query); // 該條件下總記錄數(shù)
開源地址:https://gitee.com/durcframework/fastmybatis
相關(guān)文檔:https://durcframework.gitee.io/fastmybatis/#/
-End-
正文結(jié)束
推薦閱讀 ↓↓↓
1.心態(tài)崩了!稅前2萬4,到手1萬4,年終獎扣稅方式1月1日起施行~
2.深圳一普通中學(xué)老師工資單曝光,秒殺程序員,網(wǎng)友:敢問是哪個學(xué)校畢業(yè)的?
3.從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧
7.這封“領(lǐng)導(dǎo)痛批95后下屬”的郵件,句句扎心!

