MyBatis學習筆記 - 第001天

MyBatis 入門

1.1 MyBatis 是什么?

MyBatis 是一個簡化和實現了 Java 數據持久化層(persistence layer)的開源框架,它抽象了大量的 JDBC 冗余代碼,并提供了一個簡單易用的 API 和數據庫交互。
  MyBatis 的前身是 iBATIS,iBATIS 于 2002 年由 Clinton Begin 創建。 MyBatis 3 是 iBATIS 的全新設計,支持注解和 Mapper。
MyBatis 流行的主要原因在于它的簡單性和易使用性。在 Java 應用程序中,數據持久化層涉及到的工作有:將從數據庫查詢到的數據生成所需要的 Java 對象;將 Java 對象中的數據通過 SQL 持久化到數據庫中。
  MyBatis 通過抽象底層的 JDBC 代碼,自動化 SQL 結果集產生 Java 對象、 Java 對象的數據持久化數據庫中的過程使得對 SQL 的使用變得容易。

1.2 為什么選擇 MyBatis?

當前有很多 Java 實現的持久化框架,而 MyBatis 流行起來有以下原因:

  • 它消除了大量的 JDBC 冗余代碼
  • 它有低的學習曲線
  • 它能很好地與傳統數據庫協同工作
  • 它可以接受 SQL 語句
  • 它提供了與 Spring 和 Guice 框架的集成支持
  • 它提供了與第三方緩存類庫的集成支持
  • 它引入了更好的性能

1.3 MyBatis 安裝和配置

1.3.1 新建 mybatis-config.xml配置文件

創建 MyBatis 的主要配置文件 mybatis-config.xml,其中包括數據庫連接信息,類型別名等等,然后將其加
到 classpath 中;

<?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>

   <typeAliases> 
        <!-- 
        <typeAlias alias="User" type="com.kygo.mybatis.entity.User"/> 
        --> 
        <package name="com.kygo.mybatis.entity"/>   
   </typeAliases> 
    
  <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/mybatis?useUnicode=true&amp;characterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  
  <mappers>
    <mapper resource="com/kygo/mybatis/dao/UserDao.xml"/>
  </mappers>
  
</configuration>
1.3.2 映射器 UserDao.xml

創建 SQL 映射器 XML 配置文件 UserDao.xml 并且將它放在 com.kygo.mybatis.mappers 包中

<?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.kygo.mybatis.dao.UserDao">

    <resultMap type="User" id="UserResult">
        <id column="userid" property="id" />
        <result column="username" property="username" />
        <result column="email" property="email" />
        <result column="nickname" property="nickname" />
        <result column="gender" property="gender" />
    </resultMap>
    
    <select id="findAll" resultMap="UserResult">
        select * from tb_user
    </select>
    <select id="findByUsername" parameterType="String" resultType="User">
        select * from tb_user where username=#{username}
    </select>
    <insert id="save" parameterType="User">
        insert into tb_user value (default, #{username}, #{password}, #{email},
        #{gender}, #{nickname}, #{photo})
    </insert>
    <delete id="deleteByUsername" parameterType="String">
        delete from tb_user where username=#{username}
    </delete>
    <update id="update" parameterType="User">
        update tb_user set email=#{email} where username=#{username}
    </update>
</mapper> 

1.3.3 新建 UserDao 接口

讓我們創建一個 UserDao 接口,其定義的方法名和在 Mapper XML 配置文件定義的 SQL 映射語句名稱相同;

public interface UserDao {
    
    public List<User> findAll();
    
    public User findByUsername(String username);
    
    public void save(User user);
    
    public void deleteByUsername(String username);
    
    public void update(User user);
}

1.3.4 測試

    String resource = "mybatis-config.xml";
        InputStream in = Resources.getResourceAsStream(resource);
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
        SqlSession session = sessionFactory.openSession();
        UserDao userDao = session.getMapper(UserDao.class);
        User user = userDao.findByUsername("admin");
        session.close();

1.3.5 它是怎么工作的

首先,我們配置了 MyBatis 最主要的配置文件-mybatis-config.xml,里面包含了 JDBC 連接參數;配置了映射器Mapper XML 配置文件文件,里面包含了 SQL 語句的映射。
  我們使用 mybatis-config.xml 內的信息創建了SqlSessionFactory 對象。每個數據庫環境應該就一個SqlSessionFactory 對象實例,所以我們使用了單例模式只創建一個 SqlSessionFactory 實例。
  我們創建了一個映射器 Mapper 接口-UserDao,其定義的方法簽名和在 UserDao.xml 中定義的完全
一樣(即映射器 Mapper 接口中的方法名跟 UserDao.xml 中的 id 的值相同)。注意 UserDao.xml 中namespace 的值被設置成com.kygo.mybatis.dao.UserDao,是 UserDao 接口的完全限定名。這使我們可以使用接口來調用映射的 SQL 語句。
  在 StudenService.java 中,我們在每一個方法中創建了一個新的 SqlSession,并在方法功能完成后關閉SqlSession。每一個線程應該有它自己的 SqlSession 實例。 SqlSession 對象實例不是線程安全的,并且不被共享。所以 SqlSession 的作用域最好就是其所在方法的作用域。從 Web 應用程序角度上看,SqlSession 應該存在于 request 級別作用域上。

配置日志

新建 log4j.properties 文件,添加到 classpath 中

log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] %c - %m%n
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容