什麼是MyBatis
MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成數據庫中的記錄。
什麼叫持久層,簡單的來說,我們訪問一個平臺就會產生一定的數據,比如瀏覽記錄等,這些數據在服務器斷電的時候或者重啓之後就會消失,所謂的持久就是指將數據存放在數據庫中,方便後續使用。所以說MyBatis是一款持久層框架就是說它是工作在DAO層的,和數據庫打交道,MyBatis封裝了jdbc,使我們更方便更高效操作數據庫。
什麼是POJO,POJO就是一些特殊的 類 的名稱,只不過這種 類 除了 get 和set 方法就沒有其他的方法了。
創建第一個MyBatis程序
我們需要兩個依賴架包,一個是MyBatis架包,一個是jdbc
MyBatis的架包在GitHub上有。
如:https://github.com/mybatis/mybatis-3/releases
jdbc的架包在Mysql官網
如:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-installing-source.html
步驟
1,創建一個數據庫爲“test” ,然後創建一個數據表“Student”,自己添加幾條數據。
2,創建一個POJO類,取名Student。
項目結構如圖所示:
Student類:
public class Student {
private int id;
private String name;
private int age;
public Student(){ }
public Student(int id, String name, int age){
this.id = id;
this.name = name;
this.age = age;
}
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;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{ id="+id+", name='"+name+"', age="+age+"}";
}
}
3,創建一個映射文件,用於映射Student類,取名爲:StudentMapper.xml
MyBatis中,映射文件的取名一般約定爲 xxxMapper.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.entity.StudentMapper">
<!--namespace 填寫映射文件的類路徑-->
<!--id 名稱 resultType 結果集類型 parameterType 輸入類型-->
<select id="selectStudent" resultType="com.entity.Student" parameterType="int">
select * from Student where id = #{id}
</select>
</mapper>
相應的意思已經標註
其中,#{id},表示一個變量佔位符,parameterType即爲#{id}的類型。
4,創建配置文件 conf.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"/>
<dataSource type="POOLED">
<!--配置數據庫信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加載映射問價,填寫映射文件路徑-->
<mapper resource="com/entity/StudentMapper.xml"/>
</mappers>
</configuration>
其中:
<transactionManager type="JDBC"/>表示事務的提交方式
JDBC 表示利用JDBC 的方式處理事務,比如:commit,rollback,close
MANAGED 將事務交由其他組件去託管,比如:spring,jobss 。MANAGED 默認會關閉連接,即當一次sql語句執行完畢之後將關閉連接。 也可以選擇不關閉,在後面加上 <peoperty name="closeConnection" value="false" /> 即可。
<dataSource type="POOLED">表示數據源類型
UNPOOLED 傳統的jdbc模式,每次訪問數據庫,均需要打開,關閉等數據庫操作,比較消耗性能。
POOLED 使用數據庫連接池 。不嚴謹的說,數據庫連接池就是數據庫。
JNDI 從tomcat中獲取一個內置的數據庫連接池。
<environments default="development"> default 表明我們需要使用哪個數據庫環境,即我們使用名叫development的數據庫環境,是我們的本地環境。
<environment id="development"> environment標籤用於設置不用的數據庫環境,id名稱是給不同的數據庫取不同的名稱。
也就是說我們可以在conf.xml文件中配置很多<environment>標籤,可以有用於測試的數據庫,用於開發的數據庫,用於正式運行的數據庫等。MyBatis如何知道我們到底要使用哪個數據庫呢? 即通過 default="xxxxx"指定。
5,創建一個測試類 MyBatisTest
首先,只有SqlSession才能訪問數據庫,所以我們得要有SqlSession。SqlSession可以用SqlSessionFactory來創建。
因此:
5.1,將我們配置的conf.xml導入數據流中。
5.2,實例化一個SqlSessionFactory對象。
5.3,用SqlSessionFactory對象實例化一個SqlSession對象。
5.4,通過SqlSession對象的selectOne()方法,訪問數據庫。
SqlSession對象的很多方法的可以通過IDEA的提示看得到
selectOne() 有兩個參數
第一個參數 statement 是映射文件的路徑加上sql語句的id 這樣即可唯一識別一個sql語句。
第二個參數是傳入#{id}的值。
selectOne的返回類型也有說明,在它的映射文件StudentMapper.xml中,resultType即指明瞭返回值的類型。
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 TestMyBatis {
public static void main(String[] args) throws IOException {
//加載MyBatis配置文件,訪問數據庫
Reader reader = Resources.getResourceAsReader("conf.xml");
//SqlSessionFactory - connection
//可以通過build的第二個值強行修改數據庫環境
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//session - connection
SqlSession session = sessionFactory.openSession();
String statement = "com.entity.StudentMapper.selectStudent";
Student student = session.selectOne(statement,2);
System.out.println(student);
session.close();
}
}
運行結果如下:
至此第一個MyBatis項目完成。