主頁 > 後端開發 > 從頭到尾手把手教你搭建閱讀Mybatis原始碼的環境(程式員必備技能)

從頭到尾手把手教你搭建閱讀Mybatis原始碼的環境(程式員必備技能)

2021-04-13 11:02:45 後端開發

文章目錄

  • 一、下載Mybatis原始碼
  • 二、配置Maven
    • 一、簡介
      • maven是什么?
    • 二、在Windows下配置Maven環境
    • 三、下載Maven
    • 四、配置Maven環境變數
    • 五、其他注意事項
      • 1、Maven倉庫
        • 1、修改Maven的本地倉庫
        • 2、修改Maven的中央倉庫
    • 六、settings.xml檔案全部
      • 過濾掉注釋的:
      • 未過濾注釋的:
  • 三、IDEA匯入Mybatis原始碼
  • 四、IDEA匯入Mybatis依賴的專案
  • 五、編譯專案
    • (一)先編譯Mybatis依賴的專案
    • (二)再編譯Mybatis原始碼
      • 1、編譯之先關閉代碼的檢查
      • 2、注釋掉一個maven-pdf-plugin的依賴
      • 3、修改依賴的mybatis-parent的pom檔案位置
      • 4、編譯
  • 六、使用IDEA創建maven多模塊專案并使用Mybatis原始碼
    • (一)初始配置
    • (二)創建一個SpringBoot的Model
      • 1、在啟動之前創建測驗介面
      • 2、啟動測驗
      • 3、訪問測驗
    • (三)匯入編譯好的Mybatis原始碼為此專案的一個Module
  • 七、測驗編譯后的Mybatis是否正常可用
    • (一) 配置專案依賴
    • (二)創建Mysql資料表
    • (三)創建Student物件類
    • (四)創建StudentMapper介面
    • (五)創建StudentMapper.xml檔案
    • (六)創建mybatis-config.xml檔案
    • (七)創建測驗程式
    • (八)測驗
  • 八、可能遇到的問題總結
    • 1、Cannot enable lazy loading because Javassist is not available
  • 2、NoClassDefFoundError: ognl/PropertyAccessor
  • 這次你學廢了嗎?

先放上編譯好的mybatis:
https://github.com/truedei/mybatis-notes

自己下載哦,還有注解,

一、下載Mybatis原始碼

Mybatis的GitHub開源地址:
https://github.com/mybatis/mybatis-3/

進入github官網后打開Releases,可以通過Releases找到最新的或者不同的版本進行下載原始碼
image.png

直接下載Source code
image.png

這是解壓之后的內容:
image.png

下載Mybatis需要一個依賴的專案:
https://github.com/mybatis/parent/releases

image.png

二、配置Maven

一、簡介

maven是什么?

二、在Windows下配置Maven環境

Maven 3.3+需要JDK 1.7或更高版本才能執行

想要安裝Maven需要下載maven壓縮包,無需安裝,在windows下只需要配置windows環境變數,

言歸正傳

開始!

本次教程我所使用的各個版本號(希望能和我一樣):

1、JDK 1.8


2、Maven3.5.3 (自己下載最新版一般都沒有問題)


3、win10  64位作業系統

JDK環境,Maven環境省略,這里假設你已經會了,

我使用的版本號:

C:\Users\zhenghui>java -version
java version "1.8.0_172-ea"
Java(TM) SE Runtime Environment (build 1.8.0_172-ea-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b03, mixed mode)

C:\Users\zhenghui>
C:\Users\zhenghui>
C:\Users\zhenghui>mvn -version
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T03:49:05+08:00)
Maven home: E:\soft\apache-maven-3.5.3\apache-maven-3.5.3\bin\..
Java version: 1.8.0_172-ea, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_172\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

C:\Users\zhenghui>

三、下載Maven

Maven的官網:

https://maven.apache.org/

強烈推薦一定要到官網下載,又不花錢對吧,英語不好不要緊,有道隨時都在呢

把下載好的壓縮檔案解壓出來

最好放到你自己的安裝目錄下

E:\soft\apache-maven-3.5.3\apache-maven-3.5.3

四、配置Maven環境變數

右鍵 “計算機”,選擇 “屬性”,之后點擊 “高級系統設定”,點擊"環境變數",來設定環境變數,有以下系統變數需要配置:

1、新建系統變數 MAVEN_HOME,變數值:E:\soft\apache-maven-3.5.3\apache-maven-3.5.3

2、編輯系統變數 Path,添加變數值:%MAVEN_HOME%\bin

測驗是否成功

Microsoft Windows [版本 10.0.17134.648]
(c) 2018 Microsoft Corporation,保留所有權利,

C:\Users\zhenghui>mvn -v
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T03:49:05+08:00)
Maven home: E:\soft\apache-maven-3.5.3\apache-maven-3.5.3\bin\..
Java version: 1.8.0_172-ea, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_172\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

C:\Users\zhenghui>

五、其他注意事項

1、Maven倉庫

在 Maven 的術語中,倉庫是一個位置(place),

Maven 倉庫是專案中依賴的第三方庫,這個庫所在的位置叫做倉庫,

在 Maven 中,任何一個依賴、插件或者專案構建的輸出,都可以稱之為構件,

Maven 倉庫能幫助我們管理構件(主要是JAR),它就是放置所有JAR檔案(WAR,ZIP,POM等等)的地方,

Maven 倉庫有三種型別:

  • 本地(local)
  • 中央(central)
  • 遠程(remote)

詳細介紹請點擊:http://www.runoob.com/maven/maven-repositories.html

1、修改Maven的本地倉庫

為什么修改:

因為本地倉庫默認在C盤,所以不建議默認在C盤,以后C盤會越來越大的,

1)、打開settings.xml檔案

2)、修改為下圖所示的:

2、修改Maven的中央倉庫

我使用的是阿里云的:

在上面打開的檔案里找到mirrors添加上就行

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
</mirrors>

六、settings.xml檔案全部

過濾掉注釋的:

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

<localRepository>E:\soft\apache-maven-3.5.3\local</localRepository>

  <pluginGroups>
   
  </pluginGroups>

  <proxies>
  
  </proxies>

  <servers>
   
  </servers>

  <mirrors>
  
    <mirror>  
      <id>aliyun</id>  
      <name>aliyun</name>  
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf> 
    </mirror>  
  </mirrors>

  <profiles>

  </profiles>

</settings>

未過濾注釋的:

<?xml version="1.0" encoding="UTF-8"?>

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<!--
 | This is the configuration file for Maven. It can be specified at two levels:
 |
 |  1. User Level. This settings.xml file provides configuration for a single user,
 |                 and is normally provided in ${user.home}/.m2/settings.xml.
 |
 |                 NOTE: This location can be overridden with the CLI option:
 |
 |                 -s /path/to/user/settings.xml
 |
 |  2. Global Level. This settings.xml file provides configuration for all Maven
 |                 users on a machine (assuming they're all using the same Maven
 |                 installation). It's normally provided in
 |                 ${maven.conf}/settings.xml.
 |
 |                 NOTE: This location can be overridden with the CLI option:
 |
 |                 -gs /path/to/global/settings.xml
 |
 | The sections in this sample file are intended to give you a running start at
 | getting the most out of your Maven installation. Where appropriate, the default
 | values (values used when the setting is not specified) are provided.
 |
 |-->
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  本地倉庫配置
  -->
<localRepository>E:\soft\apache-maven-3.5.3\local</localRepository>

  <!-- interactiveMode
   | This will determine whether maven prompts you when it needs input. If set to false,
   | maven will use a sensible default value, perhaps based on some other setting, for
   | the parameter in question.
   |
   | Default: true
  <interactiveMode>true</interactiveMode>
  -->

  <!-- offline
   | Determines whether maven should attempt to connect to the network when executing a build.
   | This will have an effect on artifact downloads, artifact deployment, and others.
   |
   | Default: false
  <offline>false</offline>
  -->

  <!-- pluginGroups
   | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
   | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
   | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
   |-->
  <pluginGroups>
    <!-- pluginGroup
     | Specifies a further group identifier to use for plugin lookup.
    <pluginGroup>com.your.plugins</pluginGroup>
    -->
  </pluginGroups>

  <!-- proxies
   | This is a list of proxies which can be used on this machine to connect to the network.
   | Unless otherwise specified (by system property or command-line switch), the first proxy
   | specification in this list marked as active will be used.
   |-->
  <proxies>
    <!-- proxy
     | Specification for one proxy, to be used in connecting to the network.
     |
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</username>
      <password>proxypass</password>
      <host>proxy.host.net</host>
      <port>80</port>
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
    -->
  </proxies>

  <!-- servers
   | This is a list of authentication profiles, keyed by the server-id used within the system.
   | Authentication profiles can be used whenever maven must make a connection to a remote server.
   |-->
  <servers>
    <!-- server
     | Specifies the authentication information to use when connecting to a particular server, identified by
     | a unique name within the system (referred to by the 'id' attribute below).
     |
     | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
     |       used together.
     |
    <server>
      <id>deploymentRepo</id>
      <username>repouser</username>
      <password>repopwd</password>
    </server>
    -->

    <!-- Another sample, using keys to authenticate.
    <server>
      <id>siteServer</id>
      <privateKey>/path/to/private/key</privateKey>
      <passphrase>optional; leave empty if not used.</passphrase>
    </server>
    -->
  </servers>

  <!-- mirrors
   | This is a list of mirrors to be used in downloading artifacts from remote repositories.
   |
   | It works like this: a POM may declare a repository to use in resolving certain artifacts.
   | However, this repository may have problems with heavy traffic at times, so people have mirrored
   | it to several places.
   |
   | That repository definition will have a unique id, so we can create a mirror reference for that
   | repository, to be used as an alternate download site. The mirror site will be the preferred
   | server for that repository.
   |-->
  <mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
     -->
    <mirror>  
      <id>aliyun</id>  
      <name>aliyun</name>  
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf> 
    </mirror>  
  </mirrors>

  <!-- profiles
   | This is a list of profiles which can be activated in a variety of ways, and which can modify
   | the build process. Profiles provided in the settings.xml are intended to provide local machine-
   | specific paths and repository locations which allow the build to work in the local environment.
   |
   | For example, if you have an integration testing plugin - like cactus - that needs to know where
   | your Tomcat instance is installed, you can provide a variable here such that the variable is
   | dereferenced during the build process to configure the cactus plugin.
   |
   | As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles
   | section of this document (settings.xml) - will be discussed later. Another way essentially
   | relies on the detection of a system property, either matching a particular value for the property,
   | or merely testing its existence. Profiles can also be activated by JDK version prefix, where a
   | value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.
   | Finally, the list of active profiles can be specified directly from the command line.
   |
   | NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact
   |       repositories, plugin repositories, and free-form properties to be used as configuration
   |       variables for plugins in the POM.
   |
   |-->
  <profiles>
    <!-- profile
     | Specifies a set of introductions to the build process, to be activated using one or more of the
     | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
     | or the command line, profiles have to have an ID that is unique.
     |
     | An encouraged best practice for profile identification is to use a consistent naming convention
     | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
     | This will make it more intuitive to understand what the set of introduced profiles is attempting
     | to accomplish, particularly when you only have a list of profile id's for debug.
     |
     | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
    <profile>
      <id>jdk-1.4</id>

      <activation>
        <jdk>1.4</jdk>
      </activation>

      <repositories>
        <repository>
          <id>jdk14</id>
          <name>Repository for JDK 1.4 builds</name>
          <url>http://www.myhost.com/maven/jdk14</url>
          <layout>default</layout>
          <snapshotPolicy>always</snapshotPolicy>
        </repository>
      </repositories>
    </profile>
    -->

    <!--
     | Here is another profile, activated by the system property 'target-env' with a value of 'dev',
     | which provides a specific path to the Tomcat instance. To use this, your plugin configuration
     | might hypothetically look like:
     |
     | ...
     | <plugin>
     |   <groupId>org.myco.myplugins</groupId>
     |   <artifactId>myplugin</artifactId>
     |
     |   <configuration>
     |     <tomcatLocation>${tomcatPath}</tomcatLocation>
     |   </configuration>
     | </plugin>
     | ...
     |
     | NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
     |       anything, you could just leave off the <value/> inside the activation-property.
     |
    <profile>
      <id>env-dev</id>

      <activation>
        <property>
          <name>target-env</name>
          <value>dev</value>
        </property>
      </activation>

      <properties>
        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
      </properties>
    </profile>
    -->
  </profiles>

  <!-- activeProfiles
   | List of profiles that are active for all builds.
   |
  <activeProfiles>
    <activeProfile>alwaysActiveProfile</activeProfile>
    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
  </activeProfiles>
  -->
</settings>

祝你學習愉快!

三、IDEA匯入Mybatis原始碼

務必提前配置好maven,可參考上面的內容,也可以參考,我寫的這篇文章:
https://blog.csdn.net/qq_17623363/article/details/88858907

打開IDEA后,點擊Open or Import
image.png

或者:如果已經打開了其他的專案,可以點擊File—>Open
image.png

選擇自己解壓的位置
image.png

匯入之后就別動了哦,

初次匯入可能會不能立馬顯示出來全部的內容,例如我的:
image.png

我們看到下面正在下載相關的maven依賴,所以不用管的,我們現在所做的就是“等待”
image.png

稍等片刻,如果網路沒問題的話,一會就下載好:下面這是正常的界面,可以看到1號位置的進度條沒了,就可以了,

如果你的maven下載的慢,那么可能需要配置一下maven的阿里云倉庫地址或者網易的等等,自行百度即可,或者參考我寫的maven環境的配置,

image.png

四、IDEA匯入Mybatis依賴的專案

image.png

五、編譯專案

(一)先編譯Mybatis依賴的專案

image.png

(二)再編譯Mybatis原始碼

1、編譯之先關閉代碼的檢查

image.png

image.png

2、注釋掉一個maven-pdf-plugin的依賴

image.png

3、修改依賴的mybatis-parent的pom檔案位置

image.png

4、編譯

image.png

編譯完成之后target目錄會有一個jar包:
image.png

就代表編譯成功了,

六、使用IDEA創建maven多模塊專案并使用Mybatis原始碼

(一)初始配置

New Project
image.png

輸入專案的名字
image.png

這樣就創建了一個maven專案
image.png

為了不造成困擾,我們把src目錄洗掉
image.png
image.png

還剩下:
image.png

然后在pom檔案添加:

 <packaging>pom</packaging>

image.png

(二)創建一個SpringBoot的Model

image.png

因為我們要創建SpringBoot專案,所以可以選擇Spring Initializr:
image.png

image.png

可以先選上Mybaits依賴、web依賴、Mysql驅動依賴:
image.png

Finish
image.png

image.png

創建成功的:
image.png

1、在啟動之前創建測驗介面

image.png

package com.truedei;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@SpringBootApplication
@RequestMapping("/truedei")
public class TruedeiApplication {

    public static void main(String[] args) {
        SpringApplication.run(TruedeiApplication.class, args);
    }


    @RequestMapping("/test1")
    @ResponseBody
    public String trueDei(){
        return "大家好";
    }
    
}

2、啟動測驗

如果直接啟動的話,會出現:
image.png
原因是我們引入的Mybatis依賴,并沒有去配置JDBC驅動,資料庫賬號等,

解決辦法:pom檔案暫時注釋掉Mybatis的依賴

別忘記重繪哦,
image.png

再次啟動:
image.png
出現上圖所示的結果,就啟動成功啦,

3、訪問測驗

image.png

(三)匯入編譯好的Mybatis原始碼為此專案的一個Module

image.png
選上之前的專案目錄即可
image.png

image.png

下面這是成功的界面:
image.png

七、測驗編譯后的Mybatis是否正常可用

整個目錄結構如下:

image.png

(一) 配置專案依賴

此時應該是專案依賴咱們編譯后的這個mybatis專案,而不是依賴maven倉庫的mybatis

image.png

具體步驟如下:
image.png

選擇自己編譯后的mybatis專案:
image.png
出現如下圖所示的就完事了:
image.png

測驗是否依賴成功:
image.png
**image.png

(二)創建Mysql資料表

-- auto-generated definition
create table student
(
    id       int auto_increment comment 'id'
        primary key,
    sno      varchar(20) null comment '學號',
    sname    varchar(10) null comment '學生姓名',
    password varchar(20) null comment '密碼',
    perms    varchar(20) null comment '權限'
);

(三)創建Student物件類

public class Student {

    private String id;
    private String sno;
    private String sname;
    private String password;

    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", sno='" + sno + '\'' +
                ", sname='" + sname + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

   //....省略get 和set方法
}

(四)創建StudentMapper介面

public interface StudentMapper {

    Student selectById(String id);

}

(五)創建StudentMapper.xml檔案

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.truedei.test1.StudentMapper">

    <select id="selectById" resultType="com.truedei.test1.Student">
      select * from student where id = #{id}
    </select>

</mapper>

(六)創建mybatis-config.xml檔案

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC">
            </transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://47.105.166.27:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
<!--        <mapper resource="mapper/StudentMapper.xml" url="" class=""/>-->
        <package name="com.truedei.test1"/>
    </mappers>
</configuration>

(七)創建測驗程式

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;

public class MyTest {

    private static SqlSessionFactory sqlSessionFactory;

    public static void main(String[] args) throws IOException{
        //1、創建SqlSessionFactory
        String resource = "mybatis-config.xml";
//        String resource = "md";
        final Reader reader = Resources.getResourceAsReader(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        reader.close();
        //2、獲取sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3、獲取mapper
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);//動態代理,代理物件

        //4、執行資料庫操作,并處理結果集
        Student goods = mapper.selectById("2");
        System.out.println(goods);
    }
}

(八)測驗

如果能正常的讀取資料庫的資料,說明成功了:
image.png

八、可能遇到的問題總結

1、Cannot enable lazy loading because Javassist is not available

出現這個的原因是javassist的依賴并沒有成功的加載,

解決辦法:

在你測驗的專案中引入即可

        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.24.1-GA</version>
        </dependency>

2、NoClassDefFoundError: ognl/PropertyAccessor

和上面javassist的情況一樣,ognl沒有加載成功

        <dependency>
            <groupId>ognl</groupId>
            <artifactId>ognl</artifactId>
            <version>3.2.10</version>
        </dependency>

image.png

這次你學廢了嗎?

這次你學廢了嗎?
這次你學廢了嗎?
這次你學廢了嗎?

關注我,繼續學,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/275454.html

標籤:java

上一篇:day2 javaee的入門知識

下一篇:Mybatis的@Param()注解導致分頁失效

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more