秒秒鐘看懂MyBatis

      最近做項目用到了MyBatis,之前沒接觸過,本以爲它有多麼高深呢,結果看完之後才發現So Easy,因爲之前用過Hibernate,所以感覺它很容易理解。趕緊讓我們看看它到底是個什麼東西吧。

一、快速普及

1、是什麼

      是一個支持普通SQL查詢,存儲過程和高級映射的優秀持久層框架。
      MyBatis消除了幾乎所有的JDBC代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或註解用於配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數據庫中的記錄。

Mybatis實現了接口綁定,使用更加方便。
對象關係映射的改進,效率更高
MyBatis採用功能強大的基於OGNL的表達式來消除其他元素。

2、功能架構

這裏寫圖片描述

3、執行流程

這裏寫圖片描述

原理詳解:

       MyBatis應用程序根據XML配置文件創建SqlSessionFactory,SqlSessionFactory在根據配置,配置來源於兩個地方,一處是配置文件,一處是Java代碼的註解,獲取一個SqlSession。SqlSession包含了執行sql所需要的所有方法,可以通過SqlSession實例直接運行映射的sql語句,完成對數據的增刪改查和事務提交等,用完之後關閉SqlSession。


二、代碼理解

1、業務邏輯層的調用

MyBatis一般應用於Dao層,所以我們從業務邏輯的調用開始看

/*
 *用戶管理-業務邏輯實現
 */
@Service
public class UserSericerImp implements UserSericer{
    //自動注入Dao層的用戶管理類
    @Autowired
    private UserDao ud;

    //新增用戶
    @Override
    public long saveUser(UserMonitor um) {
        // TODO Auto-generated method stub
        return ud.saveUser(um);
    }

    //查詢所有用戶
    @Override
    public List<UserMonitor> listUser() {
        // TODO Auto-generated method stub
        List<UserMonitor> list = ud.listUser();
        return list;
    }

    //更新用戶
    @Override
    public long upUser(UserMonitor um) {
        // TODO Auto-generated method stub
        return ud.upUser(um);
    }

    //刪除用戶
    @Override
    public long delUser(long id) {
        // TODO Auto-generated method stub
        return ud.delUser(id);
    }
}

2、Dao層的接口

/*
 *用戶管理-Dao層接口
 */
@Component("UserDao")
public interface UserDao {
    /**
     * login
     */
     public UserMonitor login(UserMonitor um);

     /**
      * 新增用戶
      * @param um
      * @return
      */
     public long saveUser(UserMonitor um);

     /**
      * 展示USER
      * 
      */
     public List<UserMonitor> listUser();

     /**
      * 修改
      * @param um
      * @return
      */
     public long upUser(UserMonitor um);

     /**
      * 刪除
      * @param um
      * @return
      */
     public long delUser(long id);
 }

3、Dao層實現

      這裏需要注意的是,Dao層是通過xml配置文件實現的,而且裏邊的方法名一定不能重複(注意:即使在不同的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.jiedaibao.fundmonitor.dao.mapper.UserDao">
    <!-- 配置返回實體與表結構的對應關係 -->
    <resultMap id="UserMonitor"  type="com.jiedaibao.fundmonitor.dao.domain.UserMonitor"> <!-- 實體名稱及位置 -->
        <!-- 主鍵 -->
        <id column="id" property="id" jdbcType="INTEGER" />   
        <!-- 用戶名 -->
        <result column="username" property="username" />
        <!-- 密碼 -->
        <result column="password" property="password" />
    </resultMap>

    <!-- 查詢所有用戶 -->
    <select id="listUser" parameterType="com.jiedaibao.fundmonitor.dao.domain.UserMonitor" resultMap="UserMonitor">
      select id,username,password from t_user order by username
    </select>

    <!-- 添加新用戶 -->
    <insert id="saveUser" parameterType="com.jiedaibao.fundmonitor.dao.domain.UserMonitor">
      <![CDATA[INSERT INTO t_user (username,password) 
      VALUES(#{username},#{password})]]>
    </insert>

    <!-- 更新用戶 -->
    <update id="upUser" parameterType="com.jiedaibao.fundmonitor.dao.domain.UserMonitor">
      <![CDATA[UPDATE t_user ]]>
        <set>
            <if test="username != null and username != ''">
           <![CDATA[username=#{username}]]>
            </if>
            <if test="password != null and password != ''">
          <![CDATA[`password`= #{password}]]>
            </if>
        </set>
        <where>
          <![CDATA[ id=#{id}]]>
        </where>
    </update>

    <!-- 刪除用戶 -->
    <delete id="delUser" parameterType="com.jiedaibao.fundmonitor.dao.domain.UserMonitor">
      <![CDATA[DELETE FROM t_user  ]]>
        <where>
        <![CDATA[id=#{id}]]>
        </where>
    </delete>
</mapper>

說明:
id:這個xml中的id與接口中的方法名相匹配
parameterType:是傳入參數的類型,可以是String等常用類型,也可以是定義的實體
resultMap:是返回的結果集,本例子中的“UserMonitor”在開頭已經配置(即配置返回實體與表結構的對應關係)

4、實體

/*
 * 用戶實體
 */
public class UserMonitor {

     private Long id; //自增id
     private String username;//用戶名
     private String password; //密碼
 }

總結:

      我們現在只是簡單瞭解了一下MyBatis,在開發中完全可以快速上手了,但是其他如事務、緩存、存儲過程、動態sql、映射等,我們就不在介紹了,感興趣的朋友可以自己看看。

發佈了179 篇原創文章 · 獲贊 360 · 訪問量 62萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章