1. 程式人生 > >java用IDEA+maven配置Mybatis全流程和碰見的坑

java用IDEA+maven配置Mybatis全流程和碰見的坑

用2018年最新版IDEA和mybatis配置mybatis,在網上找了大半天沒有找到合適我這個新手的資料,總是跑不起來,各種報錯,現在詳細記錄下一個超簡單的mybatis專案,這是從建立檔案到找到第一條的資料的過程,貼上程式碼。

一、在網上很多大多的檔案結構是這種,這是用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",不然雖然同樣有結果,但會報紅:

value="com.mysql.jdbc.Driver"  改成  value="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的簡單專案,如果執行不了我上述的簡單專案或者有不對的地方,歡迎評論。關於排版,如果有需要我會重新排下。