1. 程式人生 > 其它 >mybatis3.x入門及初步使用(1)

mybatis3.x入門及初步使用(1)

技術標籤:# springmybatis

mybatis3.x入門及初步使用

一.什麼是mybatis:

Mybatis是一個半自動化的ORM框架 ORM:將O(實體類)和R(關係表)通過M(mapper對映檔案)關聯在一起,程式設計時只需要對O進行操作,以面向物件的方式操作O,通過M將資料儲存在R中

二.mybatis的入門使用:
  1. 匯入依賴:
<!--mybaits依賴-->
 <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis<
/artifactId> <version>3.5.6</version> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.26</version> </dependency>
  1. 配置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>
    <!--配置環境資訊,可以配置多個   default設定當前使用的環境資訊-->
<environments default="my"> <!--配置單個的環境資訊 id:唯一標識,關聯上邊default--> <environment id="my"> <!--事務管理器:JDBC為使用jdk自帶的事務管理器,後期變為宣告式事務--> <transactionManager type="JDBC"></transactionManager> <!--配置資料來源 POOLED:使用mybatis自帶的資料庫連線池,後期可以變為其他資料連線池--> <dataSource type="POOLED"> <!--以下為資料來源預設配置:注意這裡的name的值,要和當前使用的資料來源裡面的屬性名保持一致 (最好進入類裡面檢視getset方法)--> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///xdclassvideo?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!--載入mapper對映檔案--> <mappers> <mapper resource="mapper/VideoDao.xml"></mapper> </mappers> </configuration>
  1. 編寫介面:
public interface VideoDao {
    //根據id查詢video
    Video selectVideoById(int id);
}
  1. 編寫mapper對映檔案:
<?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">
<!--跟標籤  namespace:可以理解為當前xml檔案的唯一標識,最好寫為對應介面的全路徑-->
<mapper namespace="com.ceh.dao.VideoDao">

    <!--查詢標籤,mybaits還提供其他的標籤,如insert、delete、uodate...相當於jdbc中的statment
    id:當前sql的唯一標識,最好和介面的抽象方法名一致
    resultType:返回值型別,這個屬性只適合單表且pojo的屬性名和表的列名一致時使用(後期還有一個resultMap)
    -->
    <!--Video selectVideoById(int id);-->
    <select id="selectVideoById" resultType="com.ceh.entity.Video">
        select * from video where id = #{id}
    </select>
</mapper>
  1. 測試:
@Test
 public void test01() throws IOException {
     //指定mybatis的核心配置檔案位置
     String configLoca = "config/mybatis-config.xml";
     //讀取核心配置檔案,得到inputStream
     InputStream is = Resources.getResourceAsStream(configLoca);
     //根據sqlSessionfactoryBuilder構造出SqlSessionFactory工廠
     SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
     //因為sqlsession使用完畢需要釋放資源,這裡使用jdk新特性,使用完畢,自動釋放
     try(SqlSession sqlSession = factory.openSession()){
         //使用mybatis的動態代理的形式,構造出VideoDao的實現類物件,並賦值給VideoDao(多型)
         VideoDao videoDao = sqlSession.getMapper(VideoDao.class);
         //呼叫方法,獲取返回值
         Video video = videoDao.selectVideoById(37);
         //輸出
         System.out.println(video);
     }
 }
  1. 結果:
    在這裡插入圖片描述

mybatis自動的幫我們把結果對映到pojo上,我們不需要再考慮處理結果集

三.注意事項:
  1. VideoDao videoDao = sqlSession.getMapper(VideoDao.class);

這裡使用的是mybatis動態代理的形式,根據我們介面的全路徑及對映檔案的namespace匹配,生成介面的代理物件,我們只需要呼叫介面的方法(多型),即可完成呼叫。
mybatis動態代理的要求:
1.介面名要和對映檔名一致
2.對映檔案的namespace必須寫為介面的全路徑
3.入參型別保持一致
4.出參型別保持一致

  1. sql語句中的#{}理解:

其實這裡也可以使用${}的形式,給佔位符賦值
區別:
#{}可以防止sql注入,它給引數加了’’,這樣sql注入時,是無效的,但是模糊查詢時需要’%’#{xxx}’%'形式
${}不具備防止sql注入,不建議使用,傳遞的是什麼值,這裡賦值的就是什麼值。

  1. try(xxx){}:

這個是jdk的新特性,我們使用jdbc連線資料庫時,需要關閉resultset、statment、conntation時,需要在fnally裡面一個一個進行關閉,jdk新特性就是隻要實現了Closeable介面的物件,那麼這個物件就可以寫在try裡面,執行完畢之後,自動關閉