<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          又一款 Mybatis 開發(fā)神器:Fast MyBatis 太強(qiáng)大了!

          共 8550字,需瀏覽 18分鐘

           ·

          2022-05-27 16:13

          點(diǎn)擊關(guān)注公眾號(hào),實(shí)用技術(shù)文章及時(shí)了解

          fastmybatis 是一個(gè) mybatis 開發(fā)框架,其宗旨為:簡(jiǎn)單、快速、有效。零配置快速上手,無(wú)需編寫 xml 文件即可完成 CRUD 操作。同時(shí)支持 mysql、sqlserver、oracle、postgresql、sqlite。

          支持自定義 SQL,對(duì)于基本的增刪改查不需要寫 SQL,對(duì)于其它特殊 SQL(如統(tǒng)計(jì) SQL )可寫在 xml 中,支持與 Spring-Boot 集成,依賴 starter 即可,支持插件編寫,支持 ActiveRecord 模式,提供通用 Service,輕量級(jí),無(wú)侵入性,是官方 MyBatis 的一種擴(kuò)展

          快速開始(springboot)

          新建一個(gè) Spring boot 項(xiàng)目

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

          <dependency>
              <groupId>net.oschina.durcframework</groupId>
              <artifactId>fastmybatis-spring-boot-starter</artifactId>
              <version>最新版本</version>
          </dependency>

          增刪改查例子

          假設(shè)數(shù)據(jù)庫(kù)有張 t_user 表,添加對(duì)應(yīng)的實(shí)體類 TUser.java和 Mapper 類TUserMapper.java

          /**
           * 增刪改查例子
           */

          @RestController
          public class CrudController {

              @Autowired
              private UserService userService;


              /**
               * 分頁(yè)查詢
               * 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方法,實(shí)際上應(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方法,實(shí)際上應(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方法,實(shí)際上應(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

          // 實(shí)現(xiàn)通用接口
          @Service
          public class UserService implements IService<TUser/*實(shí)體類*/, Integer/*主鍵類型*/> {

          }

          TUserMapper.java

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

          }

          service和mapper不用寫一行代碼就能實(shí)現(xiàn)各種數(shù)據(jù)庫(kù)操作,非常方便。

          Mapper方法列表

          方法說(shuō)明
          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)查詢某一行某個(gè)字段值
          long getCount(Query query)查詢總記錄數(shù)
          List<E> list(Query query)查詢結(jié)果集
          List<E> listByArray(String column, Object[] values)根據(jù)多個(gè)字段值查詢結(jié)果集
          List<E> listByCollection(String column, Collection<?> values)根據(jù)字段多個(gè)值查詢結(jié)果集
          List<E> listByColumn(String column, Object value)根據(jù)字段查詢結(jié)果集
          List<E> listByIds(Collection<I> ids)根據(jù)多個(gè)主鍵查詢
          List<E> listBySpecifiedColumns(List<String> columns, Query query)查詢返回指定的列,返回實(shí)體類集合
          <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)分頁(yè)查詢
          <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é)果集中的記錄,并對(duì)記錄進(jìn)行額外處理
          <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)查詢返回指定的列,返回分頁(yè)數(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ù)主鍵查詢強(qiáng)制查詢,忽略邏輯刪除字段
          int save(E entity)保存,保存所有字段
          int saveBatch(Collection<E> entitys)批量保存
          int saveIgnoreNull(E entity)保存,忽略null字段
          int saveMultiSet(Collection<E> entitys)批量保存,兼容更多的數(shù)據(jù)庫(kù)版本,忽略重復(fù)行,此方式采用union的方式批量insert
          int saveOrUpdate(E entity)保存或修改,當(dāng)數(shù)據(jù)庫(kù)存在記錄執(zhí)行UPDATE,否則執(zhí)行INSERT
          int saveOrUpdateIgnoreNull(E entity)保存或修改,忽略null字段,當(dāng)數(shù)據(jù)庫(kù)存在記錄執(zhí)行UPDATE,否則執(zhí)行INSERT
          int saveUnique(Collection<E> entitys)批量保存,去除重復(fù)行,通過(guò)對(duì)象是否相對(duì)判斷重復(fù)數(shù)據(jù),實(shí)體類需要實(shí)現(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語(yǔ)句set部分,key為數(shù)據(jù)庫(kù)字段名
          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ù)多個(gè)主鍵id刪除,在有邏輯刪除字段的情況下,做UPDATE操作
          int deleteByQuery(Query query)根據(jù)條件刪除,在有邏輯刪除字段的情況下,做UPDATE操作
          int forceDelete(E entity)強(qiáng)制刪除(底層根據(jù)id刪除),忽略邏輯刪除字段,執(zhí)行DELETE語(yǔ)句
          int forceDeleteById(I id)根據(jù)id強(qiáng)制刪除,忽略邏輯刪除字段,執(zhí)行DELETE語(yǔ)句
          int forceDeleteByQuery(Query query)根據(jù)條件強(qiáng)制刪除,忽略邏輯刪除字段,執(zhí)行DELETE語(yǔ)句

          Query查詢對(duì)象

          查詢姓名為張三,并且年齡為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);

          查詢注冊(cè)日期大于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);

          分頁(yè)查詢:

          Query query = new Query().eq("age",10).page(1,10); // 第一頁(yè),每頁(yè)10條數(shù)據(jù)
          List<User> users = mapper.list(query);

          查詢總記錄數(shù):

          Query query = new Query().eq("age",10).page(1,10); // 第一頁(yè),每頁(yè)10條數(shù)據(jù)
          long total = mapper.getCount(query); // 該條件下總記錄數(shù)
          • 開源地址:

          https://gitee.com/durcframework/fastmybatis

          • 相關(guān)文檔:

          https://durcframework.gitee.io/fastmybatis/#/

          【END】
          其他優(yōu)質(zhì)好項(xiàng)目
          推薦一款牛逼的接私活項(xiàng)目,微服務(wù)也能搞定!
          推薦一套開源通用后臺(tái)管理系統(tǒng)
          基于 SpringBoot + MyBatis 前后端分離實(shí)現(xiàn)的在線辦公系統(tǒng)
          分享70套 Java 項(xiàng)目+實(shí)戰(zhàn)課
          Java項(xiàng)目精選讀者群正式開發(fā),先到先得 !
          歡迎添加編程君個(gè)人微信 cxycode666  進(jìn)粉絲群或圍觀朋友圈
          瀏覽 18
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  最新天堂中文在线 | 色福利在线 | 高清欧美一区 | 亚洲精品久久久久久久久久久久久久 | 色婷婷色丁香五月天 |