用2018年最新版IDEA和mybatis配置mybatis,因為在網上找了大半天沒有找到合適我這個新手的資料,總是跑不起來,各種報錯,所以現在詳細記錄下一個超簡單的mybatis專案,這是從建立檔案到找到第一條的資料的過程,貼上程式碼,主要是一些在網上很難搜到的新人不知道的細節,用以方便自己和新人查漏補缺。
這是github地址,可以直觀地看目錄結構:github.com/qylcx7758/I…
一、在網上很多大多的檔案結構是這種,這是用maven建立的webapp專案,實際上單純的跑第一個專案根本不需要webapp,而且其中的POJO檔案和resource資料夾都不是自動生成,而是自己建立的。
(坑1:這也令我困惑了很久,怎麼找不到網上說的這種檔案結構,下面是具體的檔案介紹)
二、建立專案模板:maven+quickstart
2.1
坑2:java版本不要用jdk9以上的版本,一開始我用的jdk10就報錯,至於如何在IEDA裡面jdk切換成其他版本,百度就行,網上有解決辦法;quickstart和webapp都可以,我這裡用的是quickstart模板。
坑3:建立專案名不要有破折號,不然會導致之後檔案內建立不了Class類)。
2.2 maven的配置,都一樣,網上很多maven的教程。
三、初始配置
3.1 在pom.xml檔案內新增Mysql驅動和Mybatis依賴,然後點選右下角的import。
<
dependency>
<
groupId>
mysql<
/groupId>
<
artifactId>
mysql-connector-java<
/artifactId>
<
version>
6.0.6<
/version>
<
/dependency>
<
!-- ********************** Mybatis依賴 ********************** -->
<
dependency>
<
groupId>
org.mybatis<
/groupId>
<
artifactId>
mybatis<
/artifactId>
<
version>
3.4.4<
/version>
<
/dependency>
複製程式碼
3.2 此時的初始檔案結構如下,csdnMybatis這是我的專案名,這個專案結構都是自動生成的。
3.3 建立resource資料夾,注意與java資料夾同級,並設定為Resources Root(意思大概是讓外面的java檔案能夠訪問到裡面的資源)
附:關於resource配置資訊一不小心踩中其中某個坑,就會報Exception in thread “main” org.apache.ibatis……的錯誤。
(坑4:這個resource資料夾是自己建立的,而且要自己設定許可權為Resourcr Root,不然之後程式碼會訪問不到xml配置檔案,報錯)
四、以上幾乎是固定的,下面是配置檔案資訊,書寫resource資料夾內檔案資訊
4.1 在resource資料夾裡面建立兩個xml檔案,此時檔案結構如下:
4.2 在Mybatis-config這個mybatis配置檔案下,寫下如下程式碼:
<
?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>
<
settings>
<
!--當返回行的所有列都是空時,MyBatis預設返回null-->
<
setting name="returnInstanceForEmptyRow" value="true"/>
<
/settings>
<
environments default="development">
<
environment id="development">
<
!--使用了 JDBC 的提交和回滾設定,它依賴於從資料來源得到的連線來管理事務作用域-->
<
transactionManager type="JDBC"/>
<
!--使用資料池,複用例項-->
<
dataSource type="POOLED">
<
!--<
property name="driver" value="com.mysql.jdbc.Driver"/>
-->
<
property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<
property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8"/>
<
property name="username" value="root"/>
<
property name="password" value="admin"/>
<
/dataSource>
<
/environment>
<
/environments>
<
mappers>
<
mapper resource="TableDAO.xml">
<
/mapper>
<
/mappers>
<
/configuration>
複製程式碼
這裡有四個需要注意的地方,
坑5:第一個標記好像是因為mysql版本太新了,需要將vaule=”com.mysql.jdbc.Driver”改成”com.mysql.jdbc.Driver”,不然雖然同樣有結果,但會報紅:
第二個標記 test 代表了使用者的的資料庫,第三個標記分別是使用者名稱和密碼,
坑6:第四個標記對應了剛剛建立的TableDAO.xml檔案。
4.3 在TableDAO.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="csdnMybatis">
<
select id="getWebsiteById" resultType="csdnMybatis.Twebsites">
SELECT * FROM websites WHERE id = #{id
};
<
/select>
<
/mapper>
複製程式碼
這只是一個簡單的搜尋語句,這裡也有好多坑,網上寫法太多了,但在這種環境下,我只實驗出了我這種寫法正確,有四個需要注意的地方,之後會用到,在我的例子裡面直接這樣子寫:
坑7: namespace=”csdnMybatis”對應之後需要執行的檔案(TestMybatis–之後建立的)所在的資料夾;(如果檔案更深,可能就需要多層結構,但本示例不需要)
坑8: resultType=“csdnMybatis.Twebsites”對應之後建立的類名;
id=”getWebsiteById”之後會用到,SQL語句中的websites對應所搜尋的表名;
五、類檔案和主體檔案
5.1 在csdnMybatis下建立兩個檔案,位置對應4.3的寫法,此時全部的檔案結構如下:
5.2 在Twebsite檔案內,寫如下程式碼:
(不必要寫完全表的欄位名,寫幾個簡單的就行)
package csdnMybatis;
public class Twebsites {
private int id;
private String name;
public int getId(){
return id;
} public void setId(int id){this.id=id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}複製程式碼
表的內容如下,隨便一個含id和name兩個欄位的表都能用這段程式碼:
5.3 主體檔案,也就是在執行的檔案內寫如下程式碼,即可:
package csdnMybatis;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class TestMybatis {
public static void main(String[] args) throws IOException {
String resource = "Mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
Twebsites c= session.selectOne("getWebsiteById",2);
System.out.println(c.getName());
session.commit();
session.close();
}
}複製程式碼
5.4 之後可能會報錯
這就需要配置下執行路徑
執行結果,無報錯
六、新學JAVA,寫了2小時多點,這只是一個IDEA+MAVEN執行Mybatis的簡單專案,如果執行不了我上述的簡單專案或者有不對的地方,歡迎評論。關於排版,如果有需要我會重新排下。