文章目錄
- 一、下載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找到最新的或者不同的版本進行下載原始碼

直接下載Source code

這是解壓之后的內容:

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

二、配置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

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

選擇自己解壓的位置

匯入之后就別動了哦,
初次匯入可能會不能立馬顯示出來全部的內容,例如我的:

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

稍等片刻,如果網路沒問題的話,一會就下載好:下面這是正常的界面,可以看到1號位置的進度條沒了,就可以了,
如果你的maven下載的慢,那么可能需要配置一下maven的阿里云倉庫地址或者網易的等等,自行百度即可,或者參考我寫的maven環境的配置,

四、IDEA匯入Mybatis依賴的專案

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

(二)再編譯Mybatis原始碼
1、編譯之先關閉代碼的檢查


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

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

4、編譯

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

就代表編譯成功了,
六、使用IDEA創建maven多模塊專案并使用Mybatis原始碼
(一)初始配置
New Project

輸入專案的名字

這樣就創建了一個maven專案

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


還剩下:

然后在pom檔案添加:
<packaging>pom</packaging>

(二)創建一個SpringBoot的Model

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


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

Finish


創建成功的:

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

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、啟動測驗
如果直接啟動的話,會出現:

原因是我們引入的Mybatis依賴,并沒有去配置JDBC驅動,資料庫賬號等,
解決辦法:pom檔案暫時注釋掉Mybatis的依賴
別忘記重繪哦,

再次啟動:

出現上圖所示的結果,就啟動成功啦,
3、訪問測驗

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

選上之前的專案目錄即可


下面這是成功的界面:

七、測驗編譯后的Mybatis是否正常可用
整個目錄結構如下:

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

具體步驟如下:

選擇自己編譯后的mybatis專案:

出現如下圖所示的就完事了:

測驗是否依賴成功:

**
(二)創建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);
}
}
(八)測驗
如果能正常的讀取資料庫的資料,說明成功了:

八、可能遇到的問題總結
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>

這次你學廢了嗎?
這次你學廢了嗎?
這次你學廢了嗎?
這次你學廢了嗎?
關注我,繼續學,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/275454.html
標籤:java
上一篇:day2 javaee的入門知識
