<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      MyBatis-Plus筆記

       

      http://www.rzrgm.cn/aland-1415/p/13019435.html

      一、概要

      1、MyBatis-Plus是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變。
      2、支持的數據庫:mysql 、 mariadb 、 oracle 、 db2 、 h2 、 hsql 、 sqlite 、 postgresql 、 sqlserve。
      3、Maven依賴:

      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus</artifactId>
          <version>3.3.2</version>
      </dependency>

      Sprinboot的可使用

      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>3.2.0</version>
      </dependency>

       

      二、Helloworld(Springboot, From 官方文檔)

      1、 在 Spring Boot 啟動類中添加 @MapperScan 注解,掃描 Mapper 文件夾:

       
      @SpringBootApplication
      @MapperScan("mybatisplus.springboot.mapper")
      public class App 
      {
          public static void main( String[] args )
          {
              SpringApplication.run(App.class, args);
          }
      }
       

      2、 編寫Mapper類繼承BaseMapper

       
      import com.baomidou.mybatisplus.core.mapper.BaseMapper;
      import mybatisplus.springboot.entity.UserPO;
      
      public interface UserMapper extends BaseMapper<UserPO>{
      
      }
       

      3、 通過id查詢User信息

      userMapper.selectById(1);

       

      三、相關注解 

       
      @TableName    表名注解
      @TableId    主鍵注解
      @TableField    字段注解(非主鍵)
          屬性    描述
          value    數據庫字段名
          el    映射為原生 #{ ... } 邏輯,相當于寫在 xml 里的 #{ ... } 部分
          exist    是否為數據庫表字段,默認值為true
          condition    字段 where 實體查詢比較條件,有值設置則按設置的值為準,沒有則為默認全局的 %s=#{%s},參考
          update    字段 update set 部分注入, 例如:update="%s+1":表示更新時會set version=version+1(該屬性優先級高于 el 屬性)
          insertStrategy    舉例:NOT_NULL: insert into table_a(<if test="columnProperty != null">column</if>) values (<if test="columnProperty != null">#{columnProperty}</if>)
          updateStrategy    舉例:IGNORED: update table_a set column=#{columnProperty}
          whereStrategy    舉例:NOT_EMPTY: where <if test="columnProperty != null and columnProperty!=''">column=#{columnProperty}</if>
          fill    字段自動填充策略
          select    是否進行 select 查詢
          keepGlobalFormat    是否保持使用全局的 format 進行處理
          jdbcType    JDBC類型 (該默認值不代表會按照該值生效)
          typeHandler    類型處理器 (該默認值不代表會按照該值生效)
          numericScale    指定小數點后保留的位數
      
      @Version    樂觀鎖注解
      @EnumValue    通枚舉類注解(注解在枚舉字段上)
      @TableLogic    表字段邏輯處理注解(邏輯刪除)
      @SqlParser    租戶注解,支持method上以及mapper接口上
       

       

      四、Mapper CRUD 接口

      BaseMapper接口,為 Mybatis-Plus 啟動時自動解析實體表關系映射轉換為 Mybatis 內部對象注入容器

       
      Insert
      // 插入一條記錄
      int insert(T entity);
      
      Delete
      // 根據 entity 條件,刪除記錄
      int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
      // 刪除(根據ID 批量刪除)
      int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
      // 根據 ID 刪除
      int deleteById(Serializable id);
      // 根據 columnMap 條件,刪除記錄
      int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
      
      Update
      // 根據 whereEntity 條件,更新記錄
      int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
      // 根據 ID 修改
      int updateById(@Param(Constants.ENTITY) T entity);
      
      Select
      // 根據 ID 查詢
      T selectById(Serializable id);
      // 根據 entity 條件,查詢一條記錄
      T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
      
      // 查詢(根據ID 批量查詢)
      List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
      // 根據 entity 條件,查詢全部記錄
      List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
      // 查詢(根據 columnMap 條件)
      List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
      // 根據 Wrapper 條件,查詢全部記錄
      List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
      // 根據 Wrapper 條件,查詢全部記錄。注意: 只返回第一個字段的值
      List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
      
      // 根據 entity 條件,查詢全部記錄(并翻頁)
      IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
      // 根據 Wrapper 條件,查詢全部記錄(并翻頁)
      IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
      // 根據 Wrapper 條件,查詢總記錄數
      Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
       

       

      五、Service CRUD 接口

      通用 Service CRUD 封裝IService接口,進一步封裝 CRUD 采用

       
      Save
      // 插入一條記錄(選擇字段,策略插入)
      boolean save(T entity);
      // 插入(批量)
      boolean saveBatch(Collection<T> entityList);
      // 插入(批量)
      boolean saveBatch(Collection<T> entityList, int batchSize);
      
      SaveOrUpdate
      // TableId 注解存在更新記錄,否插入一條記錄
      boolean saveOrUpdate(T entity);
      // 根據updateWrapper嘗試更新,否繼續執行saveOrUpdate(T)方法
      boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
      // 批量修改插入
      boolean saveOrUpdateBatch(Collection<T> entityList);
      // 批量修改插入
      boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
      
      Remove
      // 根據 entity 條件,刪除記錄
      boolean remove(Wrapper<T> queryWrapper);
      // 根據 ID 刪除
      boolean removeById(Serializable id);
      // 根據 columnMap 條件,刪除記錄
      boolean removeByMap(Map<String, Object> columnMap);
      // 刪除(根據ID 批量刪除)
      boolean removeByIds(Collection<? extends Serializable> idList);
      
      Update
      // 根據 UpdateWrapper 條件,更新記錄 需要設置sqlset
      boolean update(Wrapper<T> updateWrapper);
      // 根據 whereEntity 條件,更新記錄
      boolean update(T entity, Wrapper<T> updateWrapper);
      // 根據 ID 選擇修改
      boolean updateById(T entity);
      // 根據ID 批量更新
      boolean updateBatchById(Collection<T> entityList);
      // 根據ID 批量更新
      boolean updateBatchById(Collection<T> entityList, int batchSize);
      
      Get
      // 根據 ID 查詢
      T getById(Serializable id);
      // 根據 Wrapper,查詢一條記錄。結果集,如果是多個會拋出異常,隨機取一條加上限制條件 wrapper.last("LIMIT 1")
      T getOne(Wrapper<T> queryWrapper);
      // 根據 Wrapper,查詢一條記錄
      T getOne(Wrapper<T> queryWrapper, boolean throwEx);
      // 根據 Wrapper,查詢一條記錄
      Map<String, Object> getMap(Wrapper<T> queryWrapper);
      // 根據 Wrapper,查詢一條記錄
      <V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
      
      List
      // 查詢所有
      List<T> list();
      // 查詢列表
      List<T> list(Wrapper<T> queryWrapper);
      // 查詢(根據ID 批量查詢)
      Collection<T> listByIds(Collection<? extends Serializable> idList);
      // 查詢(根據 columnMap 條件)
      Collection<T> listByMap(Map<String, Object> columnMap);
      // 查詢所有列表
      List<Map<String, Object>> listMaps();
      // 查詢列表
      List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);
      // 查詢全部記錄
      List<Object> listObjs();
      // 查詢全部記錄
      <V> List<V> listObjs(Function<? super Object, V> mapper);
      // 根據 Wrapper 條件,查詢全部記錄
      List<Object> listObjs(Wrapper<T> queryWrapper);
      // 根據 Wrapper 條件,查詢全部記錄
      <V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
      
      Page
      // 無條件翻頁查詢
      IPage<T> page(IPage<T> page);
      // 翻頁查詢
      IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);
      // 無條件翻頁查詢
      IPage<Map<String, Object>> pageMaps(IPage<T> page);
      // 翻頁查詢
      IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);
      
      Count
      // 查詢總記錄數
      int count();
      // 根據 Wrapper 條件,查詢總記錄數
      int count(Wrapper<T> queryWrapper);
      
      Chain
      # query
      // 鏈式查詢 普通
      QueryChainWrapper<T> query();
      // 鏈式查詢 lambda 式。注意:不支持 Kotlin
      LambdaQueryChainWrapper<T> lambdaQuery(); 
      // 示例:
      query().eq("column", value).one();
      lambdaQuery().eq(Entity::getId, value).list();
      
      # update
      // 鏈式更改 普通
      UpdateChainWrapper<T> update();
      // 鏈式更改 lambda 式。注意:不支持 Kotlin 
      LambdaUpdateChainWrapper<T> lambdaUpdate();
      // 示例:
      update().eq("column", value).remove();
      lambdaUpdate().eq(Entity::getId, value).update(entity);
       

       

      六、AbstractWrapper

      用于生成 sql 的 where 條件, QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper)為實現類
      主要內容:

       
      allEq     全部eq(或個別isNull)
      eq        等于 =
      ne        不等于 <>
      gt        大于 >
      ge        大于等于 >=
      lt        小于 <
      le        小于等于 <=
      between   BETWEEN 值1 AND 值2
      notBetween     NOT BETWEEN 值1 AND 值2
      like           LIKE '%值%'
      notLike        NOT LIKE '%值%'
      likeLeft       LIKE '%值'
      likeRight      LIKE '值%'
      isNull         字段 IS NULL
      isNotNull      字段 IS NOT NULL
      in             字段 IN (value.get(0), value.get(1), ...)
      notIn          字段 NOT IN (value.get(0), value.get(1), ...)
      inSql          字段 IN ( sql語句 )
      notInSql       字段 NOT IN ( sql語句 )
      groupBy        分組:GROUP BY 字段, ...
      orderByAsc     ORDER BY 字段, ... ASC
      orderByDesc    排序:ORDER BY 字段, ... DESC
      orderBy        排序:ORDER BY 字段, ...
      having         HAVING ( sql語句 )
      or             拼接 OR
      and    AND     嵌套
      nested         正常嵌套 不帶 AND 或者 OR
      apply          拼接 sql
      last           無視優化規則直接拼接到 sql 的最后,多次調用以最后一次為準 有sql注入的風險,請謹慎使用,limit就只能通過last實現
      exists         拼接 EXISTS ( sql語句 )
      notExists      拼接 NOT EXISTS ( sql語句 )
       

       

      七、使用示例

      1、通過id查詢

      UserPO user1 = userMapper.selectById(3);

      2、自定義條件

      userMapper.selectOne(Wrappers.<UserPO>lambdaQuery()
                      .eq(UserPO::getId, 5)
                      .like(true, UserPO::getUsername, 4));

      3、分頁:

      需要增加一個配置

       
      @Configuration
      public class DataBaseConfig {
      
          @Bean
          public PaginationInterceptor paginationInterceptor() {
              PaginationInterceptor page = new PaginationInterceptor();
              page.setDialectType("mysql");
              return page;
          }
      }
      復制代碼

      然后可以直接使用BaseMapper的selectPage返回分頁數據;

      IPage<UserPO> user3 = userMapper.selectPage(new Page<UserPO>(), null);

      4、更多聯表查詢需要使用xml

       

      八、多數據源配置

      1、 引用依賴

      <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>2.5.7</version>
      </dependency>

      2、 配置文件

       
      #多數據源
      #設置默認的數據源或者數據源組,默認值即為master
      spring.datasource.dynamic.primary =master
      #設置嚴格模式,默認false不啟動. 啟動后在未匹配到指定數據源時候回拋出異常,不啟動會使用默認數據源.
      spring.datasource.dynamic.strict=false
      spring.datasource.dynamic.datasource.master.url=jdbc:mysql://localhost:5711/dba_test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
      spring.datasource.dynamic.datasource.master.username=username
      spring.datasource.dynamic.datasource.master.password=pwd
      spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
      
      spring.datasource.dynamic.datasource.slave_name.url=jdbc:mysql://localhost:5711/dfatp?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
      spring.datasource.dynamic.datasource.slave_name.username=username
      spring.datasource.dynamic.datasource.slave_name.password=pwd
      spring.datasource.dynamic.datasource.slave_name.driver-class-name=com.mysql.cj.jdbc.Driver
       

      3、 在service使用@DS 切換數據源

      @Service
      @DS("slave_name")//多數據源數據來源設置
      public class UserServiceImpl extends ServiceImpl<UserMapper, UserPO> implements IUserService {
      
      }

      附:如果啟動報錯nested exception is java.lang.NoClassDefFoundError: org/springframework/boot/actuate/health/OrderedHealthAggregator

      需添加添加依賴:

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-actuator</artifactId>
      </dependency>

       

      posted @ 2023-01-13 13:52  Daniel_Lu  閱讀(265)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产午夜精品久久一二区| 色秀网在线观看视频免费| 国产无套护士在线观看| 欧美乱大交aaaa片if| 亚洲AV成人片不卡无码| 美女黄网站人色视频免费国产 | 国产午夜精品无码一区二区| 中文字幕无码人妻aaa片| 国产睡熟迷奷系列网站| 欧美在线观看www| 男女高潮喷水在线观看| 深夜精品免费在线观看| 在国产线视频A在线视频| 亚洲一区二区约美女探花| 美日韩精品综合一区二区| 91蜜臀国产自产在线观看| 久久精品不卡一区二区| 亚洲第一无码AV无码专区| 综合激情网一区二区三区| 2021亚洲va在线va天堂va国产| 日韩大尺度一区二区三区| 亚洲aⅴ男人的天堂在线观看 | 国产福利深夜在线观看| 亚洲熟女精品一区二区| 午夜男女爽爽影院在线| 国产网曝门亚洲综合在线| A毛片终身免费观看网站| 国产精品小视频一区二页| 欧美日韩免费专区在线观看| 色九九视频| 免费 黄 色 人成 视频 在 线 | 精选国产av精选一区二区三区| 人人爽亚洲aⅴ人人爽av人人片| 国产三级黄色片在线观看| 亚洲中文字幕一区二区| 四虎精品免费永久免费视频| 日本精品aⅴ一区二区三区| 91蜜臀国产自产在线观看| 精品 无码 国产观看| 亚洲午夜亚洲精品国产成人| 奇米影视7777狠狠狠狠色|