<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:56179|
      • 收錄網站:177815|

      IT精英團

      MyBatis框架教程「模糊查詢」

      MyBatis框架教程「模糊查詢」

      瀏覽次數:
      評論次數:
      編輯: mb5ffd6f9bd73a3
      信息來源: 51CTO博客
      更新日期: 2021-03-03 22:17:01
      摘要

      作者 | 王久一編輯 | 王久一導讀:?通過上三篇Mybatis教程文章的學習,我們已經基本掌握了環境的搭建,簡單增刪改查語句的編寫,MyBatis工具類的使用以及單元測試組件的使用??梢砸撇讲榭矗?.?MyBatis框架教程「入門起步」2.?MyBatis框架教程「實踐與工具類封裝」3.?MyBatis框架教程「工具類的使用」但是面對復雜的業務邏輯這些簡單的增刪改查是遠遠不能勝任的,這篇介紹運用

      • 正文開始
      • 相關閱讀
      • 推薦作品

      圖片

      作者 | 王久一

      編輯 | 王久一導讀:?通過上三篇Mybatis教程文章的學習,我們已經基本掌握了環境的搭建,簡單增刪改查語句的編寫,MyBatis工具類的使用以及單元測試組件的使用??梢砸撇讲榭矗?/span>

      1.?MyBatis框架教程「入門起步」

      2.?MyBatis框架教程「實踐與工具類封裝」

      3.?MyBatis框架教程「工具類的使用」

      但是面對復雜的業務邏輯這些簡單的增刪改查是遠遠不能勝任的,這篇介紹運用MyBatis進行模糊查詢,學習where,set和trim標簽的使用。

      模糊查詢

      模糊查詢是和精確查詢對應的,恰恰相反,精確查詢可以精確定位想要查詢的信息。而模糊查詢可以通過 like 關鍵字和通配符的配合實現匹配符合目標關鍵字的信息。比如:你想購買《Java核心編程》這本書,只需要在電商平臺搜索引擎鍵入:核心編程?四個字,書名含這四個字的書籍信息都會羅列出來(當然這只是一個例子,可能還需要全文檢索工具或者Elasticsearch來優化服務。)。

      1. 新建Java項目:

      圖片

      2. 導入Jar包:log4j,mybatis,mysql驅動


      3. 數據庫:

      圖片


      4. mybatis-config.xml

      <?xml version="1.0"encoding="UTF-8"?>
      <!DOCTYPE configuration
      ?PUBLIC "-//mybatis.org//DTDConfig 3.0//EN"
      ?"http://mybatis.org/dtd/mybatis-3-config.dtd">

      ?<configuration>
      ? ?<!-- 配置環境 -->
      ??<environments?default="jujidi">
      ? ?<environment?id="jujidi">
      ? ??<transactionManager?type="JDBC"></transactionManager>
      ? ? ??<dataSource?type="POOLED">
      ? ? ? ??<property?name="driver"?value="com.mysql.jdbc.Driver"/>
      ? ? ? ??<property?name="url"?value="jdbc:mysql://localhost:3306/dbname"/>
      ? ? ? ??<property?name="username"?value="root"/>
      ? ? ? ??<property?name="password"?value="root"/>
      ? ? ??</dataSource>
      ? ??</environment>
      ?</environments>
      ?<!-- 加載映射文件 -->
      ?<mappers>
      ? ?<mapper?resource="com/jujidi/test/TestMapper.xml"?/>
      ?</mappers>
      </configuration>

      這是Mybatis框架的核心配置文件,其中配置了相關環境和加載映射文件,環境中確定數據源,在數據源中配置你需要鏈接數據庫的相關信息,比如用戶名、密碼。映射文件就是你編寫SQL的xml,通過此核心配置文件進行加載關聯。

      5. User.java

      public?class?User {
      ?private?Integer userId;
      ?private?String?userName;
      ?private?String?account;
      ?private?String?pwd;
      ?private?Integer status;
      }

      注:由于篇幅限制,我們對屬性的getter,setter和tostring方法進行省略

      6. UserDao.java

      public?interface?UserDao?{
      ? ?List<User> likes(User user);
      ? ?//void update(User user);
      }

      7. MyBatisUtil.java

      public?final?class?MybatisUtil?{
      private?MybatisUtil(){}
      private?static?final String PATH =?"mybatis-config.xml";
      private?static?InputStream?is?=?null;
      private?static?SqlSessionFactory sqlSessionFactory =?null;
      static{
      ?try{
      ? ?//加載核心配置文件
      ? ?is?= Resources.getResourceAsStream(PATH);
      ? ?//創建sqlsession工廠 -->相當于connection
      ? ?sqlSessionFactory =?new?SqlSessionFactoryBuilder().build(is);
      ? ?}catch(IOException e){
      ? ? e.printStackTrace();
      ? ??throw?new?RuntimeException("加載映射文件失敗可能是你的映射文件寫錯了原因:"+e.getMessage());
      ? ?}
      ? }
      ??//獲取sqlsession -->相當于執行sql語句對象
      ??public?static?SqlSession?getSqlSession(){
      ? ??return?sqlSessionFactory.openSession();
      ? ?}
      ? ?public?static?void?closeSqlSession(SqlSession sqlSession){
      ? ??if(sqlSession!=null){
      ? ? ? sqlSession.close();
      ? ? }
      ?}
      }

      上方是一個MyBatis的工具類,根據核心配置文件創建sqlsession工廠,每一個SQL操作都要創建sqlsession工廠,我們就把創建工廠和獲取sqlsession的共同代碼提前出來,封裝成工具類,便于以后調用。

      8. MyBatisTest.java

      public?class?MybatisTest?{
      UserDao userDao =?null;

      @Before
      public?void?init(){
      ?userDao =?new?UserDaoImpl();
      }

      @Test
      public?void?likes(){
      ? User user =?new?User();
      ? user.setUserName("聚");
      ? List<User> userList = userDao.likes(user);
      ? System.out.println(userList);
      }
      }

      上方是測試類,使用?@Before和?@Test注解之前必須導入JUnit的相關Jar包,關于JUnit的介紹我們已經在前面文章講過,可以翻翻MyBatis教程系列查看。其中我們定義一個方法likes。試圖查出數據用戶表中user_name含有“聚”字的記錄。

      9. UserDaoImpl.java

      public?class?UserDaoImpl?implements?UserDao?{
      private?SqlSession sqlSession =?null;
      @Override
      public?List<User> likes(User user ) {
      ?try{
      ? ? sqlSession = MybatisUtil.getSqlSession();
      ? ??List<User> userList = sqlSession.selectList("com.jujidi.model.User.likes"?, user);
      ? ? ?return?userList;
      ? ?}catch(Exception?e){
      ? ? ? e.printStackTrace();
      ? ? ??throw?new?RuntimeException("查詢失敗");
      ? ?}finally{
      ? ? ? MybatisUtil.closeSqlSession(sqlSession);
      ? ?}
      ? }
      }

      在上方類的likes方法中使用Mybatis工具類來生成對話,并執行Mapper中的SQL語句,調用UserMapper中的id為likes的對應SQL,在映射文件Mapper中進行模糊查詢,符合條件(含有聚)的用戶都會返回。

      10. UserMapper.xml

      <?xml version="1.0"encoding="UTF-8"?>
      <!DOCTYPE mapper
      ?PUBLIC "-//mybatis.org//DTDMapper 3.0//EN"
      ?"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

      ?<mapper?namespace="com.jujidi.model.User">
      ?<sql?id="jujidi">
      ?user_name userName,user_iduserId,account,password pwd,status
      ?</sql>

      ?<select?id="likes"?parameterType="com.jujidi.model.User"resultType="com.jujidi.model.User">
      ?select?<include?refid="jujidi"></include>?from user
      ? ? where user_name like '%#{userName}%'
      ?</select>

      </mapper>

      通過上方搭建好的環境進行模糊查詢,試圖查出數據表中user_name含有“聚”字的記錄。但是我們運行后是錯誤的!為什么呢?

      記得上篇關于MyBatis教程我們說過,#{}會自動給里面的值加上單引號,所以上方錯誤語句中:'%#{userName}%'?真正查詢時其實為:'%'?聚?'%',問題就出在了標紅的單引號上面,解決方案有兩種:


      第一種方案(不建議):

      UserMapper.xml:
      <select?id="likes"?parameterType="com.jujidi.model.User"resultType="com.jujidi.model.User">

      ?select?<include refid="jujidi"></include>?from?user
      ? ??where?user_name like?#{userName}
      </select>


      紅色字體為更改的地方!

      MyBatisTest.java:

      @Test
      public?void?likes()
      {

      ? User user =?new?User();
      ??user.setUserName("%聚%");
      ? List<User> userList =userDao.likes(user);
      ? System.out.println(userList);

      }


      第二種方案:

      此時我們把MyBatis.java文件中的?user.setUserName("%聚%")重新改為:user.setUserName("聚");

      在<select>標簽中使用concat函數規避錯誤。

      UserMapper.xml

      <?xml version="1.0"encoding="UTF-8"?>
      <!DOCTYPE mapper
      ?PUBLIC "-//mybatis.org//DTDMapper 3.0//EN"
      ?"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

      <mapper?namespace="com.jujidi.model.User">

      <sql?id="jujidi">
      ?user_name userName,user_iduserId,account,password pwd,status
      </sql>

      <select?id="likes"?parameterType="com.jujidi.model.User"resultType="com.jujidi.model.User">
      ?select?<include?refid="jujidi"></include>?from user
      ? ? where user_name like?concat('%',#{userName},'%')
      </select>

      </mapper>


      第三種方案:

      相比原始的?like '%#{userName}%'?我們修改成了?'%${userName}%',由'#'變成了'$',也就是${}包括的值是不會自動加上單引號的。

      UserMapper.xml

      <?xml version="1.0"encoding="UTF-8"?>
      <!DOCTYPE mapper
      ?PUBLIC "-//mybatis.org//DTDMapper3.0//EN"
      ?"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

      <mapper?namespace="com.jujidi.model.User">

      <sql?id="jujidi">
      ? user_nameuserName,user_iduserId,account,password pwd,status
      </sql>

      <!-- 模糊查詢的第三種$ -->

      <select?id="likes2"parameterType="com.jujidi.model.User"resultType="com.jujidi.model.User">
      ?select?<include?refid="jujidi"></include>?from user
      ? where user_name like?'%${userName}%'
      </select>

      </mapper>

      通過上方三個小小的案例,想必對模糊查詢有個大體的了解了吧,接下來我們介紹關于動態模糊查詢的知識。也就是說,我想通過userName查就用userName查,想通過account查就用account查,也可以一起查。Talk is cheap ,show you the code:

      11. 動態模糊查詢

      where

      if的test屬性值如果為true,就會進行標簽里的模糊查詢,所以進行空判斷就可以實現模糊查詢:

      <?xml version="1.0"encoding="UTF-8"?>
      <!DOCTYPE mapper
      ?PUBLIC "-//mybatis.org//DTDMapper 3.0//EN"
      ?"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

      <mapper?namespace="com.jujidi.model.User">

      <sql?id="jujidi">
      ?user_name userName,user_iduserId,account,password pwd,status
      </sql>

      <select?id="likes"?parameterType="com.jujidi.model.User"resultType="com.jujidi.model.User">
      ?select?<include?refid="jujidi"></include>?from user
      ?<where>
      ??<if?test="userName !=null and userName != ''">
      ? ? and user_name like concat('%',#{userName},'%')
      ??</if>
      ??<if?test="account !=null and account != ''">
      ? ? and account like concat('%',#{account},'%')
      ??</if>
      ?</where>
      </select>

      </mapper>

      上面的代碼:有一個<if>成立了就會插入where的關鍵字。where?元素只會在至少有一個子元素的條件返回 SQL 子句的情況下才去插入"WHERE"子句(插入where關鍵字),而且若語句的開頭為"AND"或"OR",where?元素也會將它們去除多余的"AND"或"OR"。

      trim

      ?trim標簽是比較靈活的標簽,可以用來實現where:

      <?xml version="1.0"encoding="UTF-8"?>
      <!DOCTYPE mapper
      ?PUBLIC "-//mybatis.org//DTDMapper 3.0//EN"
      ?"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

      <mapper?namespace="com.jujidi.model.User">

      <sql?id="jujidi">
      ?user_name userName,user_iduserId,account,password pwd,status
      </sql>
      <!-- trim實現where-->
      <select?id="likes3"?parameterType="com.jujidi.model.User"resultType="com.jujidi.model.User">
      ?select?<include?refid="jujidi"></include>?from user
      ??<trim?prefix="where"?prefixOverrides="and |or ">

      ? ?<if?test="userName !=null and userName != ''">
      ? ? ?and user_name like concat('%',#{userName},'%')
      ? ?</if>
      ? ?<if?test="account !=null and account != ''">
      ? ? ?and account like concat('%',#{account},'%')
      ? ?</if>

      ??</trim>
      ?</select>
      </mapper>

      prefixOverrides?屬性會忽略通過管道分隔的文本序列(注意此例中的空格也是必要的)。它的作用是移除所有指定在?prefixOverrides?屬性中的內容,并且插入?prefix?屬性中指定的內容。

      prefix里面的值替代?prefixOverrides?里面的東西 如果是 and user_name = 'xxx ' and account = 'xxx'會把第一個?and 替代為where,即:where?user_name = ''xxx and account = 'xxx'?。

      為什么替換的是第一個?and 二而第二個不替換呢?這里是?prefixOverrides ,prefix是前綴的意思,故替換第一個 and 使用?prefix 里面的值替代。


      set??

      通過上面案例可以把動態模糊查詢的知識點解決了,學習了Where、Trim標簽后,我們順道學習一下set標簽,為了理解set標簽的作用,我們寫一個沒有set標簽的語句:

      UserMapper.xml

      <?xml version="1.0"encoding="UTF-8"?>
      <!DOCTYPE mapper
      ?PUBLIC "-//mybatis.org//DTDMapper 3.0//EN"
      ?"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

      <mapper?namespace="com.jujidi.model.User">
      <sql?id="jujidi">
      ?user_name userName,user_iduserId,account,password pwd,status
      </sql>

      <update?id="update"?parameterType="com.jujidi.model.User">
      ?update user set
      ? ?<if?test="userName !=null and userName != ''">
      ? ? user_name = #{userName},
      ? ?</if>
      ? ?<if?test="account !=null and account != ''">
      ? ? ?account=#{account}
      ? ?</if>
      ? ? where user_id=#{userId}
      </update>
      </mapper>

      UserDao.java

      public?interface?UserDao?{

      ? ?//List<User> likes(User user);
      ? ?void?update(User user);

      }

      UserDaoImpl.java

      public?class?UserDaoImpl?implements?UserDao?{
      private?SqlSession sqlSession =?null;

      @Override
      publicvoid?update(User user )?{
      ?try{
      ? ?sqlSession = MybatisUtil.getSqlSession();
      ? ?sqlSession.update("com.jujidi.model.User.update",user);
      ? ?sqlSession.commit();
      ? }catch(Exception e){
      ? ? e.printStackTrace();
      ? ??throw?new?RuntimeException("更改失敗");
      ? }finally{
      ? ? MybatisUtil.closeSqlSession(sqlSession);
      ? } ? ? ?
      ?}
      }

      MyBatisTest.java

      public?class?MybatisTest?{
      UserDao userDao =?null;

      @Before
      public?void?init(){
      ?userDao =?new?UserDaoImpl();
      }

      @Test
      public?void?update(){
      ?User user =?new?User();
      ?user.setUserName("聚集地");
      ?user.setAccount("as");
      ?user.setUserId(4);
      ?userDao.update(user);
      }
      }


      結果:運行后成功插入了一條語句!

      我們做適當改動,便會拋出異常報錯,然后引出set元素使用:

      MyBatisTest.java

      public?class?MybatisTest?{
      UserDao userDao =?null;

      @Before
      public?void?init(){
      ?userDao =?new?UserDaoImpl();
      }

      @Test
      public?void?update(){
      ?User user =?new?User();
      ?user.setUserName("聚集地");
      ?//user.setAccount("as");
      ?user.setUserId(4);
      ?userDao.update(user);
      ?}
      }

      只修改userName,不修改account運行后會報錯,控制臺打印的sql語句

      圖片

      上圖紅色圓圈部分,多了一個逗號照成了報錯。去掉這個逗號我們可以使用set標簽實現:

      <?xml version="1.0"encoding="UTF-8"?>
      <!DOCTYPE mapper
      ? ?PUBLIC "-//mybatis.org//DTDMapper 3.0//EN"
      ? ?"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

      <mapper?namespace="com.jujidi.model.User">

      <sql?id="jujidi">
      ? user_name userName,user_iduserId,account,password pwd,status
      </sql>???

      <update?id="update"?parameterType="com.jujidi.model.User">
      ? update user?
      ? ?<set>
      ? ? ?<if?test="userName !=null and userName != ''">
      ? ? ?user_name =#{userName},
      ? ? ?</if>
      ? ? ?<if?test="account !=null and account != ''">
      ? ? ?account=#{account}
      ? ? ?</if>
      ? ??</set>
      ? ? where user_id=#{userId}
      ?</update>

      </mapper>

      set?元素會動態前置 SET 關鍵字,同時也會刪掉無關的逗號,因為用了條件語句之后很可能就會在生成的 SQL 語句的后面留下這些逗號。(因為用的是"if"元素,若最后一個"if"沒有匹配上而前面的匹配上,SQL 語句的最后就會有一個逗號遺留)

      總結

      這篇文章有點長,我們講解了模糊查詢,動態模糊查詢,并且學習了where,set,trim標簽的使用。代碼也比較多,閱讀起來可能有些費勁。若理清私聊,多看幾遍,我認為還是可以鞏固基礎,有所進步。



      標簽:java
      Linux養成計劃(六)
      ? 上一篇 2021-03-03
      Linux養成計劃(七)
      下一篇 ? 2021-03-03
      • 談如何設計未來的倉庫建筑
        4閱讀 0條評論 個贊
        編輯:數據社全文共3758個字,建議10分鐘閱讀大家好,我是峰哥,夏天已經來了,小麥馬上要豐收了,今天分析一篇關于未來數倉架構發展方向的文章。Linked大佬JayKreps曾發表過一篇博客,簡單闡……
      • 高并發服務的幾點優化經驗
        0閱讀 0條評論 個贊
        前言:如何優化高并發服務,這里指的是qps在20萬以上的在線服務,注意不是離線服務,在線服務會存在哪些挑戰呢?①無法做離線緩存,所有的數據都是實時讀的②大量的請求會打到線上服務,對于服務的響應時間要……
      • Java處理異常的9個最佳實踐 你做得對嗎?
        1閱讀 0條評論 個贊
        原文:https://dzone.com/articles/9-best-practices-to-handle-exceptions-in-java譯者:颯然Hang譯文:http://www.r……
      • 提高Java字符串編碼和解碼性能的技巧
        1閱讀 0條評論 個贊
        1常見字符串編碼●常見的字符串編碼有:LATIN1只能保存ASCII字符,又稱ISO-8859-1。UTF-8變長字節編碼,一個字符需要使用1個、2個或者3個byte表示。由于中文通常需要3個字節……
      • Linux預定任務調度(crontab) 好實用!
        0閱讀 0條評論 個贊
        概述crontab命令用于設置周期性被執行的指令。該命令從標準輸入設備讀取指令,并將其存放于“crontab”文件中,以供之后讀取和執行??梢允褂胏rontab定時處理離線任務,比如每天凌晨2點更新數……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • 一天一技能:協調與多流程的完美結合
        7閱讀 0條評論 個贊
        我們知道,協程本質上是單線程單進程,通過充分利用IO等待時間來實現高并發。在IO等待時間之外的代碼,還是串行運行的。因此,如果協程非常多,多少每個協程內部的串行代碼運行時間超過了IO請求的等待時間,那……
      • 納尼?數據也是立法的嗎?
        1閱讀 0條評論 個贊
        編輯:彭文華來源:大數據架構師(ID:bigdata_arch)彭友們好,我是老彭。最近忙瘋了,天天給客戶寫方案,都沒時間寫文章了。趁著五一假期,跟彭友們嘮嘮新鮮事兒。今天這個,真的是顛覆我的認知,……
      • 一行Python代碼實現程序并行
        1閱讀 0條評論 個贊
        Python在程序并行化方面多少有些聲名狼藉。撇開技術上的問題,例如線程的實現和GIL,我覺得錯誤的教學指導才是主要問題。常見的經典Python多線程、多進程教程多顯得偏"重"。而且往往隔靴搔……
      • 內存數據庫如何利用內存?
        1閱讀 0條評論 個贊
        與以磁盤存儲為主的普通數據庫相比,內存數據庫的數據訪問速度可以高出幾個數量級,能大幅提高運算性能,更適合高并發、低延時的業務場景。不過,當前大部分內存數據庫仍然采用SQL模型,而SQL缺乏一些……
      • 7 種提升Spring Boot吞吐量神技!
        0閱讀 0條評論 個贊
        一、異步執行實現方式二種:1.使用異步注解@aysnc、啟動類:添加@EnableAsync注解2.JDK8本身有一個非常好用的Future類——CompletableFuture@AllArg……
      • JD.COM面試問題:ElasticSearch深度分頁解決方案
        0閱讀 0條評論 個贊
        以下文章來源于月伴飛魚,作者日常加油站前言Elasticsearch是一個實時的分布式搜索與分析引擎,在使用過程中,有一些典型的使用場景,比如分頁、遍歷等。在使用關系型數據庫中,我們被告知要注意甚至……
      • MySQL 5.7 和 8.0 幾處細節上的差異
        9閱讀 0條評論 個贊
        MySQL8.0相對于MySQL5.7,有很多新特性,比如:快速加列、原子DDL、不可見索引、額外端口、角色管理等。這一節內容,就不講這些新特性了,只來聊聊最近在工作學習過程中遇到的幾處細節……
      • Python極簡編碼規范
        1閱讀 0條評論 個贊
        本文是閱讀《PythonCodingRule》之后總結的最為精華及簡單的編碼規范,根據每個人不同喜好有些地方會有不同的選擇,我只是做了對自己來說最簡單易行的選擇,僅供大家參考。1、重要原則a.保持……
      • MySQL查詢語句的limit offset是如何實現的?
        1閱讀 0條評論 個贊
        在寫select語句的時候,使用limit,offset可能就像是我們吃飯喝水一樣自然了。剛開始工作的時候也經常聽前輩們教導:使用limit,offset,當offset變大的時候執……
      • MySQL支持哈希索引嗎?(收藏)
        1閱讀 0條評論 個贊
        經常有朋友問,MySQL的InnoDB到底支不支持哈希索引?對于InnoDB的哈希索引,確切的應該這么說:(1)InnoDB用戶無法手動創建哈希索引,這一層上說,InnoDB確實不支持哈希索引;(2)……
      • 數據倉庫實踐:總線矩陣體系結構的設計
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-云祁的數據江湖,作者云祁如何設計一套切實可行的數據倉庫呢?我們要明白,對于數據倉庫的設計是不能完全依賴于業務的需求,但往往又必須要服務于業務的價值。因此,在構建數據倉庫前,我們……
      • Linux的10個最危險的命令
        0閱讀 0條評論 個贊
        rm-rf命令該命令可能導致不可恢復的系統崩壞。>rm-rf/#強制刪除根目錄下所有東西。>rm-rf*#強制刪除當前目錄的所有文件。>rm-rf.#強制刪除當前文件夾及其子文件夾。執行rm-r……
      • 基礎鞏固——至少需要多少行代碼才能實現深度復制?
        1閱讀 0條評論 個贊
        前言深度克?。ㄉ羁截悾┮恢倍际浅?、中級前端面試中經常被問到的題目,網上介紹的實現方式也都各有千秋,大體可以概括為三種方式:JSON.stringify+JSON.parse,這個很好理解;全量判斷類……
      • 關于數據中心最強科普 一個就給你完整了解!
        1閱讀 0條評論 個贊
        數據中心,英文縮寫叫IDC,也就是InternetDataCenter(互聯網數據中心)。之所以不太直接稱之為“DC”,主要是為了避免和直流電(DirectCurrent)混淆。而且,現在的數……
      • 說說春云的全鏈路灰度發布方案~
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-碼猿技術專欄,作者不才陳某大家好實際生產中如有需求變更,并不會直接更新線上服務,最通常的做法便是:切出線上的小部分流量進行體驗測試,經過測試后無問題則全面的上線。這樣做的好處也是……
      • Java處理異常的9個最佳實踐 你做得對嗎?
        1閱讀 0條評論 個贊
        原文:https://dzone.com/articles/9-best-practices-to-handle-exceptions-in-java譯者:颯然Hang譯文:http://www.r……
      • 教你如何在Linux中生成復雜的密碼 并檢查密碼強度
        0閱讀 0條評論 個贊
        在本教程中,我們將討論如何生成復雜密碼并且檢查密碼強度。生成復雜的密碼強密碼應由字母、數字和符號的混合組成。第二個要求是不要使用已知單詞、出生日期或姓名,因為很容易受到字典攻擊。密碼應該包含多少個字符……
      • Linux中的交互式進程查看命令htop
        1閱讀 0條評論 個贊
        htop界面展示HtopLinux進程監控工具“Htop是一個用于Linux/類Unix系統的交互式實時進程監控應用程序,也是top命的替代品,它是所有Linux操作系統上預裝的默……
      • 如何用10行bash shell腳本監控Linux?
        1閱讀 0條評論 個贊
        http://985.so/xbtd子沐愛掃地(譯)監控我們的環境對于服務器運維來說至關重要,尤其是在部署新的應用程序時。如今,公司每天都使用開源解決方案來監控系統資源。但是,當出于測試的目的來監控……
      • Linux最常用的命令:解決95%以上的問題
        1閱讀 0條評論 個贊
        Linux是目前應用最廣泛的服務器操作系統,基于Unix,開源免費,由于系統的穩定性和安全性,市場占有率很高,幾乎成為程序代碼運行的最佳系統環境。linux不僅可以長時間的運行我們編寫的程序代碼,還可……
      最近發布資訊
      更多
      警花高潮嗷嗷叫
      <del id="nnjnj"></del><track id="nnjnj"></track>

      <p id="nnjnj"></p>

      <address id="nnjnj"></address>

        <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

          <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>