天天看點

一個 Mybatis 開發神器:Fast MyBatis

作者:程式猿久一

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/#/

繼續閱讀