用2018年最新版IDEA和mybatis配置mybatis,由於在網上找了大半天沒有找到合適我這個新手的資料,老是跑不起來,各類報錯,因此如今詳細記錄下一個超簡單的mybatis項目,這是從建立文件到找到第一條的數據的過程,貼上代碼,主要是一些在網上很難搜到的新人不知道的細節,用以方便本身和新人查漏補缺。java
這是github地址,能夠直觀地看目錄結構:github.com/qylcx7758/I…mysql
1、在網上不少大多的文件結構是這種,這是用maven建立的webapp項目,實際上單純的跑第一個項目根本不須要webapp,並且其中的POJO文件和resource文件夾都不是自動生成,而是本身建立的。git
(坑1:這也令我困惑了好久,怎麼找不到網上說的這種文件結構,下面是具體的文件介紹)github
2、建立項目模板:maven+quickstartweb
2.1 sql
坑2:java版本不要用jdk9以上的版本,一開始我用的jdk10就報錯,至於如何在IEDA裏面jdk切換成其餘版本,百度就行,網上有解決辦法;quickstart和webapp均可以,我這裏用的是quickstart模板。數據庫
坑3:建立項目名不要有破折號,否則會致使以後文件內建立不了Class類)。apache
2.2 maven的配置,都同樣,網上不少maven的教程。bash
3、初始配置session
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配置文件,報錯)
4、以上幾乎是固定的,下面是配置文件信息,書寫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、類文件和主體文件
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 以後可能會報錯
這就須要配置下運行路徑
運行結果,無報錯
6、新學JAVA,寫了2小時多點,這只是一個IDEA+MAVEN運行Mybatis的簡單項目,若是運行不了我上述的簡單項目或者有不對的地方,歡迎評論。關於排版,若是有須要我會從新排下。